数学实验报告样本

更新时间:2024-03-28 03:25:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数学实验报告

实验序号: 3 日期: 2013年 12 月 14 日

班级 实验 名称 应数一班 姓名 陈菲 学号 求代数方程的近似根 1101114209 问题背景描述: 求代数方程f(x)?0的根是最常见的数学问题之一,当f(x)是一次多项式时,称f(x)?0为线性方程,否则称之为非线性方程. 当f(x)?0是非线性方程时,由于f(x)的多样性,尚无一般的解析解法可使用,但如果对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求. 本实验介绍一些求方程实根的近似值的有效方法,要求在使用这些方法前先确定求根区间[a,b],或给出某根的近似值x0. 实验目的: 1. 了解代数方程求根求解的四种方法:对分法、迭代法、牛顿切线法 2. 掌握对分法、迭代法、牛顿切线法求方程近似根的基本过程。 1

实验原理与数学模型: 1.对分法 对分法思想:将区域不断对分,判断根在某个分段内,再对该段对分,依此类推,直到满足精度为止.对分法适用于求有根区间内的单实根或奇重实根. 设f(x)在[a,b]上连续,f(a)?f(b)?0,即 f(a)?0,f(b)?0或f(a)?0,f(b)?0.则根据连续函数的介值定理,在(a,b)内至少存在一点 ?,使f(?)?0. 下面的方法可以求出该根: a?bx0?2,计算f(x0); 令xf(x0)?0x?x0若,则0是f(x)?0的根,停止计算,输出结果. b?x0f(a)?f(x0)?0a?x0b1?b,1,若,则令1,;ak?bkx?kba2. ……,有k、k以及相应的ak?bkx?kf(xk)???2; (3) 若 (为预先给定的精度要求),退出计算,输出结果若 f(a)?f(x0)?0,则令a1?ax1?a1?b12. 反之,返回(1),重复(1),(2),(3). (a,b){[a,b]}以上方法可得到每次缩小一半的区间序列kk,在kk中含有方程的根. ak?bkx?kbk?ak2为根的近似值,显然有 当区间长很小时,取其中点1111xk???(bk?ak)???(bk?1?ak?1)??k?1(b?a)2222 以上公式可用于估计对分次数k. 2. 迭代法 迭代法的基本思想: 由方程f(x)?0构造一个等价方程 x从某个近似根0出发,令 xk?1??(xk)k?0,1,2,??, {x}可得序列k,这种方法称为迭代法. {x}若 k 收敛,即 x??(x) limxk?x*k??, 只要?(x)连续,有 limxk?1?lim?(xk)??(limxk)k??k??k??即

{xk}xk*的极限x是x??(x)的根,也就是f(x)?0的根. x*??(x*)可知,当然,若 迭代过程发散,迭代法就失败. 收敛的常用判别标准: x?[a,b]?'(x)当根区间[a,b]较小,且对某一0,明显小于1时,则迭代收敛 2) 迭代法的加速: a) 松弛法: *x?x?(1??k)xk??k?(xk)若?(x)与k同是x的近似值,则k?1是两个近似值的加权平均,其中k称?为权重,现通过确定k看能否得到加速. 迭代方程是: x??(x) 其中?(x)?(1??)x???(x),令?'(x)?1?????'(x)?0,试确定?: 当?'(x)?1时,有xk?1??(xk)????'(xk)11?k?1??k?1??'(xk),1??'(xk)时, 1??'(x),即当xk?1?(1??k)xk??k?(xk)?k?,可望获得较好的加速效果,于是有松弛法: b) Altken方法: x*??(x*),x*是它的根,x0是其近似根. 11??'(xk) x??(x0)x2??(x1)设1,,因为 x*?x2?[x*?x2]?x2?[?(x*)??(x1)]?x2??'(?)(x*?x1), x2?x1?(x1)??(x0)?x?xx1?x0用差商10近似代替?'(?),有 x*?x2?*x2?x1*(x?x1)x1?x0 , 解出x,得 (x2?x1)2*x?x2?x2?2x1?x0 由此得出公式 (1)xk??(xk) ; (2)(1)xk??(xk); (2)(1)2(xk?xk)(2)xk?1?xk?(2)(1)xk?2xk?xk,k?0,1,2,??

