计算方法实验报告.docx_第1页
计算方法实验报告.docx_第2页
计算方法实验报告.docx_第3页
计算方法实验报告.docx_第4页
计算方法实验报告.docx_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算方法实验报告(四)方程和方程组的迭代解法一、实验问题利用简单迭代法,两种加速技术,牛顿法,改进牛顿法,弦割法求解习题5-1,5-2,5-3中的一题,并尽可能准确。选取5-3:求x3-x2-1=0在x=1.5附近的根。二、问题的分析(描述算法的步骤等)(1)简单迭代法算法:给定初始近似值p0,求p=p的解。Step 1 令i=0;Step 2 令pi+1=pi(计算pi+1);Step 3 如果pi+1=pi,则迭代终止,否则重复Step 2。(2)Aitken加速法算法Step 1 令k=0,利用简单迭代算法xk+1=xk得到迭代序列xk;Step 2 令xk*=xk-xk-xk-12xk-2xk-1+xk-2(计算xk*得到一个新的序列xk*,其中k=0,1,2);Step 3 如果xk+1*=xk*,则迭代终止,否则重复Step 2。(3)插值加速法算法Step 1 令k=0,利用简单迭代算法xk+1=xk得到迭代序列xk;Step 2 令xk*=xk+xk-xk-1xk-xk+1xk-1-2xk+xk+1(计算xk*得到一个新的序列xk*,其中k=1,2,3);Step 3 如果xk+1*=xk*,则迭代终止,否则重复Step 2。(4)牛顿法算法Step 1给定初始近似值x0;Step 2令xk+1=xk-fxkfxk,其中kN,计算得到xk的 序列;Step 3如果xk+1=xk,则迭代终止,否则重复Step 2。(5)改进牛顿法的算法Step 1给定初始近似值x0;Step 2令xk+1=xk-2fxkfxk+sgnfxkf2xk-2fxkfxk ,其中kN,迭代计算得到xk的 序列;Step 3如果xk+1=xk,则迭代终止,否则重复Step 2。(6)弦割法算法(双点弦割法)Step 1给定初始近似值x0,x1;Step 2令xk+1=xk-fxkxk-xk-1fxk-fxk-1其中kN,计算得到xk的 序列;Step 3如果xk+1=xk,则迭代终止,否则重复Step 2。三、程序设计(1)简单迭代法利用迭代公式x=31+x2进行迭代运算。#include #include #includedouble fun(double x)double c=1+x*x;return pow(c,1/3.0);void main()double x=1.5;double y=0;double D=1;double e=0.001;while(De)D=0; y=fun(x);if(fabs(y-x)=D) D=fabs(y-x);x=y;coutxendl;(2)牛顿法:利用公式xk+1=xk-fxkfxk 进行迭代运算程序设计如下:#include #include double fun(double x)double a=2*pow(x,3.0)-pow(x,2.0)+1;double b=3*pow(x,2.0)-2*x;return a/b;void main() double x=1.5;double y=0;double D=1;double e=0.001;double f=0;while(De)D=0; y=fun(x);if(fabs(y-x)=D) D=fabs(y-x);x=y;f+;coutxendl;coutf=fendl;(3)运用改进牛顿法:迭代公式:xk+1=xk-fxkfxk -f(xk)2f3(xk)f2(xk)程序代码如下:#include #include double fun(double x)double a=2*pow(x,3.0)-pow(x,2.0)+1;double b=3*pow(x,2.0)-2*x;double c=pow(pow(x,3.0)-pow(x,2.0)-1),2.0);double d=(6*x-2)/12;return a/b-c*d;void main() double x=1.5;double y=0;double D=1;double e=0.001;double f=0;while(De)D=0; y=fun(x);if(fabs(y-x)=D) D=fabs(y-x);x=y;f+;coutxendl;coutf=fendl;(4)利用弦割法利用公式xk+1=xk-f(xk)(xk-x0)fxk-f(x0)程序代码:#include stdafx.h#include using namespace std;#include double fua(double l)return pow(l,3.0)-pow(l,2.0)-1;int _tmain(int argc, _TCHAR* argv)double x=1.4;double y=0;double D=1;double e=0.001;double f=0;while(De)D=0; y=x-fua(x)*(x-1.5)/(fua(x)-0.125);if(fabs(y-x)=D) D=fabs(y-x);x=y;f+;coutxendl;coutf=fD则令D|xi-xj|(4) 对i=1n令xiyi(5) 若D则转到(2)(6) 输出xii=1n并停止计算赛德尔迭代法算法如下 (1)对i=1n 令xi0(2)令D0(3)对i=1n做令yi=bi对j=1n但ji令yiyi-aijxj令yiyi/aij若xi-xjD则令Dxi-xj令xiy(4)若D则转到(2)(5)输出xii=1n并停止计算二、 程序设计(1)运用雅可比迭代法进行迭代:代码如下:#include #include void main()double x3=0,0,0;double a33=-8,1,1,1,-5,1,1,1,-4;double b3=1,16,7;double y3; double e=0.04;double D=1;int f=0;while(De)D=0;for(int c=0;c5;c+) for(int i=0;i3;i+) yi=bi;for(int j=0;j=D)D=fabs(xi-yi); for(int l=0;l3;l+) xl=yl; f+;for(int k=0;k3;k+)coutxkendl;coutfendl;(2)赛德尔迭代法源代码如下:2运用赛德尔迭代法进行迭代程序代码:#include #include #includevoid main()double x3=0,0,0;double a33=-8,1,1,1,-5,1,1,1,-4;double b3=1,16,7;double y; double e=0.0001;double D=1;double f=0;while(De)D=0;for(int c=0;c5;c+) for(int i=0;i3;i+) y=bi;for(int j=0;j=D)D=fabs(xi-y); for(int l=0;l3;l+) xl=yl; f+;for(int k=0;k3;k+)coutxkendl;coutfendl;三、 计算结果(1)雅克比迭代法运行结果如下:(2)赛德尔迭代法运行结果如下:五、结果分析通过观察运行结果很容易发现使用赛德尔迭代法求解此线性方程组具有明显的优势,它的迭代次数明显少于雅克比迭代法,因此收敛速

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论