




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
[8],一般而言,牛顿迭代法的收敛性依赖于初值x0的选取,如果x0的选取偏离精确解,则牛顿迭代法可能会发散。为了防止发散,常常对迭代过程额外加上一项要求,用来保证函数数值的单调下降:f满足这项要求的算法被称作下山法。牛顿下山法的迭代公式如下:xk+1=xk将λ称为下山因子,且0<λ≤1。λ值的选取满足λ=1有关牛顿下山法的基本算法实现流程:首先给定x的初值x0,精度要求ε,最大迭代次数N与下山因子λ=1,设一个迭代次数初值;然后用牛顿迭代公式x1=x0-fx0f'x0,得到x12.5不动点迭代法假设存在n个未知数与n个方程的某个非线性方程组化简后为Fx=0,再将方程组更改为方便迭代的一种等价形式x=φx,有φ:D⊂Rn→Rn。若x*∈D满足x*=φx*,则称x*为函数φx的不动点。所以,φx的不动点就是非线性方程组再选取合适的初始向量x0∈D,将之构成迭代公式xk+1=φxk,k=0,1不动点迭代法的基础定理采用的是压缩映射原理,假设φ:D⊂Rn→φ把D0映入它自身,即φφ在D0上是压缩映射,即存在常数L∈0,φ所以可得出以下的相关结论:对任意取得的x0∈D0,通过迭代公式xk+1=φxk,创建误差估计式x*-xkx*-xk关于不动点迭代法的局部收敛定理,设φ:D⊂Rn→Rn,x*∈intD是方程组Fx=0的解,在x*可微。若φ'x对于不动点迭代法xk+1=φxk+1-x*xk+1-xk由于φ'x≤Lx=L≤Lxx≤⋯⋯≤由于L<1,limk→∞xk-x*=0xk-x*不动点迭代法需要注意等价形式的选择,如果选择不当,迭代结果会越来越大,不能趋近于某个极限,这样一个发散的迭代过程是没有价值的。不动点迭代法原理见图3所示:图3不动点迭代法简略理解图有关不动点迭代法的基本算法实现流程:首先将方程fx等价的转化称方程x=φx,由此建立不动点迭代公式x1=φx0,将给定的初值x0代入其中得到x3.几种常用的求解非线性方程组的迭代方法数值实例3.1牛顿迭代法对于牛顿迭代法解非线性方程组的数值应用实例,列举了如下一个二元二阶非线性方程组:2求解这个非线性方程组,给定它的初值x0=-1,y0=1,设定它的误差精度为10-10,用C语言编程模拟它的迭代过程,最终给出该非线性方程组的近似解。误差精度值不变,更改所给定的初值,使之更贴近方程组的解,设x0=0,y0=1。改变后的编译的结果显示,它经历了若不更改初值,将它的误差精度值改为10-5,改变后的编译的结果显示,它经历了15次迭代,历时不到一毫秒得到方程组的解为:x=-0.26528046490022428,y=0.802002181053570573.2简化牛顿法用简化牛顿迭代法计算非线性方程组,用C语言编程模拟它的迭代过程,最终给出该非线性方程组的近似解。编译的结果显示,它经历了54次迭代,历时10毫秒得到方程组的解为:x=-0.26527251509605621,y=0.80200384302780292。同样保持误差精度值不变,更改所给定的初值,使之更贴近方程组的解,设x0=0,y0=1。改变后的编译的结果显示,它经历了同样若不更改初值,将它的误差精度值改为10-5,改变后的编译的结果显示,它经历了24次迭代,历时不到一毫秒得到方程组的解为:x=-0.26528979753965148,3.3牛顿弦截法用牛顿弦截法计算非线性方程组,用C语言编程模拟它的迭代过程,最终给出该非线性方程组的近似解。编译的结果显示,它经历了72次迭代,历时14毫秒得到方程组的解为:x=-0.26527251508431543,y同样保持误差精度值不变,更改所给定的初值,使之更贴近方程组的解,设x0=0,y0=1。改变后的编译的结果显示,它经历了同样若不更改初值,将它的误差精度值改为10-5,改变后的编译的结果显示,它经历了36次迭代,历时3毫秒得到方程组的解为:x=-0.26538823618029506,3.4不动点迭代法对于不动点迭代法解非线性方程组的数值应用实例,列举了如下一个三角函数非线性方程组:3x求解这个非线性方程组,给定它的初值x0=1,y0=1,设定它的误差精度为10-12,用C语言编程模拟它的迭代过程,最终给出该非线性方程组的近似解。编译的结果显示,它经历了27对这个三角函数非线性方程组,用牛顿迭代法对它也进行编译,使之与不动点迭代法所产生的结果进行对比,C语言牛顿迭代法编译的结果显示,它经历了58次迭代,历时9毫秒得到方程组的解为:x=0.41516942713962368,y保持精度不变,改变初值大小,将初值设为x0=0,y0=0,改变后的编译的结果显示,它经历了继续保持精度不变,改变初值为x0=100,y0=100,改变后的编译的结果显示,它经历了26次迭代,历时保持初值不变,将精度改为10-5,改变后的编译的结果显示,它经历了11次迭代,历时不到一毫秒得到方程组的解为:x=0.41516897278745452,保持初值不变,将精度改为10-20,改变后的编译的结果显示,它经历了37次迭代,历时4毫秒得到方程组的解为:x=0.41516942713927385,3.5结果对比分析关于二元二阶非线性方程组2x表1三种迭代方法结果对比表近似解x近似解y迭代次数牛顿迭代法-0.265272514922748950.8020038430510502131简化牛顿迭代法-0.265272515096056210.8020038430278029254牛顿弦截法-0.265272515084315430.8020038431811372772保持精度不变,改变初值后三种迭代方法对比表如下所示:表2改变初值后三种迭代方法结果对比表近似解x近似解y迭代次数牛顿迭代法-0.265272514943998010.802003843046608126简化牛顿迭代法-0.265272514897307960.8020038430782816523牛顿弦截法-0.265272515021787170.8020038431599900722保持初值不变,改变精度后三种迭代方法对比表如下所示:表3改变精度后三种迭代方法结果对比表近似解x近似解y迭代次数牛顿迭代法-0.265280464900224280.8020021810535705715简化牛顿迭代法-0.265289797539651480.8020012656908955824牛顿弦截法-0.265388236180295060.801990258664471636关于三角函数非线性方程组3x-表4关于三角函数非线性方程组相关结果对比表近似解x近似解y迭代次数不动点迭代法0.415169427139194750.336791217025349227牛顿迭代法0.415169427139623680.3367912170250437258不动点迭代法初值更改接近解0.415169427139335080.3367912170252405626不动点迭代法初值更改远离解0.415169427139161220.3367912170253751226不动点迭代法误差精度调大0.415168972787454520.3367915689078352411不动点迭代法误差精度调小0.415169427139273850.3367912170252879737关于二元二阶非线性方程组2x2-x牛顿迭代法的迭代次数最少,牛顿弦截法的迭代次数最多。但当保持误差精度不变,改变它的初值,使之更加接近方程组的近似解时,牛顿弦截法的迭代次数最少,牛顿迭代法的迭代次数最多,而且三种迭代算法的迭代次数都有明显减少。当保持初值不变,调大对它的误差精度要求,三种迭代算法的迭代次数也有明显减少。关于三角函数非线性方程组3x-cosx将不动点迭代法与牛顿迭代法结果进行比较,不动点迭代法的迭代次数远小于牛顿迭代法的迭代次数。保持不动点迭代法的误差精度不变,改变其初值,发现无论怎样改变初值大小,不动点迭代法的迭代次数基本维持不变。保持不动点迭代法的初值不变,将误差精度调大,迭代次数减少,将误差精度调小,迭代次数变大。通过以上的这些比较发现初值与精度的选取对求解非线性方程组有很大的影响,没一点的小改动都可能使你的结果相差甚远。降低对其精度的要求都能使得迭代次数的减少,提高精度要求也使得迭代次数的增加。当你的初值选取越靠近精确解时,你所需的迭代次数也在减少,但初值的选取对不动点迭代法迭代次数的增减没有明显的改变。本次论文主要分成了两个非线性方程组进行迭代算法的研究和比较。第一组实验(见表1,2,3)比较了牛顿迭代法和它的两个改进后的迭代方法,首先假定一个初值进行带入编程计算,将所得结果比较后,得到结论第一次比较牛顿迭代法的迭代次数最少,计算效率最高,牛顿弦截法的迭代次数最多,计算效率最差。本次实验不动点迭代法的迭代效率比牛顿迭代法的迭代效率更高,但是当将它的初值结果改成最接近精确解后再计算结果,结果发生巨大转变,牛顿弦截法迭代次数最少,计算效率最高,牛顿迭代法所用迭代次数最多,计算效率最差。之后又进行了精度改变的实验,当误差精度的要求放低后,实验的三个迭代算法所用迭代次数都普遍减少了,但依旧牛顿迭代法计算效率最高,简化牛顿迭代法次之,牛顿弦截法最低。第二组实验(见表4)先比较了牛顿迭代法和不动点迭代法的差别,然后对不动点迭代法自身变量的改变进行了比较。在第一次比较中,不动点迭代法的迭代次数远小于牛顿迭代法的跌打次数,效率更高。在初值与误差精度的调整实验中,我发现在同一精度条件下,无论初值调整为多少时,它的非线性方程组的解都没有太大差别。但是,当误差精度调大时,所用迭代次数变少,提高了计算效率,当误差精度调小时,所用迭代次数变多,计算效率也下降了。4.总结与思考4.1内容总结本文主要介绍的是求解非线性方程组的几种迭代方法的理论及数值应用案例。求解非线性方程组的迭代方法,它的基本思想就是通过一次又一次的求解,不断逼近精确解。迭代方法例如牛顿迭代法,简化牛顿迭代法,牛顿弦截法,牛顿下山法和另一种不动点迭代法。本文简单介绍了它们的算法流程并选取了其中几个算法进行C语言编程求解,再对它们的结果进行比较分析。如今,社会在不断进步,科技在不断发展,很多领域都需要求解非线性方程组,其中牛顿迭代法是最常用的求解方式,根据不同的情况,对牛顿迭代法进行修饰,改进。由上文的一些数值实例可以看出这些迭代法的一些优势与缺点。在同一初值,同一误差精度的条件下,若是初值非常接近精确解,牛顿弦截法的迭代次数最少,计算效率最高,简化牛顿法情况次之,牛顿迭代法计算效率最低。若是初值远离精确解,情况就会倒过来,牛顿弦截法的计算效率最低,牛顿迭代法的计算效率最高。不动点迭代法与牛顿迭代法的比较过程中,不动点迭代法的迭代效率要高于牛顿迭代法。在同一精度下,初值的改变不会影响不动点迭代法的计算结果,然而在同一初值下,误差精度要求变低时,所用的迭代次数也会减少,相反就会增多。4.2思考除却一些常用的求解非线性方程组的迭代方法,还有对迭代法加速,多步迭代法等。在日常生活中,不只有普通的非线性方程组,还有其他的特殊的非线性方程组,如非线性代数方程组,非线性复数方程组等。对这些求解问题的研究,无论是在理论还是在实际应用中都是十分重要的。当在生活中遇到这种数值问题时,首先要选取适当的求解方式,然后再不断地运算验证它的可行性,必要时还需要改变它的参数来比较结果。每一个问题的解决都需要经过成千上万次的计算。本次论文的编写,让我更加深入的了解了数学的世界,懂得了计算机与数学相辅相成的关系。同一个非线性方程组,所使用的求解方式不同,所设定的变量不同,得到的结果也是天差地别,使用C语言来编程,能很方便调试每个不一样之处。现如今,科技在飞速发展,人们对数学的研究也越来越深,世界因为数学而精彩。参考文献李庆扬,莫孜中,祁力群等著.非线性方程组的数值解法[M].北京:科学出版社,1987.J.M.奥加特,W.C.莱因博尔特著.多元非线性方程组迭代解法[M].北京:科学出版社,1983.冯果忱.非线性方程组迭代解法[M].上海:上海科学技术出版社,1989.黄象鼎,曾钟刚,马亚南.非线性数值分析的理论与方法[M].武汉:武汉大学出版社,2004.代璐璐,檀结庆.两种解非线性方程组的四阶迭代方法[J].数值计算与计算机应用,2012.陈小惠,唐烁.解非线性方程的一类多参数迭代格式[J].合肥工业大学学报:自然科学版,2011.刘惠牲,张立杰.关于非线性方程组一种Newton型解法的一个注记[J].新疆工学院学报,1998.吴淦洲.求解非线性方程组的改进牛顿法[J].茂名学院学报,2009.赵建兴,李耀堂.解非线性方程组的Newton-Simpson方法的收敛性定理的修正[J].昆明学院学报,2009.致谢因为疫情原因,大学四年的最后一学期没能在学校度过就要画上一个句号了,我即将正式毕业,告别我的学校生活,踏入社会。回首这几个月写论文的过程,在这里,我要感谢那些对我学习和生活上进行巨大帮助的人。首先,我要感谢我的指导老师蒋涛蒋老师,蒋老师在一开始分组的时候就依次耐心地讲解每个人毕业论文题目的一些注意点和要求,并在这几个月论文编写的过程中能能不辞辛劳地及时解答我们的困惑与难题。当我在编写材料懈怠懒惰时,也是蒋老师指正批评我,让我能及时地改正悔悟。在这里我要对老师说一声抱歉和感谢。最后,我要感谢我的家人和朋友,是他们给予了我许多精神和物质上的支持,促使我能更好的完成我的论文,面对我的一些烦人的要求,能心平气和地对我提供帮助。感谢你们的帮助,我会一直记得你们的支持,理解与帮助,再次感谢你们所有人。附录牛顿迭代法代码:#include<stdio.h>#include<math.h>#include<time.h>#definetol-10//精度/*方程组及一阶导数*/doublefunc1(doublex,doubley){ return2*x*x-x-3*y+2;}doublefunc2(doublex,doubley){ returnx*x+3*y*y-2;}doublefunc11(doublex,doubley){ return4*x-4;}doublefunc21(doublex,doubley){ return2*x+6*y;}intmain(void){ intbegintime,endtime;//定义开始,结束时间 unsignedintc_times=0;//定义迭代次数初值 doubler_x,r_y,p_x,p_y;//定义变量 doublen_tol=1; p_x=-1;//给定方程组初值 p_y=1; n_tol=pow((double)10,tol);//误差界限 printf("%s\t%s\t%s\n","迭代次数","X","Y");//输出列号 /*牛顿迭代法*/ begintime=clock();//开始计时 for(c_times=1;c_times<1000;c_times++){//进行for循环,每执行一次以下程序迭代次数加一 r_x=p_x-func1(p_x,p_y)/func11(p_x,p_y);//牛顿迭代法迭代公式 r_y=p_y-func2(p_x,p_y)/func21(p_x,p_y); printf("%d\t%-.20lg\t%-.20lg\n",c_times,r_x,r_y);//输出每次迭代后的x,y值和迭代次数 if(((p_x-r_x)>0?p_x-r_x:r_x-p_x)<n_tol)//与误差精度比较,若小于则退出循环 break; p_x=r_x;//将新的x值赋予旧的x值,进行数值替换 p_y=r_y;//将新的y值赋予旧的y值,进行数值替换 } printf("迭代次数:%d\n",c_times-1);//输出该算法所需的迭代次数 printf("方程组的解:\n");//输出“方程组的解:” printf("%.20lg\t%.20lg\n",r_x,r_y);//输出x,y具体数值 endtime=clock();//结束计时printf("\n\nRunningTime:%dms\n",endtime-begintime);//输出程序运行时间 getchar();//让程序暂停 return0;}简化牛顿迭代法代码:#include<stdio.h>#include<math.h>#include<time.h>#definetol-10//精度/*方程组及一阶导数*/doublefunc1(doublex,doubley){ return2*x*x-x-3*y+2;}doublefunc2(doublex,doubley){ returnx*x+3*y*y-2;}doublefunc11(doublex,doubley){ return4*x-4;}doublefunc21(doublex,doubley){ return2*x+6*y;}intmain(void){ intbegintime,endtime;//定义开始,结束时间 unsignedintc_times=0;//定义迭代次数初值 doubler_x,r_y,p_x,p_y;//定义变量 doublen_tol=1; p_x=-1;//给定方程组初值 p_y=1; n_tol=pow((double)10,tol);//误差界限 printf("%s\t%s\t%s\n","迭代次数","X","Y");//输出列号 /*简化牛顿迭代法*/ begintime=clock();//开始计时 for(c_times=1;c_times<1000;c_times++){//进行for循环,每执行一次迭代次数加一 r_x=p_x-func1(p_x,p_y)/func11(-1,1);//简化牛顿迭代法迭代公式保持导数初值不变 r_y=p_y-func2(p_x,p_y)/func21(-1,1); printf("%d\t%-.20lg\t%-.20lg\n",c_times,r_x,r_y);//输出每次迭代后的x,y值和迭代次数 if(((p_x-r_x)>0?p_x-r_x:r_x-p_x)<n_tol)//与误差精度比较,若小于则退出循环 break; p_x=r_x;//将新的x值赋予旧的x值,进行数值替换 p_y=r_y;//将新的y值赋予旧的y值,进行数值替换 } printf("迭代次数:%d\n",c_times-1);//输出该算法所需的迭代次数 printf("方程组的解:\n");//输出“方程组的解:” printf("%.20lg\t%.20lg\n",r_x,r_y);//输出x,y具体数值 endtime=clock();//结束计时printf("\n\nRunningTime:%dms\n",endtime-begintime);//输出程序运行时间 getchar();//让程序暂停 return0;} 牛顿弦截法代码:#include<stdio.h>#include<math.h>#include<time.h>#definetol-10//精度/*方程组及一阶导数*/doublefunc1(doublex,doubley){ return2*x*x-x-3*y+2;}doublefunc2(doublex,doubley){ returnx*x+3*y*y-2;}doublefunc11(doublex,doubley){ return4*x-4;}doublefunc21(doublex,doubley){ return2*x+6*y;}intmain(void){intbegintime,endtime;//定义开始,结束时间 unsignedintc_times=0;//定义迭代次数初值 doubler_x,r_y,p_x,p_y,a_x,a_y;//定义变量 doublen_tol=1; p_x=-1;//给定方程组初值 p_y=1; n_tol=pow((double)10,tol);//误差界限 printf("%s\t%s\t%s\n","迭代次数","X","Y");//输出列号/*牛顿弦截法*/ begintime=clock();//开始计时 r_x=p_x-func1(p_x,p_y)/func11(p_x,p_y);//牛顿迭代法迭代公式进行一次迭代r_y=p_y-func2(p_x,p_y)/func21(p_x,p_y); c_times++;//迭代次数加一 printf("%d\t%-.20lg\t%-.20lg\n",c_times,r_x,r_y);//输出迭代后的x,y值和迭代次数 for(c_times=2;c_times<1000;c_times++){//进行for循环,每执行一次以下程序迭代次数加一 a_x=r_x-(func1(r_x,r_y))*(r_x-p_x)/(func1(r_x,r_y)-func1(p_x,p_y));//牛顿弦截法迭代公式 a_y=r_y-(func2(r_x,r_y))*(r_y-p_y)/(func2(r_x,r_y)-func2(p_x,p_y)); printf("%d\t%-.20lg\t%-.20lg\n",c_times,r_x,r_y);//输出每次迭代后的x,y值和迭代次数 if(((a_x-r_x)>0?a_x-r_x:r_x-a_x)<n_tol)//与误差精度比较,若小于则退出循环 break; p_x=r_x;//进行数值替换 p_y=r_y; r_x=a_x; r_y=a_y; } printf("迭代次数:%d\n",c_times-1);//输出该算法所需的迭代次数 printf("方程组的解:\n");//输出“方程组的解:” printf("%.20lg\t%.20lg\n",r_x,r_y);//输出x,y具体数值 endtime=clock();//结束计时printf("\n\nRunningTime:%dms\n",endtime-begintime);//输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厨师服务合同模板大全
- 2023-2024学年浙江摄影版(三起)(2020)小学信息技术五年级下册变量计数(教学设计)
- 1 自主选择课余生活 教学设计-2024-2025学年道德与法治五年级上册统编版
- 3人体与运动C 教学设计-八年级体育与健康
- 四年级第一学期语文教学计划
- 3公民意味着什么( 教学设计 )2023-2024学年统编版道德与法治六年级上册
- 7 生命最宝贵 第一课时 教学设计-2023-2024学年道德与法治三年级上册统编版
- 2023-2024学年粤教版(2019)高中信息技术必修一《数据与计算》第三章第一节《 体验计算机解决问题的过程》教学设计
- 19《海滨小城》(教学设计)2024-2025学年部编版语文三年级上册
- 小区临时停车合同范本
- 易制毒化学品识别与检验学习通超星期末考试答案章节答案2024年
- 红茶市场洞察报告
- Unit 4 Time to celebrate 教学设计-2024-2025学年外研版英语七年级上册
- 健康档案模板
- DB32-T 4790-2024建筑施工特种作业人员安全操作技能考核标准
- 2022年安徽阜阳太和县人民医院本科及以上学历招聘笔试历年典型考题及考点剖析附带答案详解
- 护理团体标准解读-成人氧气吸入疗法护理
- 安全警示教育的会议记录内容
- 夫妻异地辞职信
- 2024年度-银行不良清收技巧培训课件(学员版)
- 《书籍装帧设计》 课件 项目3 书籍装帧整体设计
评论
0/150
提交评论