计算方法实验报告

  • 格式:doc
  • 大小:381.50 KB
  • 文档页数:23

下载文档原格式

  / 23
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

实验一牛顿下山法求解非线性方程的根 (3)

一、实验目的 (3)

二、实验内容 (3)

三、基本原理 (3)

四、算法设计与实现 (3)

五、输入与输出 (4)

六、源代码 (4)

实验二高斯——赛德尔法求线性方程组 (6)

一、实验目的 (6)

二、实验内容 (6)

三、算法基本原理 (6)

四、算法设计与实现 (6)

五、计算用例的参考输出 (8)

六、源代码 (8)

实验三高斯消去法 (10)

一、实验目的 (10)

二、实验内容 (10)

三、算法基本原理 (10)

四、算法设计与实现 (10)

五、计算用例的参考输出 (12)

六、源代码 (12)

实验四ROMBERG算法 (14)

一、实验目的 (14)

二、实验内容 (14)

三、算法基本原理 (14)

四、算法设计与实现 (14)

五、计算用例的参考输出 (16)

六、源代码 (16)

实验五RUNGEKUTTA算法 (18)

一、实验目的 (18)

二、实验内容 (18)

三、算法基本原理 (18)

四、算法设计与实现 (19)

五、计算用例的参考输出 (19)

六、源代码 (20)

感悟与体会 (21)

实验一 牛顿下山法求解非线性方程的根

一、实验目的

(1) 熟悉非线性方程求根简单迭代法,牛顿迭代及牛顿下山法 (2) 能编程实现简单迭代法,牛顿迭代及牛顿下山法 (3) 认识选择迭代格式的重要性

(4)

对迭代速度建立感性的认识;分析实验结果体会初值对迭代的影响

二、实验内容

用牛顿下山法解方程 013

=--x x (初值为0.6)

输入:初值,误差限,迭代最大次数,下山最大次数 输出:近似根各步下山因子

三、基本原理

牛顿下山公式:)

()

(1k k k k x f x f x x '-=+λ

下山因子 ,

,,,322

1

21211=λ 下山条件

|)(||)(|1k k x f x f <+

四、算法设计与实现

流程图

关键点:

while(fabs(f(x1))>fabs(f(x0))) { cout<<"λ="<

if(k>n){cout<<"迭代失败"<=eps) { if(df(x0)==0){cout<<"***无法迭代***"<m){cout<<"迭代失败"<

}//迭代过程

五、输入与输出

x0=0.6;e=0.0000001;m=100;n=100

输出

六、源代码

#include #include using namespace std;

图3.2牛顿下山算法流程⇐⇐⇐

double f(double x)

{

return (x*x-1)*x-1;

}

double df(double x)

{

return 3*x*x-1;

}

double newton(double x0,double eps,int n,int m)

{

if(df(x0)==0)cout<<"***无法迭代***"<

else

{

int k,c;//下山次数,迭代次数

double x1=x0-f(x0)/df(x0),r=1;

while(fabs(f(x1))>fabs(f(x0)))

{

cout<<"λ="<

x1=x0-r*f(x0)/df(x0);

r=r/2;

k++;

if(k>n){cout<<"迭代失败"<

}//求解下山因子

while (fabs(x0-x1)>=eps)

{

if(df(x0)==0){cout<<"***无法迭代***"<

x0=x1;

x1=x0-r*f(x0)/df(x0);

c++;

if(c>m){cout<<"迭代失败"<

}//迭代过程

return x1;

}

}

void main()

{

double x0,x1,e;

x0=0.6;e=0.0000001;

x1=newton(x0,e,100,100);

cout<<"x="<

}

实验二 高斯——赛德尔法求线性方程组

一、实验目的

(1) 熟悉求解线性方程组的有关理论和方法; (2) 能编程实现雅可比及高斯-塞德尔迭代法;

(4)

根据不同类型的方程组,选择合适的数值方法。

二、实验内容

用Gauss - Seidel 迭代法求解方程组

⎪⎩⎪

⎨⎧=+--=-+-=--2

.453.82102.721032

1321321x x x x x x x x x

输入:系数矩阵A ,最大迭代次数N ,初始向量,误差限e

输出:解向量

三、算法基本原理

线性方程组大致分迭代法和直接法。只有收敛条件满足时,才可以进行迭代。高斯-塞德尔是最基本的一类迭代方法,其迭代过程中引用新值进行剩下的计算。 高斯-塞德尔迭代:⎪⎪⎭

⎫ ⎝⎛--=∑∑+=-=++n

i j k j ij i j k j ij i ii k i

x a x a b a x 1)(11)1()

1(1 n i ,...,2,1=

四、算法设计与实现

流程图关键算法: