向量值函数的零

时间:2017-01-23 03:05:35

标签: matlab function vector zero minimize

MATLAB中是否有任何函数可以找到向量值函数的零点?常用函数fzero仅用于标量函数,也找不到任何标量函数的零,例如f(x)=x^2

2 个答案:

答案 0 :(得分:1)

Matlab的优化工具箱具有fsolve method,表明它能够:

  

解决F(x) = 0x指定的问题,其中F(x)是一个返回向量值的函数。 x是矢量或矩阵。

否则,通过尝试最小化矢量输出的范数,可以找到通用矢量值函数的零。让我们假设您的函数F(x)输出Nx1向量。您可以通过执行以下操作尝试找到零:

 y = fminunc(@(x) sum(F(x).^2));

 y = fminsearch(@(x) sum(F(x).^2));

然后,您必须检查返回的y是否“足够接近”为零。

最后一条评论,fzero函数的算法通过检查符号更改来确定根的存在。 [docs]明确说出

  

x = fzero(fun,x0)尝试找到xfun(x) = 0。此解决方案是fun(x)更改符号的位置。 fzero无法找到x^2等函数的根。

事实上,在旧版本的matlab(R2012b)中,fzero的doc有一个部分,其中有限制说明

  

fzero命令找到函数更改符号的点。如果函数是连续的,那么这也是函数具有接近零的值的点。如果函数不连续,则fzero可能返回不连续点而不是零的值。例如,fzero(@ tan,1)返回1.5708,这是tan的不连续点。

     

此外,fzero命令将零定义为函数穿过x轴的点。函数触摸但不交叉的点,x轴无效零。例如,y = x。^ 2是抛物线,其在0处接触x轴。因为该函数从未穿过x轴,但是没有找到零。对于没有有效零的函数,fzero将执行,直到检测到Inf,NaN或复杂值。

答案 1 :(得分:0)

也许我误解了你的问题,但你可以尝试这个解决方案:

y = @(x) x^2;

fminbnd(y, -100, 100)

ans =   -3.5527e-15

也许你可以试试solve

syms x y
y = @(x) x^2;
solve( y==0, x);

现在无法检查,我稍后会编辑此解决方案。