我的问题是我在Matlab中的Mullers方法算法并没有发现复杂的根只是真实的。我选择哪一点并不重要。使用根函数后,我的算法只在范围[-2,0]范围内找到-1.9713,在范围[1 2]中找到1.4660我知道根是:
roots([2 0.5 -5 2 -3])
ans =
-1.9713
1.4660
0.1276 + 0.7090i
0.1276 - 0.7090i
这是我的代码:
function [sol,sol2,i] = Muller2()
min=-2;
max=0;
f=[2 0.5 -5 2 -3]
x=min
for i=1:Inf
%calculating coefficients of the quadratic equation
a=polyval(polyder(polyder(f)), x)/2;
b=polyval(polyder(f), x);
c=polyval(f, x);
%solving delta
d=b^2-4*a*c;
%calculating roots
z1=-2*c/(b+sqrt(d));
z2=-2*c/(b-sqrt(d));
%choosing the closer root
if(abs(polyval(f, z1))<=abs(polyval(f, z2)))
x=x+z1;
else
x=x+z2;
end
sol2(i)=x
if(abs(polyval(f,x))<=20*eps)
break;
end
end
sol=x
答案 0 :(得分:1)
我明白了。在这段代码中:
%choosing the closer root
if(abs(polyval(f, z1))<=abs(polyval(f, z2)))
x=x+z1;
else
x=x+z2;
end
我改变了这个:
if(abs(polyval(f, z1))<=abs(polyval(f, z2)))
到此:
if(abs(z1))<=abs(z2))
,算法现在正常工作