让我们考虑在MATLAB中使用以下代码:
f=inline('x.^4-29*x.^2-132','x')
f =
Inline function:
f(x) = x.^4-29*x.^2-132
x=fzero(f,-5.5)
x =
-5.744562646538029
f(x)
ans =
0
fzero工作正常,但代码是
g=inline('x^2','x')
g =
Inline function:
g(x) = x^2
h=fzero(g,-1.3)
Exiting fzero: aborting search for an interval containing a sign change
because NaN or Inf function value encountered during search.
(Function value at 1.5776e+154 is Inf.)
Check function or try again with a different starting value.
h =
NaN
返回此结果,我该如何解决?我应该引入一些容差还是在MATLAB中有另一种方法?
答案 0 :(得分:3)
fzero能够找到符号更改的根,其他人找不到。
如果可用,请使用符号工具箱:
syms x
w=x.^4-29*x.^2-132
solve(w)
v=x^2
solve(v)
答案 1 :(得分:3)
您也可以使用fminsearch
:
x=fminsearch(@(x) abs(x^2),-5.5)
x =
4.4409e-15
x=fminsearch(@(x) abs(x.^4-29*x.^2-132),-5.5)
x =
-5.7446
答案 2 :(得分:3)
只是为了完成这一系列的答案,有roots
。它适用于多项式,并为您提供所有可能的解决方案(包括复杂的解决方案)。
f = [1 0 -29 0 -132]; %// x^4 + 0x^3 -29x^2 + 0x -132
roots(f)
ans =
-5.7446
5.7446
0.0000 + 2.0000i %// Funny coincidence
0.0000 - 2.0000i
现在针对另一个示例(请注意x^2 = 0
在x = 0
处有双根:
f = [1 0 0]; %// x^2 + 0x + 0
roots(f)
ans =
0
0
只是为了好玩,x^2 = -1
:
f = [1 0 1];
roots(f)
ans =
0 + 1.0000i
0 - 1.0000i