合工大计算法实验报告.docVIP

  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文档。上传文档
查看更多
《计算方法》 试验报告 班级: 学号: 姓名: 实验一、牛顿下山法 1 实验目的 熟悉非线性方程求根简单迭代法,牛顿迭代及牛顿下山法 能编程实现简单迭代法,牛顿迭代及牛顿下山法 认识选择迭代格式的重要性 对迭代速度建立感性的认识;分析实验结果体会初值对迭代的影响 2 实验内容 (1)用牛顿下山法解方程(初值为0.6) 输入:初值,误差限,迭代最大次数,下山最大次数 输出:近似根各步下山因子 (2)设方程f(x)=x- 3x –1=0 有三个实根 x=1.8793 , x=-0.34727 ,x=-1.53209现采用下面六种不同计算格式,求 f(x)=0的根 x 或x x = ; x = ;x = ; x = ;x = ;x = x - 输入:初值,误差限,迭代最大次数 输出:近似根、实际迭代次数 3 算法基本原理 求非线性方程组的解是科学计算常遇到的问题,有很多实际背景.各种算法层出不穷,其中迭代是主流算法。只有建立有效的迭代格式,迭代数列才可以收敛于所求的根。因此设计算法之前,对于一般迭代进行收敛性的判断是至关重要的。牛顿法也叫切线法,是迭代算法中典型方法,只要初值选取适当,在单根附近,牛顿法收敛速度很快,初值对于牛顿迭代 至关重要。当初值选取不当可以采用牛顿下山算法进行纠正。 一般迭代: 牛顿公式: 牛顿下山公式: 下山因子 下山条件 4 算法描述 一般迭代算法见流程图 牛顿下山算法见流程图: 5、代码: #include iostream #include fstream #include cmath using namespace std; class srrt { private: int n; double *a, *xr, *xi; public: srrt (int nn) { n = nn; a = new double[n+1]; //动态分配内存 xr = new double[n]; xi = new double[n]; } void input (); //由文件读入代数方程系数 void srrt_root (); //执行牛顿下山法 void output (); //输出根到文件并显示 ~srrt () { delete [] a, xr, xi; } }; void srrt::input () //由文件读入代数方程系数 { int i; char str1[20]; cout \n输入文件名: ; cin str1; ifstream fin (str1); if (!fin) { cout \n不能打开这个文件 str1 endl; exit(1); } for (i=n; i=0; i--) fin a[i]; //读入代数方程系数 fin.close (); } void srrt::srrt_root () //执行牛顿下山法 { int m,i,jt,k,is,it; double t,x,y,x1,y1,dx,dy,p,q,w,dd,dc,c; double g,u,v,pq,g1,u1,v1; m=n; while ((m0)(fabs(a[m])+1.0==1.0)) m=m-1; if (m=0) { cout \n程序工作失败! endl; return; } for (i=0; i=m; i++) a[i]=a[i]/a[m]; for (i=0; i=m/2; i++) { w=a[i]; a[i]=a[m-i]; a[m-i]=w; } k=m; is=0; w=1.0; jt=1; while (jt==1) { pq=fabs(a[k]); while (pq1.0e-12) { xr[k-1]=0.0; xi[k-1]=0.0; k=k-1;

文档评论(0)

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

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

1亿VIP精品文档

相关文档