Ошибка измерения nlinfit

Я использую инструмент нелинейной подгонки в Matlab. Я продолжаю получать следующую ошибку:

Ошибка при использовании nlinfit (строка 210) MODELFUN должна быть функцией, которая возвращает вектор подобранных значений того же размера, что и Y (1 на 100). Предоставленная вами модельная функция вернула результат 1 на 2. Одной из распространенных причин несоответствия размера является использование матричных операторов (, /, ^) в вашей функции вместо соответствующих поэлементных операторов (., ./, .^).

Я нашел этот вопрос очень похожим на мой, но все равно получаю ту же ошибку. Я попытался вычислить myfun на консоли, используя вектор в качестве входных данных, что дает мне вывод правильного размера. Будет тонна помощи, если кто-нибудь может указать на ошибку.

% Defining the function
myfun = @(t,b)exp(t.*b(1)+b(2));
[y_a] = arrayfun(myfun,x_a);
% Using nonlinear least square minimization
beta0 = [1 1];
nlinfit(x,y,myfun, beta0)

Заранее спасибо...:)

Изменить: обнаружил, что это работает. g = fittype('exp(k*x + a)'); [fit1,gof,fitinfo] = fit(x',y',g,'StartPoint',[1 1]);


person swagat patnaik    schedule 11.01.2016    source источник


Ответы (1)


Функция, используемая в nlinfit, принимает вектор параметров в качестве первого аргумента. , то независимый вектор данных. Ты хочешь,

myfun = @(b,t)exp(t.*b(1)+b(2));

Обратите внимание, что в этом случае вы также можете просто использовать * вместо .*.

person Phil Goddard    schedule 11.01.2016
comment
Каковы ваши размеры x и y и какое сообщение об ошибке вы получаете, когда входные данные для myfun правильно упорядочены? - person Phil Goddard; 11.01.2016
comment
Спасибо за комментарий, я уже пробовал. Я пробовал что-то вроде. myfun = @(b,t)exp(t*b(1)); Даже эта простая функция выдавала ту же ошибку. Также попробовал lsqcurvefit, получил почти ту же ошибку. наконец удалось обойти это, используя простую функцию подгонки. g = fittype('exp(k*x + a)'); [fit1,gof,fitinfo] = fit(x',y',g,'StartPoint',[1 1]); Не совсем уверен, в чем проблема, но любые идеи будут крутыми! - person swagat patnaik; 11.01.2016
comment
Размерность x = (1x100) и y = (1x100). Я даже пытался перенести их в векторы, но не получил никаких результатов. - person swagat patnaik; 11.01.2016
comment
Странно, так как x=1:100;y=x+randn(size(x));nlinfit(x,y,myfun,[0 0]) работает нормально. - person Phil Goddard; 11.01.2016
comment
Спасибо за комментарий: пытался изменить его, но получил то же самое сообщение MODELFUN должна быть функцией, которая возвращает вектор подогнанных значений того же размера, что и Y (1 на 100). Предоставленная вами модельная функция вернула результат 1 на 2. Одной из распространенных причин несоответствия размеров является использование в вашей функции матричных операторов (, /, ^) вместо соответствующих поэлементных операторов (., ./, .^). Я не уверен, может быть какая-то проблема с версией Matlab, которую я установил. - person swagat patnaik; 12.01.2016