PDA

查看完整版本 : [MATLAB数学相关] 求解一个非线性方程


lansedetangge
2010-12-08, 12:05
f(x)=ln((513+0.6651*x)/(513-0.6651*x))-x/(1400*0.0918)
求解该方程的非零近似解,选择牛顿法即x1=x0-f(x0)/f'(x0)
首先建立fun函数的m文件:
function [f1,f2]=fun(x)
f1=log((513+0.6651*x)/(513-0.6651*x))-x/(1400*0.0918);
f2=-(((0.6651*(0.6651*x+513))/(0.6651*x-513)^2-0.6651/(0.6651*x-513))*(0.6651*x-513))/(0.6651*x+513)-0.0077808901338313103018985371926548;

然后用牛顿迭代公式编写算法:
m=1.0e-10;
N=20;
n=1;
x1=10;
[f1,f2]=fun(x1);
x=x1-f1/f2;
while abs(x-x1)>m
if n<N
n=n+1;
x1=x;
[f1,f2]=fun(x1);
x=x1-f1/f2;
else
disp('失败!')
break
end
end


得到x =

-1.4006e-015
这是非零解么?

dogelaa
2012-02-28, 16:37
这个从程序来说应该是实际的数值解,但是否可以近似(注意所有非零解都是近似的)作为非零解取决于你的初设精度。本身在迭代时,你的控制精度“高达”10E-10,在此精度下,此解没有实际意义,可认为是0解。根据原函数,其在零点附近的波动十分之小。试验x=-1.00E-9~x=+1.00E-9,带入原方程可以得到其输出结果始终在+-5.2E-12之间。其实,此方程没有非零实数解。