MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   MATLAB论坛 (https://www.labfans.com/bbs/forumdisplay.php?f=6)
-   -   [MATLAB数学相关] 求解一个非线性方程 (https://www.labfans.com/bbs/showthread.php?t=12361)

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
[B][SIZE="4"]这是非零解么?[/SIZE][/B]

dogelaa 2012-02-28 16:37

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


所有时间均为北京时间。现在的时间是 13:35

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.