Я пытаюсь использовать пользовательскую функцию изучения разницы во времени , которую я использовал ранее. Я немного изменил его, чтобы выводить только переменную "V
" по столбцам и взять один столбец "stim
" с числами 1, 2, 3, 4, or 5
. На основе чисел
- это создаст матрицу
0s
и что это length of the number
of trials
(длина стима)
- и будет
add 1
для каждого испытания в зависимости от столбца, обозначенного
число в stim (1, 2, 3, 4, 5)
для этого испытания (я знаю, что это не
самый чистый способ сделать это, но это был единственный способ, чтобы это работало в fittype
функция).
Функция выглядит следующим образом:
function model = TDFit3(x,r,alpha,g)
model = [];
% create 5 columns 0s with 1 denoting if number is present in column
% for that trial
stim = x;
X = [];
for j=1:length(stim)
if stim(j) == 1
X(j, :) = [1 0 0 0 0];
elseif stim(j) == 2
X(j, :) = [0 1 0 0 0];
elseif stim(j) == 3
X(j, :) = [0 0 1 0 0];
elseif stim(j) == 4
X(j, :) = [0 0 0 1 0];
elseif stim(j) == 5
X(j, :) = [0 0 0 0 1];
end
end
% initialization
[N,D] = size(X);
w = zeros(D,1); % weights
X = [X; zeros(1,D)]; % add buffer at end
% run Kalman filter
for n = 1:N
h = X(n,:) - g*X(n+1,:); % temporal difference features
V = X(n,:)*w; % value estimate
rhat = h*w; % reward prediction
dt = r(n) - rhat; % prediction error
w = w + alpha*dt*h'; % weight update
model = [model; V];
end
end
Функция работает независимо от подгонки кривой. Я проверил это, и он дает ожидаемый результат. Два входа и двойные переменные 139x1, а выход - двойная переменная 139x1. Они одного класса и одного размера.
Однако, когда я пытаюсь подгонять кривые, чтобы определить наилучшие коэффициенты подгонки альфа и g, как в приложении с графическим интерфейсом, так и ниже:
[xData, yData, zData] = prepareSurfaceData( stim, r, outcome );
ft = fittype( 'TDFit3(x,y,alpha,g)', 'independent', {'x', 'y'}, 'dependent', 'z', 'coefficients', {'alpha','g'} )
Я получаю приведенную ниже ошибку каждый раз, когда пытаюсь изогнуть функцию под свои данные.
Ошибка при использовании fittype / testCustomModelEvaluation (строка 16) Custom
Уравнения должны создавать выходной вектор, матрицу или массив, который является
тот же размер и форма, что и входные данные. Это пользовательское уравнение не в состоянии
удовлетворить это требование:
TD_Fit (х, у, альфа, г) * * тысяча тридцать две
Ошибка в fittype> iCreateFittype (строка 373)
testCustomModelEvaluation (obj);
Ошибка в типе соответствия (строка 330)
obj = iCreateFittype (obj, varargin {:});
Я не уверен, почему это происходит, так как я проверил размер и класс, и они одинаковы за пределами подгонки кривой или типа подгонки. Переменная «a» - это выходная переменная ниже.
Размер и класс каждой переменной
Кто-нибудь знает, почему эта ошибка произойдет, если выходные данные будут того же класса и размера входных переменных за пределами подгонки кривой? У меня заканчиваются идеи, и я понятия не имею, как исправить, если все переменные имеют одинаковые значения и одинаковые размеры при работе за пределами подгонки кривой.
Я пробовал различные способы форматирования выходных данных функции, чтобы убедиться, что она правильная, я дважды проверил назначение моих переменных, я перезапустил функцию независимо от подгонки кривой, и выходные данные всегда имеют одинаковый размер и класс в качестве входных переменных. Я понятия не имею, почему это дает мне эту ошибку.
Я хотел бы иметь коэффициенты, которые соответствуют кривой, но эта ошибка предотвращает это.