上机报告-二分法,史蒂芬森迭代,割线法22.docVIP

上机报告-二分法,史蒂芬森迭代,割线法22.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
上机报告-二分法,史蒂芬森迭代,割线法22

计算方法上机实习报告 [题目及目的要求] 用二分法求方程在[0,5]上根的近似值。用牛顿迭代法求在附近的实根。 完成史蒂芬森迭代加速法和割线法的子程序,并利用方程对比对分法与一般迭代法。 [方法原理说明] 二分法和牛顿迭代法: 二分法是逐次把有根区间分半,舍弃无根区间而保留有根区间的一种逼近根的方法。在这个过程中有根区间的长度以2的幂次方减少,当有根区间的长度小于给定的精度时,其中点就作为根的近似值。 牛顿迭代法的迭代格式为: 初值 (k=0,1,2....) 显然,牛顿迭代格式能够迭代下去必须要求的导数不能为0.当某个或很小时,迭代中断;当满足一定条件时,牛顿迭代具有平方收敛速度。该方法对初值要求较高,若选取不当,则可能发散,若选取的好,则收敛很快。 史蒂芬森迭代加速法和割线法 迭代法就是通过一个迭代格式进行反复迭代以产生一个序列。若这个序列收敛于方程的根,就称这个迭代格式收敛。史蒂芬森迭代加速法的迭代格式为 , (k=0,1,2....) 割线法与牛顿迭代法一样,即在根的某个邻域内,有直至二阶的连续导数,且,则在邻域内选取初值,迭代均收敛。割线法的迭代格式为 初值 (k=2,3....) [计算步骤] 1.二分法: 1)给定a,b及精度要求ep; 2)计算x=(a+b)/2 及; 3)若b-aep,则返回主程序,x作为近似根,否则转4; 4)若,则,否则; 5)转2。 牛顿迭代法: 1)输入初始值,精度要求ep,允许最大迭代次数; 2)k=1,G=; 3)若ep,则停止计算,迭代中断,否则计算 4)若,则为近似解,返回主程序。否则计算 5)若,则停止计算,迭代发散,否则转3。 2.割线法: 1)输入初始值,精度要求ep,允许的最大迭代次数; 2)k=1,G=; 3)若ep,则停止计算,迭代中断,否则计算 4)若,则为近似解,返回主程序。否则计算 5)若,则停止计算,迭代发散,否则转3。 史蒂芬森加速迭代法: 1)输入初始值,精度要求ep,允许的最大迭代次数; 2)计算; 3)若ep,则停止计算,迭代中断,否则计算 4)若,则近似解,返回主程序。否则计算 5)若,则停止计算,迭代发散,否则转3。 [程序清单及运行结果] 二分法和牛顿迭代法: 1)二分法: #includestdio.h double f(double x) { double f1; f1=x*x*x-6*x-1; return(f1); } double df(double a,double b,double x,double ep) { double c; c=b-a; while(c=ep) { x=(a+b)/2; if(f(a)*f(x)0) a=x; else b=x; c=b-a; } x=(a+b)/2; return(x); } main() { double a,b,x,ep; a=0.0; b=5.0; ep=0.000001; x=0.0; x=df(a,b,x,ep); printf(the root of f(x) is %f\n,x); } 执行结果: 牛顿迭代法: #includestdio.h double f(double x) { double al; al=x*x*x-3*x-1; return(al); } double fl(double x) { double bl; bl=3*x*x-3; return(bl); } double nt(double x,double ep,int flag,int nmax) { int k; double x0,g; flag=1; k=1; while((fabs(x-x0)ep)(knmax)) { x0=x; g=fl(x0); if(fabs(g)ep) { flag=0; break; } x=x0-f(x0)/g;

文档评论(0)

mliaojfangwi + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档