function root=NewtonRootReal(f,a,b,eps)
f1=real(subs(sym(f),findsym(sym(f)),a));
f2=real(subs(sym(f),findsym(sym(f)),b));
if(f1==0)
root=f1;
end
if(f2==0)
root=f2;
end
if(f1*f2>0)
disp('>0')
return;
else
tol=1;
fun=diff(sym(f));
fa=real(subs(sym(f),findsym(sym(f)),a));
fb=real(subs(sym(f),findsym(sym(f)),b));
dfa=real(subs(sym(fun),findsym(sym(fun)),a));
dfb=real(subs(sym(fun),findsym(sym(fun)),b));
if(dfa>dfb)
root=a-fa/dfa;
else
root=b-fb/dfb;
end
while(tol>eps)
r1=root;
fx=real(subs(sym(f),findsym(sym(f)),r1));
dfx=real(subs(sym(fun),findsym(sym(fun)),r1));
root=r1-fx/dfx;
tol=abs(root-r1);
end
end
函数f既有实数部分,又有虚数部分,我把牛顿法修改了只求函数f实数部分为零的解。基于原始的NewtonRoot法,增加了real以求得实数部分。其他未曾修改。求大神看一下可以这样修改么?应该没有问题吧