使用fzero时出错

时间:2018-01-31 00:18:28

标签: matlab function minimum

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

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)

我该怎么办?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

正如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);