leshyboy 发表于 2007-1-5 00:36

求助,fzero求解方程时碰到问题

我在用fzero求解一元三次方程时遇到奇怪的问题,望高人指点。程序如下(原来的程序段很长,这里仅截取一部分出问题的程序段):

a=3.8720*1e-1;b=7.7997*1e-5;c=9.8605*1e1;d=1.897*1e-6;
f=@(x)a*x.^3+(b-c^2)*x.^2+2*c*d*x-d^2;
=fzero(f,0);
phi_solution
feval(f,7.0681*1e-10)

上面程序中a,b,c,d本来是中间变量,我在这里把它们的具体值(通过debug的step in求得)写出来当作已知量,方程如上所示,运行
之后phi_solution的值为2.5111e+004,而且不管你把后面的初值改成什么,输出结果都是2.5111e+004(这个很无语啊,这里取0)。
于是我猜想这个方程可能只有一个实根2.5111e+004,对应的多项式在该点处的值为 -3.5321e-004。但是当我把phi_solution=7.0681*1e-10代入方程中时,函数值为-3.3390e-012,明显求解时应该得到这个解才更精确呀。而且fzero不像fsolve那样
可以设TolFun的精度。望高人指点,不胜感激。
ps:这里给出的是我整个程序的一个大循环中的一部分,我希望得到在7.0681*1e-10附近的解,现在得到的2.5111e+004这个解在循环
运行一次之后会很大程度的改变a,b,c,d 的值,fzero 再求解的时候就会出现找不到解或者复数解得情况,再循环回来的时候就肯定出现
了错误信息。

[ 本帖最后由 leshyboy 于 2007-1-5 00:40 编辑 ]

xjzuo 发表于 2007-1-5 10:41

回复

这种问题至少有5种方法可以用来分析.
如果你画一下图形, 不用猜测, 你就会发现函数有两个零点.
接下来, 我想你应该会分析了.
提示: 你可以取 x=-10:30000; 以便显示出函数的整体特征.
页: [1]
查看完整版本: 求助,fzero求解方程时碰到问题