这就是Altken 公式。 3. 牛顿(Newton)法(牛顿切线法) 1) 牛顿法的基本思想: f(x)?0是非线性方程,一般较难解决,多采用线性化方法. f''(?)(x?x0)22! P(x)?f(x0)?f'(x0)(x?x0)记: P(x)是一次多项式,用P(x)?0作为f(x)?0的近似方程. f(x)?f(x0)?f'(x0)(x?x0)?P(x)?f(x0)?f'(x0)(x?x0)?0的解为 x?x0?记为,一般地,记 f(xk)xk?1?xk?f'(xk) k?0,1,2,?? 即为牛顿法公式。 x1f(x0)f'(x0) (f'(x0)?0) 实验所用软件及版本: Matlab R2012b 主要内容(要点): 分别用对分法、普通迭代法、松弛迭代法、Altken 迭代法、牛顿切法线等5种方法,求方程 t?x?sin(x) 的正的近似根,0?t?1.(建议取 t?0.5.) 4

实验过程记录(含基本步骤、主要程序清单及异常情况记录等): 1.对分法 syms x fx; a=0.001;b=3; fx=0.5*x-sin(x); x=(a+b)/2;k=0; ffx=subs(fx,'x',x); if ffx==0; disp(['the root is:',num2str(x)]) else disp('k ak bk f(xk)') while abs(ffx)>0.0001&a

3. 普通迭代法 syms x fx gx; gx=sin(x)/0.5;fx=0.5*x-sin(x); disp('k x f(x)') x=1.1;k=0; ffx=subs(fx,'x',x); while abs(ffx)>0.0001; disp([num2str(k),' ',num2str(x),' ',num2str(ffx)]); x=subs(gx,'x',x);ffx=subs(fx,'x',x);k=k+1; end disp([num2str(k),' ',num2str(x),' ',num2str(ffx)]) fprintf('所求的解是:x=%f,迭代步数是:%d/n',x,k) 【调试结果】 0 1.1 -0.34121 1 1.7824 -0.086485 2 1.9554 0.050739 3 1.8539 -0.033238 4 1.9204 0.020677 5 1.879 -0.013357 6 1.9057 0.0084433 7 1.8889 -0.005416 8 1.8997 0.0034431 9 1.8928 -0.0022017 10 1.8972 0.0014028 11 1.8944 -0.00089584 12 1.8962 0.00057125 13 1.895 -0.00036462 14 1.8958 0.00023259 15 1.8953 -0.00014842 16 1.8956 9.4692e-005 所求的解是:x=1.895610,迭代步数是:16 3.松弛迭代法 syms fx gx x dgx; gx=sin(x)*2;fx=0.5*x-sin(x);dgx=diff(gx,'x'); x=1.8;k=0; ggx=subs(gx,'x',x);ffx=subs(fx,'x',x);dgxx=subs(dgx,'x',x); disp('k x w') while abs(ffx)>0.0001; w=1/(1-dgxx); disp([num2str(k),' ',num2str(x),' ',num2str(w)]) x=(1-w)*x+w*ggx;k=k+1; ggx=subs(gx,'x',x);ffx=subs(fx,'x',x);dgxx=subs(dgx,'x',x); end disp([num2str(k),' ',num2str(x),' ',num2str(w)]) fprintf('所求的解是:x=%f,迭代步数是:%d\\n',x,k) 6 【调试结果】 k x w 0 1.8 0.68757 1 1.9016 0.60624 2 1.8955 0.60624 所求的解是:x=1.895515,迭代步数是:2 4.altken法 syms fx gx x ; gx=sin(x)*2;fx=0.5*x-sin(x); disp('k x x1 x2') x=1.5;k=0; ffx=subs(fx,'x',x); while abs(ffx)>0.0001; u=subs(gx,'x',x);v=subs(gx,'x',u); disp([num2str(k),' ',num2str(x),' ',num2str(u),' ',num2str(v)]) x=v-(v-u)^2/(v-2*u+x);k=k+1;ffx=subs(fx,'x',x); end disp([num2str(k),' ',num2str(x),' ',num2str(u),' ',num2str(v)]) fprintf('所求的解是:x=%f,迭代步数是:%d\\n',x,k) 【调试结果】 k x x1 x2 0 1.5 1.995 1.8227 1 1.8672 1.9128 1.8842 2 1.8952 1.8957 1.8954 3 1.8955 1.8957 1.8954 所求的解是:x=1.895494,迭代步数是:3 5.牛顿法 syms x fx gx; fx=0.5*x-sin(x);gx=diff(fx,'x'); x1=0.8;x2=1.5;x3=4;k=0; disp('k x1 x2 x3') fx1=subs(fx,'x',x1);fx2=subs(fx,'x',x2);fx3=subs(fx,'x',x3); gx1=subs(gx,'x',x1);gx2=subs(gx,'x',x2);gx3=subs(gx,'x',x3); while abs(fx1)>0.0001|abs(fx2)>0.0001|abs(fx3)>0.0001; disp([num2str(k),' ',num2str(x1),' ',num2str(x2),' ',num2str(x3)]) x1=x1-fx1/gx1;x2=x2-fx2/gx2;x3=x3-fx3/gx3;k=k+1; fx1=subs(fx,'x',x1);fx2=subs(fx,'x',x2);fx3=subs(fx,'x',x3); gx1=subs(gx,'x',x1);gx2=subs(gx,'x',x2);gx3=subs(gx,'x',x3); end disp([num2str(k),' ',num2str(x1),' ',num2str(x2),' ',num2str(x3)]) fprintf('所求的解是:x1=%f,x2=%f,x3=%f,迭代步数:%d\\n',x1,x2,x3,k) 7

