欢迎来到天天文库
浏览记录
ID:47479536
大小:131.50 KB
页数:5页
时间:2020-01-11
《牛顿迭代法实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、用牛顿迭代法求非线性方程的根一、实验题目求方程在附近的根。二、实验引言(1)实验目的1.用牛顿迭代法求解方程的根2.了解迭代法的原理3.改进和修缮迭代法(2)实验意义牛顿迭代法就是众多解非线性方程迭代法中比较普遍的一种,求解方便实用。三、算法设计(1)基本原理给定初始值,为根的容许误差,为的容许误差,N为迭代次数的容许值。1.如果或迭带次数大于N,则算法失败,结束;否则执行2.2.计算.3.若或,则输出,程序结束;否则执行4.4.令,转向1.(2)流程图一、程序设计programnndd01implicitnone
2、real,parameter::e=0.005real,parameter::n=9real::x1real::x0=1.5integer::kreal,external::f,ydok=1,9if(y(x0)==0)thenwrite(*,*)"失败"elsex1=x0-f(x0)/y(x0)if(abs(x1-x0)3、turnendfunctionfunctiony(x)implicitnonereal::yreal::xy=3*x*x-1returnendfunction一、求解结果31.32471841.32471851.32471861.32471871.32471881.32471891.324718二、算法评价及讨论1.在求解在1.5处附近的根,不难发现在输入区间左端值为1时需要迭代6次,而输入区间左端值为1.5时,却只要4次。初值更接近方程根时,迭代次数越少。1.在实验中,都是选取的区间左端值作为初次迭代值,而没有用4、到右端,应该设置左右端值作为迭代初值,比较它们的迭代次数,这样可以得到更少的迭代次数。2.在编写代码过程中,有几点疑惑,左右两端的导数是否会影响迭代次数,也就是选取哪个端点值迭代的问题。3.怎么样求出方程所有的根,在根的附近,得到解后程序就结束运行,如何将方程所有的根找出。4.怎么进一步加速迭代将是牛顿法进一步需要改进的问题。5.迭代过程中,导数值比较小,会导致误差比较大,如何规避。附:二分法程序programerfenfaimplicitnonereal::a=1.0000real::b=1.5000real,p5、arameter::k=0.0050realx,y1,f,y2write(*,*)"a=,b="read(*,*)a,bdowhile(b-a>k)y1=a*a*a-a-1x=(a+b)/2f=x*x*x-x-1y2=fif(y1*y2>0)thena=xelseb=xendifwrite(*,*)x,y2enddostopend一般迭代法程序programmainimplicitnonereal::x0integer::kreal::x1integer,parameter::N=9real,external::f6、k=0x0=1.5dowhile(k<=N)k=k+1write(*,*)k,x0x0=f(x0)enddoendfunctionf(x)real::x,ff=(x+1)**(real(1)/real(3))returnend
3、turnendfunctionfunctiony(x)implicitnonereal::yreal::xy=3*x*x-1returnendfunction一、求解结果31.32471841.32471851.32471861.32471871.32471881.32471891.324718二、算法评价及讨论1.在求解在1.5处附近的根,不难发现在输入区间左端值为1时需要迭代6次,而输入区间左端值为1.5时,却只要4次。初值更接近方程根时,迭代次数越少。1.在实验中,都是选取的区间左端值作为初次迭代值,而没有用
4、到右端,应该设置左右端值作为迭代初值,比较它们的迭代次数,这样可以得到更少的迭代次数。2.在编写代码过程中,有几点疑惑,左右两端的导数是否会影响迭代次数,也就是选取哪个端点值迭代的问题。3.怎么样求出方程所有的根,在根的附近,得到解后程序就结束运行,如何将方程所有的根找出。4.怎么进一步加速迭代将是牛顿法进一步需要改进的问题。5.迭代过程中,导数值比较小,会导致误差比较大,如何规避。附:二分法程序programerfenfaimplicitnonereal::a=1.0000real::b=1.5000real,p
5、arameter::k=0.0050realx,y1,f,y2write(*,*)"a=,b="read(*,*)a,bdowhile(b-a>k)y1=a*a*a-a-1x=(a+b)/2f=x*x*x-x-1y2=fif(y1*y2>0)thena=xelseb=xendifwrite(*,*)x,y2enddostopend一般迭代法程序programmainimplicitnonereal::x0integer::kreal::x1integer,parameter::N=9real,external::f
6、k=0x0=1.5dowhile(k<=N)k=k+1write(*,*)k,x0x0=f(x0)enddoendfunctionf(x)real::x,ff=(x+1)**(real(1)/real(3))returnend
此文档下载收益归作者所有