【问题标题】:Using `lsqnonlin` with vector inputs将 `lsqnonlin` 与向量输入一起使用
【发布时间】:2018-03-28 08:33:55
【问题描述】:

我有一个关于使用lsqnonlin 函数的问题。

就我而言,我有两个功能:

f_1=@(t,x)sin(t+x.^2);
f_2=@(t,x)cos(x.^2)+3.*t.^2;
f = {f_1, f_2};

我想找出会导致最小二乘误差的参数tx 的值,定义为:f_1(t,x)^2+f_2(t,x)^2。换句话说,LSE 的 argmin

我的代码如下,初步猜测[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.

lsqnonlin 可以根据文档用于向量函数和向量输入。我想知道如何为它准备相应的代码。有人可以提出解决方案吗?

【问题讨论】:

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


    【解决方案1】:

    您收到错误是因为lsqnonlin 需要一个标量函数句柄,该句柄将一个向量映射到一个向量,而您指定了一个函数句柄元胞数组。要解决此问题,您需要将其重写为一个函数,该函数接受一个vector输入并输出一个vector,而不是一个函数向量输出一个标量:

    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
    

    【讨论】:

      猜你喜欢
      • 2014-06-12
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多