我对使用lsqnonlin
功能有疑问。
在我的情况下,我有两个功能:
xsize
我想找到参数f_1=@(t,x)sin(t+x.^2);
f_2=@(t,x)cos(x.^2)+3.*t.^2;
f = {f_1, f_2};
和t
的值,这些值会导致最小平方误差,定义为:x
。换句话说, argmin for LSE 。
我的代码如下:初始猜测f_1(t,x)^2+f_2(t,x)^2
:
[1,2]
我收到了错误:
根据文档,lsqnonlin(f,[1,2])
Error in lsqnonlin (line 196)
initVals.F = feval(funfcn{3},xCurrent,varargin{:});
Caused by:
Failure in initial objective function evaluation. LSQNONLIN cannot continue.
可用于矢量函数和矢量输入。我想知道如何为它准备相应的代码。有人可以建议解决方案吗?
答案 0 :(得分:0)
您收到错误,因为lsqnonlin
需要一个将向量映射到向量的标量函数句柄,而您指定一个函数句柄的单元格数组。要解决此问题,您需要将其重写为接受向量输入并输出向量的单个函数,而不是每个输出一个标量的函数向量:
f = @(xt)[sin(xt(2)+xt(1).^2), cos(xt(1).^2)+3.*xt(2).^2];
% xt = [x,t]
% f = [f_1(xt), f_2(xt)]
所以f
和xt
都是2个元素的向量。
然后,求解器起作用:
lsqnonlin(f,[1,2])
ans =
1.6144 0.5354