只是解决方案
这是一个非常标准的使用lsqnonlin
,你只需要得到它正确格式化。这意味着这样的事情:
%First, define a function whose inputs are a single vector, and whose
%outputs can be minimized
funToMinimize = @(abc) myfunction(Xdata,abc(1), abc(2), abc(3)) - Ydata;
%Define an initial guess of the values (including the size of the vector)
abcInitial = [0 0 0]; %Or whatever your best guess is
%Then use the nonlinear fit
abcFit = lsqnonlin(funToMinimize , abcInitial);
示范
我显然不能产生一个解决您的myfunction
问题,但我们还是可以通过的重要步骤走。
首先,我们定义一个函数来模拟您的myfunction
,Xdata
和Ydata
。
%Define some complicated-ish "myfuction", with inputs that match yours
myfunction = @(xsimul, a, b, c) sqrt(abs(xsimul))*a + sin(xsimul)*b*a^2 + c;
%Define "Xdata"
Xdata = linspace(0,10,100);
%Define "Ydata", note that I'm sneaking in a set of (a, b, c) values here
Ydata = myfunction(Xdata, 1, 2, 3);
现在,让我们运行在上面的答案的步骤:
funToMinimize = @(abc) myfunction(Xdata,abc(1), abc(2), abc(3)) - Ydata;
abcInitial = [0 0 0];
abcFit = lsqnonlin(funToMinimize , abcInitial)
最后一步应该返回[1 2 3]
,匹配(A,B,C)用于生成Ydata
值。
要在这里确认:'Xdata'和'Ydata'是相同大小的载体? 'a','b'和'c'是标量?目标是找到'a','b'和'c'的最佳估计值以适应所提供的数据? – Pursuit
是Xdata和Ydata大小相等,a,b,c是要估计的标量。我应该指出的。并感谢您的快速回复!我会尝试基于你的提示来实现这个算法 – BMST