【发布时间】:2018-02-06 01:16:11
【问题描述】:
我正在编写 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
【问题讨论】:
-
您可以访问曲线拟合工具箱吗? fit function with 'gauss2' option 可能更容易使用。
-
感谢您的回答。是的,我确实有它,但我希望以这种方式进行拟合,以使其成为未来使用的通用代码。目前,我有兴趣了解问题可能是什么。这是否与求解器有关,或者 lsqcurvefit 函数在这种情况下不是最好的?
标签: matlab model-fitting