Я пишу код MATLAB с намерением сделать некоторые настройки. Я смоделировал график с помощью гауссова второго порядка (см. мой код ниже) и попытался подобрать его с помощью функции lsqcurvefit. К сожалению, MATLAB возвращает те же значения предположений, что и «оптимизированные» параметры, и, по-видимому, застревает в локальном минимуме.
Может кто-нибудь дать совет, что здесь может быть не так? Я знаю, что если догадка далека от «истинных» значений, это может произойти, но я ожидал, что MATLAB вернет ответ, который будет ближе к истинному значению. Улучшение начального предположения до [29,0]
(что намного ближе к фактическому значению) приводит к тому же результату: начальное значение является локальным минимумом.
%%%%%%%%%%
function z= testfunction(x, xdata);
sigma=x(1)/(2*sqrt(2*log(2)));
z=((xdata.^2-2*x(2)*xdata-sigma.^2+x(2)^2)./(sigma^5*sqrt(2*pi))).*exp(-(xdata-x(2)).^2/(2.*sigma.^2));
end
%%%%%%%%
% Simulate Data
xdata= -50:1:50;
ydata = testfunction([30,0],xdata);
% Fit Data
xfit = lsqcurvefit(@testfunction,[19,-4],xdata, ydata );
xfit(1)
xfit(2)
yfit=testfunction([xfit(1),xfit(2)],xdata);
% Plot Data;
plot(xdata,yfit);
hold on;
plot(xdata,ydata,'o')
Выход:
Initial point is a local minimum.
Optimization completed because the size of the gradient at the initial point
is less than the default value of the optimality tolerance.
<stopping criteria details>
ans =
19
ans =
-4