用matlab对非线性方程求解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
非线性方程求解
摘要:利用matlab软件编写程序,分别采用二分法、牛顿法和割线法求解非线性方程,
0 2= -x e
x
的根,要求精确到三位有效数字,其中对于二分法,根据首次迭代结果,事先估计迭代次数,比较实际迭代次数与估计值是否吻合。并将求出的迭代序列用表格表示。对于牛顿法和割线法,至少取3组不同的初值,比较各自迭代次数。将每次迭代计算值求出,并列于表中。
关键词:matlab、二分法、牛顿法、割线法。
引言:
现实数学物理问题中,很多可以看成是解方程的问题,即f(x)=0的问题,但是除了极少简单方程的根可以简单解析出来。大多数能表示成解析式的,大多数不便于计算,所以就涉及到算法的问题,算法里面,具体求根时,一般先寻求根的某一个初始近似值,然后再将初始近似值逐步加工成满足精度要求为止,但是,我们知道,人为计算大大的加重了我们的工作量,所以大多用计算机编程,这里有很多可以计算的软件,例如matlab等等。
正文:
一、二分法
1 二分法原理:对于在区间[,]上连续不断且满足·<0的函数,
通过不断地把函数的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫做二分法。
2 二分法求根步骤:(1)确定区间,,验证·<0,给定精确度;(2)求区间,的中点;(3)计算。若=,则就是函数的零点;若·
<0,则令=;若·<0,则令=。(4)判断是否达到精确度;即若
<,则得到零点近似值(或);否则重复步骤2-4.
3 二分法具体内容:精度要求为5e-6,,解得实际迭代次数与估计值基本吻合,迭代如下表。n=2 c=0.000000 fc=-1.000000 n=11 c=-0.705078 fc=0.003065 n=3 c=-0.500000 fc=-0.356531 n=12 c=-0.704102 fc=0.001206 n=
4 c=-0.750000 fc=0.090133 n=13 c=-0.703613 fc=0.000277 n=
5 c=-0.625000 fc=-0.14463
6 n=14 c=-0.703369 fc=-0.00018
7 n=6 c=-0.687500 fc=-0.030175 n=15 c=-0.703491 fc=0.000045 n=7 c=-0.718750 fc=0.029240 n=16 c=-0.703430 fc=-0.000071 n=
8 c=-0.703125 fc=-0.000651 n=17 c=-0.703461 fc=-0.000013 n=
9 c=-0.710938 fc=0.014249 n=18 c=-0.703476 fc=0.000016
n=10 c=-0.707031 fc=0.006787 n=19 c=-0.703468 fc=0.000002
4 二分法程序:
eps=5e-6;
delta=1e-6;
a=-1;
b=1;
fa=f(a);
fb=f(b);
n=1;
while (1)
if(fa*fb>0)
break;
end
c=(a+b)/2;
fc=f(c);
if(abs(fc) break; else if(fa*fc<0) b=c; fb=fc; else a=c; fa=fc; end if(b-a break; end n=n+1; fprintf('n=%d c=%f fc=%f\n',n,c,fc); end End (在同一目录下另建文件名为“f”的文件,内容为“function output=f(x) output=x*x-exp(x);”) 5 二分法流程图: 流程图 二:牛顿法 1 牛顿迭代法原理:设已知方程0)(=x f 的近似根0x ,则在0x 附近)(x f 可用一阶泰勒多项式))((')()(000x x x f x f x p -+=近似代替.因此, 方程0)(=x f 可近似地表示为 0)(=x p .用1x 表示0)(=x p 的根,它与0)(=x f 的根差异不大. 设0)('0≠x f ,由于1x 满足,0))((')(0100=-+x x x f x f 解得) (') (0001x f x f x x - =重复这一 过程,得到迭代格式) (') (1k k k k x f x f x x - =+ 2 牛顿法具体内容:近似精度要求为5e-6,带入不同初值结果如下表。 初值-0.8迭代序列 初值-0.5迭代序列 初值-0.7迭代序列 -0.706959 -0.721926 -0.703472 -0.703472 -0.703601 -0.703467 3 牛顿法程序:这里以初值为0.7为例 fc=@(x)x*x-exp(x); df=@(x)2*x-exp(x); eps=5e-6; delta=1e-6; x0=-0.7; N=100; n=0; while(1) x1=x0-fc(x0)/df(x0); n=n+1; if(n>N|abs(x1) disp('Newton method failed'); break; end if abs(x1)<1 d=x1-x0; else d=(x1-x0)/x1; end x0=x1; if (abs(d) end fprintf('%f\n',x0) End 4 牛顿法流程图: