MATLAB中是否有任何函数可以找到向量值函数的零点?常用函数fzero
仅用于标量函数,也找不到任何标量函数的零,例如f(x)=x^2
。
答案 0 :(得分:1)
Matlab的优化工具箱具有fsolve method,表明它能够:
解决
F(x) = 0
为x
指定的问题,其中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)
尝试找到x
点fun(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);
现在无法检查,我稍后会编辑此解决方案。