西南交通大学《数值分析报告》上机报告.docx

上传人:b****2 文档编号:1824486 上传时间:2022-10-24 格式:DOCX 页数:32 大小:664.72KB
下载 相关 举报
西南交通大学《数值分析报告》上机报告.docx_第1页
第1页 / 共32页
西南交通大学《数值分析报告》上机报告.docx_第2页
第2页 / 共32页
西南交通大学《数值分析报告》上机报告.docx_第3页
第3页 / 共32页
西南交通大学《数值分析报告》上机报告.docx_第4页
第4页 / 共32页
西南交通大学《数值分析报告》上机报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

西南交通大学《数值分析报告》上机报告.docx

《西南交通大学《数值分析报告》上机报告.docx》由会员分享,可在线阅读,更多相关《西南交通大学《数值分析报告》上机报告.docx(32页珍藏版)》请在冰豆网上搜索。

西南交通大学《数值分析报告》上机报告.docx

西南交通大学《数值分析报告》上机报告

目录

目录1

序言

(1)2

1.1C语言简介及结构2

1.2C语言特点及优点2

1.3选用原因3

第一题4

用雅格比法与高斯-赛德尔迭代法解下列方程组4

1.1题目4

1.2原理和思路4

1.3计算结果与分析7

第二题10

松弛因子对SOR法收敛速度的影响10

2.1题目10

2.2原理和思路10

2.3计算结果与分析12

序言

(2)16

第三题17

利用四阶Runge-Kutta算法求解微分方程的初值问题17

3.1题目17

3.2原理和思路17

3.3计算结果与分析18

附录1Jacobi迭代法C语言源程序21

附录2Gauss-Seidel迭代法程序代码23

附录3SOR迭代法C语言源程序25

附录4四阶Runge-Kutta算法程序代码27

总结与体会29

本报告系西南交通大学2011级硕士研究生《数值分析》课程的上机实习报告,由本人严格按照实习要求独立完成。

序言

(1)

在第一次给定的四道上机题中,我选择的是第三题(雅格比迭代法、高斯—赛德尔迭代法求解方程组的问题)和第四题(松弛因子对SOR法收敛速度的影响),本次上机实习基于MicrosoftVisualStudio.NET平台进行程序建立,采用C语言面向对象语言,从界面设计到结果输出,完成一个具有针对性的可视化Windows应用程序的编制。

在此序言中,我将阐述C语言的基本结构、优特点以及选用这种语言进行编程的主要原因。

1.1C语言简介及结构

C语言是一种计算机程序设计语言,由美国贝尔研究所的D.M.Ritchie于1972年推出。

1978后,C语言已先后被移植到大、中、小及微型机上,是目前世界上流行、使用最广泛的高级程序设计语言之一。

C语言既有高级语言的特点,又具有汇编语言的特点。

它不仅可以作为工作系统设计语言,编写系统应用程序;也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。

其应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件、三维、二维图形和动画。

结构如下:

(1)一个C语言源程序可以由一个或多个源文件组成;

(2)每个源文件可由一个或多个函数组成;

(3)一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数;

(4)源程序中可以有预处理命令(包括include命令、if命令、pragma命令),预处理命令通常应放在源文件或源程序的最前面;

(5)每一个说明,每一个语句都必须以分号结尾。

但预处理命令,函数头和花括号“}”之后不能加分号;

(6)标识符,关键字之间必须至少加一个空格以示间隔。

若已有明显的间隔符,也可不再加空格来间隔。

1.2C语言特点及优点

C语言主要具有以下几方面特点及优点:

(1)简洁紧凑、灵活方便

C语言一共只有32个关键字、9种控制语句,程序书写自由,主要用小写字母表示,它把高级语言的基本结构和语句与低级语言的实用性结合起来。

C语言可以象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

(2)运算符丰富

C语言的运算符包含的范围很广泛,共有种34个运算符。

C语言把括号、赋值、强制类型转换等都作为运算符处理。

从而使C语言的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。

