【问题标题】:Error using fzero使用 fzero 时出错
【发布时间】:2018-07-09 23:56:11
【问题描述】:

我需要知道使用fzero 的曲线y= sin(r)+r.^2 的最小值。 我创建了一个函数:

function w=myfun(r)
w=diff(sin(r)+r.^2);
end

然后在命令窗口:

r=[-pi:.01:pi];
fzero( @myfun,0)

但总是有错误:

||&& 运算符的操作数必须可转换为逻辑标量值。

fzero 中的错误(第 327 行)
elseif ~isfinite(fx) || ~isreal(fx)

fzero(@myfun,0)

我该怎么办?

【问题讨论】:

    标签: matlab function minimum


    【解决方案1】:

    diff 计算了有限差分导数(即邻居之间的差异)。这里,r 是标量,所以diff 返回一个空数组。

    您需要定义您的函数myfun,使其返回给定单个值的导数。因此,您必须手动计算导数函数并将其写入myfun

    【讨论】:

      【解决方案2】:

      正如 Cris 所说,您不能使用 diff,因为它会发现相邻点之间的差异(使用一个值,这种差异是未定义的。

      相反,您可以执行以下操作之一

      自己取导数:

      function w=myfun(r)
      w=cos(r)+2*r;
      end
      

      进行数值微分

      function dw=myfun(r)
      h = sqrt(eps);
      wh=(sin(r+h)+(r+h).^2;
      w= (sin(r)+(r).^2;
      dw = (wh - w)/(h);
      end
      

      或者,使用数值最小化器

      w= @(r) (sin(r)+(r).^2;
      xmin = fminsearch(w,0);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-10
        • 1970-01-01
        • 1970-01-01
        • 2023-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-21
        相关资源
        最近更新 更多