使用带有矢量输入的`lsqnonlin`

时间:2018-03-28 08:33:55

标签: matlab vector mathematical-optimization nonlinear-optimization function-handle

我对使用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. 可用于矢量函数和矢量输入。我想知道如何为它准备相应的代码。有人可以建议解决方案吗?

1 个答案:

答案 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)]

所以fxt都是2个元素的向量。

然后,求解器起作用:

lsqnonlin(f,[1,2])

ans =

    1.6144    0.5354