(3)数据结构丰富

C语言的数据类型有:

整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等,能用来实现各种复杂的数据类型的运算,并引入了指针概念,使程序效率更高。

另外C语言具有强大的图形功能,支持多种显示器和驱动器,且计算功能、逻辑判断功能强大。

(4)C是结构式语言

结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。

这种结构化方式可使程序层次清晰,便于使用、维护以及调试。

C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

(5)语法限制不太严格、程序设计自由度大

一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。

而C语言允许程序编写者有较大的自由度。

(6)允许直接访问物理地址,可以直接对硬件进行操作

因此既具有高级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。

(7)程序生成代码质量高,程序执行效率高

一般只比汇编程序生成的目标代码效率低10~20%。

(8)适用范围大,可移植性好

C语言有一个突出的优点就是适合于多种操作系统,,如DOS、UNIX,也适用于多种机型。

1.3选用原因

本次数值分析上机实习拟采用C语言进行编程,主要是基于以下几方面的考虑:

(1)C语言的优越性:

C语言作为一种优秀的编程语言,使用起来灵活方便,程序执行效率高,可移植性好,可以把程序写为函数,方便多次调用;

(2)可视化交互性:

C语言可创建Windows应用程序,可视性程度高,与使用者的交互简单,有利于体会程序的设计过程,尤其是在编写数值分析的各种算法过程中,可以清晰的理解算法的实现过程,使深刻理解该算法;

(3)个人基础:

作为一名工科学生,曾在大学期间有系统的学习过C语言,具备一定的理论基础和实践操作能力,能够较好的应用该语言进行运算,有助于上机实习过程的顺利完成。

鉴于以上考量,我决定选择C语言进行编程。

 

第一题

用雅格比法与高斯-赛德尔迭代法解下列方程组

1.1题目

【3】用雅格比法与高斯-赛德尔迭代法解下列方程组Ax=b,研究其收敛性,上机验证理论分析是否正确,比较它们的收敛速度,观察右端项对迭代收敛有无影响。

(1)A行分别为A1=[6,2,-1],A2=[1,4,-2],A3=[-3,1,4];b1=[-3,2,4]T,b2=[100,-200,345]T,

(2)A行分别为A1=[1,0,8,0.8],A2=[0.8,1,0.8],A3=[0.8,0.8,1];b1=[3,2,1]T,b2=[5,0,-10]T,

(3)A行分别为A1=[1,3],A2=[-7,1];b=[4,6]T.

1.2原理和思路

1.2.1基本原理

(1)Jacobi迭代法

设有n阶方程组Ax=b,若系数矩阵非奇异,且(i=1,2,…,n),将方程组改写成同解方程组:

然后写成迭代格式:

上式也可以简单地写为:

对以上两式给定一组任意初值后,经反复迭代可得到一向量序列,如果x(k)收敛于,则就是方程组Ax=b的解,该方法称为雅克比(Jacobi)迭代法。

设D=diag(a11,a22,…,ann),将Ax=b改写为:

AX=(D–(D-A))x=b,DX=(D-A)x+b,X=(I–D-1A)x+D-1b。

记B=I–D-1A,g=D-1b。

则迭代格式的向量表示为

BJ=I–D-1A称为雅克比迭代矩阵。

Jacobi迭代收敛的充要条件:

迭代矩阵BJ的谱半径。

特别地,若系数矩阵A满足以下特征中的任意一条,则Jacobi迭代法收敛:

1A为行对角占优阵,即;

2A为列对角占优阵,即;

3A的元素满足。

(2)Gauss-Seidel迭代法

在雅可比迭代中,每次迭代时只用到前一次的迭代值,而在高斯-塞德尔迭代中,每次迭代时充分利用最新的迭代值。

一旦一个分量的新值被求出,就立即用于后续分量的迭代计算,而不必等到所有分量的新值被求出以后。

如果迭代收敛,应该比更接近于原方程的解(i=1,2,…,n),因此在迭代过程中及时地以代替(i=1,2,…,n-1),可得到更快的收敛效果。