【调试结果】 k x1 x2 x3 0 0.8 1.5 4 1 -0.81335 2.0766 1.6104 2 0.89679 1.9105 1.97 3 -1.7856 1.8956 1.8984 4 -1.9037 1.8955 1.8955 5 -1.8955 1.8955 1.8955 所求的解是:x1=-1.895533,x2=1.895494,x3=1.895494,迭代步数:5 【情况记录】 1.对分法简单,然而,若在是有几个零点时,只能算出其中一个零点,它不能求重根,在上有零点,也未必有。这就限制了对的实根。对分法的收敛速度较慢,它常用来试也不能求虚根.另一方面,即使分法的使用范围。对分法只能计算方程探实根的分布区间,或求根的近似值. 形式而,这时若初值素,其一,等价形式应满足,由寻找满足定理条件的等价形式是难于做到的。事实上,如果 的连续性,一定存在为的邻域的零点,若能构造等价,其上有迭代也就收敛了。由此构造收敛迭代式有两个要;其二,初值必须取自的充分小邻域,这个邻域大小决定于函数,及做出的等价形式。 松弛法的加速效果明显,甚至不收敛的迭代函数经加速后也能获得收敛. ?'(xk),在使用中有时不方便,而Altken 公式,它的加速效果是十分明显的,松弛法要先计算它同样可使不收敛的迭代格式获得收敛。 5.牛顿法的收敛速度明显快于对分法。牛顿法也有局限性。牛顿法至少是二阶收敛的,而在重根附近,牛顿法是线性收敛的,且重根收敛很慢。另外,在牛顿法中,选取适当迭代初始值是求解的前题,当迭代的初始值在某根的附近时迭代才能收敛到这个根,有时会发生从一个数值很小时。 根附近跳向另一个根附近的情况,尤其在导数 8

实验结果报告及实验总结: 调试结果: 1.对分法 所求的解是:x=1.895327,迭代步数是:13 2.普通迭代法 所求的解是:x=1.895610,迭代步数是:16 3.松弛迭代法 所求的解是:x=1.895515,迭代步数是:2 4.altken法 所求的解是:x=1.895494,迭代步数是:3 5.牛顿法 所求的解是:x1=-1.895533,x2=1.895494,x3=1.895494,迭代步数:5 总结: 在调试和运行的过程中,选取不同的等价方程和不同的初值,得到的结果不同,精确度也有相差异。 但五种方法所得的数值相近,基本在误差允许范围内。且从运行结果知,相对而言,二分法和普通迭代法的收敛速度过慢,不是最佳方法。松弛迭代法和altken法的加速效果是明显的。牛顿法的收敛速度也较快,但需要得出原函数的导函数,在某些情况下是不可行的。故在这五种方法中,相较而言,松弛迭代法和altken法更为可行。 思考与深入: 通过本实验加深了解了求方程实根的近似值的有效方法。学习并掌握了用对分法、迭代法、牛顿切线法求方程近似根的基本过程。并认识到对于不同的题目,需要确定好求根区间[a,b],x或给出某根的近似值0.这对于结果的精度有很大影响。 同时,对于自身,要深刻了解对分法、迭代法、牛顿切线法求方程近似根四种方法的基本思想,熟练掌握编程语句,更快更准确且熟练地设计出程序。 9

教师评语:

10

本文来源:https://www.bwwdw.com/article/4r0r.html

Top