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

下载本文档

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

文档简介

1、计算方法实验报告(四)方程和方程组的迭代解法一、实验问题利用简单迭代法,两种加速技术,牛顿法,改进牛顿法,弦割法求解习题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

2、-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-fxkf'xk,其中kN,计算得到xk的 序列;Step

3、 3如果xk+1=xk,则迭代终止,否则重复Step 2。(5)改进牛顿法的算法Step 1给定初始近似值x0;Step 2令xk+1=xk-2fxkf'xk+sgnf'xkf'2xk-2f"xkfxk ,其中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)简单迭

4、代法利用迭代公式x=31+x2进行迭代运算。#include <iostream.h>#include <math.h>#include<stdio.h>double 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(D>e)D=0; y=fun(x);if(fabs(y-x)>=D) D=fabs(y-x);x=y;cout<<x<<endl;

5、(2)牛顿法:利用公式xk+1=xk-fxkf'xk 进行迭代运算程序设计如下:#include <iostream.h>#include <math.h>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(D>e)D=0; y=fun(x);if(fabs(y-x)&g

6、t;=D) D=fabs(y-x);x=y;f+;cout<<x<<endl;cout<<"f="<<f<<endl;(3)运用改进牛顿法:迭代公式:xk+1=xk-fxkf'xk -f''(xk)2f'3(xk)f2(xk)程序代码如下:#include <iostream.h>#include <math.h>double fun(double x)double a=2*pow(x,3.0)-pow(x,2.0)+1;double b=3*pow(x,2.

7、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(D>e)D=0; y=fun(x);if(fabs(y-x)>=D) D=fabs(y-x);x=y;f+;cout<<x<<endl;cout<<"f="<<f<<endl;(4

8、)利用弦割法利用公式xk+1=xk-f(xk)(xk-x0)fxk-f(x0)程序代码:#include "stdafx.h"#include <iostream>using namespace std;#include <math.h>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(D>e)

9、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+;cout<<x<<endl;cout<<"f="<<f<<endl;return 0;四、计算结果(1)简单迭代法的运行结果:x=1.46624(2)牛顿迭代法的运行结果如下(3)改进牛顿迭代法运行结果:(4)弦割法的运行结果五、结果分析通过实验很容易发现在相同的准确数字时,加速迭代法的迭代次数明显少于简单的迭代法。但仅仅就实验结果而言,牛顿迭代法和改进的牛顿迭

10、代法与弦割法所得运行结果相同,但是改进的迭代法速度比牛顿迭代法要快速。六、实验的总结与体会迭代法是一种逐次逼近的方法,且都是局部收敛的,具有原理简单,编写程序方便等优点,但还存在是否收敛与收敛速度快慢的问题,不能盲目使用。当迭代过程只有线性收敛速度时,可采用埃特金加速法实现加速。牛顿法是一种特殊的迭代法,用于求方程单根时具有二阶收敛速度。但牛顿法对初值的要求苛刻,而且需要求函数的导数,遇到求导数复杂的情形,常用弦割法求解。弦割法是对牛顿法的变形,不需要求函数的导数,但收敛阶不高,而且需要提供两个较好的初值。一、实验问题利用雅可比迭代法,赛德尔迭代法求解如下方程组-8x1+x2+x3=1x1-5

11、x2+x3=16x1+x2-4x3=7一、 问题的分析(描述算法的步骤等)雅克比迭代法算法如下:(1) 对i=1n 令xi0(2) 令D0(3) 对i=1n做令yi=bi对j=1n但ji令yiyi-aijxj令yiyi/aij若xi-xj>D则令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-xj>D则令Dxi-xj令xiy(4)若D则转到(2)(5)输出xii=1n并停止计算

12、二、 程序设计(1)运用雅可比迭代法进行迭代:代码如下:#include <iostream.h>#include <math.h>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(D>e)D=0;for(int c=0;c<5;c+) for(int i=0;i<3;i+) yi=bi;for(int j=0;j<3;j+)if(j!=i)yi=

13、yi-aij*xj; yi=yi/aii;if(fabs(xi-yi)>=D)D=fabs(xi-yi); for(int l=0;l<3;l+) xl=yl; f+;for(int k=0;k<3;k+)cout<<xk<<endl;cout<<f<<endl;(2)赛德尔迭代法源代码如下:2运用赛德尔迭代法进行迭代程序代码:#include <iostream.h>#include <math.h>#include<stdio.h>void main()double x3=0,0,0;do

14、uble 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(D>e)D=0;for(int c=0;c<5;c+) for(int i=0;i<3;i+) y=bi;for(int j=0;j<3;j+)if(j!=i)y=y-aij*xj; y=y/aii;if(fabs(xi-y)>=D)D=fabs(xi-y); for(int l=0;l<3;l+) xl=yl; f+;for(int k=0;k<3;k+)cout<<xk<<endl;cout<<f<<endl;三、 计算结果(1)雅克比迭代法运行结果如下:(2)赛德尔迭代法运行结果如下:五、结果分析通过观察运行结果很容

温馨提示

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

评论

0/150

提交评论