这样可将迭代格式写成:

上式可简写为:

(i=1,2,…,n)

该式称为Gauss-Seidel迭代格式。

对于上述Gauss-Seidel迭代式,如写成矩阵形式为:

=D-1+D-1b,=。

其中,L和U分别为:

则Gauss-Seidel迭代法的迭代矩阵为。

其收敛的充要条件为谱半径。

特别地,若系数矩阵A满足Jacobi迭代法三条特征中的任意一条,则Gauss-Seidel迭代法收敛。

1.2.2实验思路

(1)Jacobi迭代法的算法为:

 

Jacobi迭代法的流程图为:

在以上的流程图中,先读入数据,即先输入系数矩阵A,常数向量b,初始值,停止条件和最大循环次数。

图中是迭代公式中的,k是循环次数,N是最大循环次数。

(2)Gauss-Saidel迭代法的算法为:

Gauss-Seidel迭代法的流程图为:

以上的流程图中,先读入数据,即先输入系数矩阵A,常数向量b,初始值,停止条件和最大循环次数N。

流程图中的是高斯-塞德尔迭代公式中的,是高斯-塞德尔迭代公式中的,k是迭代次数,N是最大循环次数。

1.3计算结果与分析

(1)当,时,通过两种迭代法得到的结果如下图所示:

 

 

当,时,通过两种迭代法得到的结果如下图所示:

 

【实验现象】

通过上述两组实验对比得到的结果显示:

Jacobi迭代和Gauss-Seidel迭代都是收敛的。

【原因分析】

由矩阵A可知,A为列对角占优阵,所以Jacobi迭代法和Gauss-Seidel迭代法都是收敛的。

从上述两组实验对比可以得出,Gauss-Seidel迭代法比Jacobi迭代法的收敛速度更快,而且右端项b对迭代收敛没有影响。

 

(2)当,时,通过两种迭代法得到结果如下图所示:

 

 

当,时,通过两种迭代法得到结果如下所示:

 

【实验现象】

通过上述两组实验对比得到的结果显示:

Jacobi迭代都是发散的,而Gauss-Seidel迭代都是收敛的。

【原因分析】

Jacobi迭代矩阵,经过计算,故Jacobi迭代是发散的。

Gauss-Seidel迭代矩阵,计算,故Gauss-Seidel迭代是收敛的。

(3)当,时,通过两种迭代法得到计算结果如下图所示:

 

【实验现象】

通过上述实验结果显示:

Jacobi迭代法和Gauss-Seidel迭代法都是发散的。

【原因分析】

Jacobi迭代矩阵,经计算,故Jacobi迭代法是发散的。

Gauss-Seidel迭代矩阵,经计算,故Gauss-Seidel迭代是发散的。

【实验结论】

1、判断Jacobi迭代和Gauss-Seidel迭代是否收敛,可计算它们的迭代矩阵B的谱半径是否小于1。

,则收敛;,则发散;

2、从实验结果可以看出,Gauss-Seidel迭代法比Jacobi迭代法的收敛速度快;

3、方程右端项对Jacobi迭代和Gauss-Seidel迭代的收敛性事没有影响的。

第二题

松弛因子对SOR法收敛速度的影响

2.1题目

【4】松弛因子对SOR法收敛速度的影响。

用SOR法求解方程组Ax=b,其中

要求程序中不存系数矩阵A,分别对不同的阶数取w=1.1,1.2,...,1.9进行迭代,记录近似解x(k)达到||x(k)-x(k-1)||<10-6时所用的迭代次数k,观察松弛因子对收敛速度的影响,并观察当w0或w2会有什么影响?

2.2原理和思路

2.2.1基本原理

在很多情况下,Guass-Seidel迭代法比Jacobi迭代法收敛速度快。

分析Guass-Seidel迭代公式,可以改写成:

(j=1,…,n)

记:

称为第k步第i个分量的残量。

那么Gau

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1