西南交大研究生数值分析期末考试作业答案

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

序言

随着科技的进步和经济的迅猛发展,计算机这一工具在人们的生活和工作中越来越重要,数值分析作为工程计算和科学计算连接计算机的一门基础课程日益受到人们的重视,数值分析这门课在我们整个研究生课程的学习中具有很重要的意义,对我们以后的工作学习有很重要的作用。

Matlab是与一个非常优秀的的计算机语言,集数学计算,仿真和函数绘图等于一体,是一款功能强大的数学软件,是科研机构进行数学建模分析、研究必要的工具。本上机实习的所有内容都是采用Matlab7.0这个软件开发平台。使用Matlab7.0语言所编写的程序,与Visual C++、Basic和Pascal程序相比,具有速度快、操作简单、修改方便、界面友好、功能强大等优势。

用C++自编程序解决问题针对性好,可以得到想要的各种结论,而用数学软件计算则有一定的局限性,因为数学软件的算法是封装的,甚至我们不知道命令的具体算法,另外数学软件的命令只能解决通用的计算问题,对需要特定结论的计算问题,比如得到迭代次数, 光用数学软件的命令便不能得到,而用C++编程则有很强的适应性,可以精细控制计算细节,得到一些想要的结论,但是对于常规的计算问题,比如拟合和插值以及解方程(组),如果只要结果,那么用软件计算比较有优势,所以对实际问题综合使用计算方法比较好.

由于使用能力所限,有一些疏忽,恳请老师指正,在此感谢老师这个学期对我们的悉心教导。

第一题

写出对一般的线性方程组通用的Gauss消元, Gauss-Seidel迭代程序。并以下面的线性方程组为例进行计算,讨论所得到的计算结果是否与理论一致。

(1)

6213100 1422200 3144345

x

--

⎛⎫⎛⎫⎛⎫ ⎪ ⎪ ⎪

-=-

⎪ ⎪ ⎪ ⎪ ⎪ ⎪-⎝⎭⎝⎭⎝⎭

(2)

10.80.835 0.810.820 0.80.81110

x

⎛⎫⎛⎫⎛⎫ ⎪ ⎪ ⎪

=

⎪ ⎪ ⎪ ⎪ ⎪ ⎪

-

⎝⎭⎝⎭⎝⎭

(3)

134 716

x

⎛⎫⎛⎫

=

⎪ ⎪-

⎝⎭⎝⎭

本题的思路为编写Gauss-Seidel迭带的函数,在matlab中运行,查看其收敛与否与收敛速度,然后验证迭代收敛的条件。

(1)在matlab命令界面输入命令代码,并通过函数计算求得收敛的速度与迭代结果如下,假设迭代超过或达到10E6,迭代不收敛。

表1-a 对于右端项为b1的迭代结果

表1-b 对于右端项为b2的迭代结果

通过附录的谱半径脚本程序计算两种迭代的迭代矩阵满足谱半径分别为0.5427、0.3.536,均小于1条件

(2)同(1)得到

表2-a 对于右端项为b1的迭代结果

通过附录的谱半径脚本程序计算两种迭代的迭代矩阵满足谱半径分别为1.6、0.7155,后者小于1。

(3)同(1)得到

表3-a 对于右端项为b1的迭代结果

通过附录的谱半径脚本程序计算两种迭代的迭代矩阵满足谱半径分别为4.5826、21,均远大于1。

2.结论与分析

(1).Jacobi迭代收敛的条件矩阵B=I-inv(D)*A的谱半径小于1成立,其中D=diag(diag(A));I为同阶的单位矩阵;Gauss-Seidel迭代收敛的条件B=inv(D-L)*U的谱半径小于1 成立,其中D=diag(diag(A)); U=triu(A,1); L=tril(A,-1)。

(2).两种迭代右端项都对迭代没有影响,只影响迭代的速度。

(3).两种迭代收敛时,Gauss-Seidel迭代速度要比Jacobi快。

(4).右端项对迭代速度有影响,值相对过大会降低收敛速度.

(5).若迭代格式不能收敛,那么可以换用Gauss消去法计算.或直接用软件算.

(6).在用谱半径方法判断迭代格式收敛性时,若特征值为复数,则算复数的模.

第二题

给定初值问题'2020)1,

0,

(x y y y ≤≤-==

(精确解为20x

y e -=),用Ru n ge-Kutt a 4阶算法按步长0.05,0.1,0.2h =求解,分析其中遇到的现象及问题。 1.Runge-Kutta 4阶算法的思路

Runge-Kutta 法的基本思想:是通过(,)f x y 某些点的函数值的适当线性组合替换Eular 法中的(,)k k f x y ,可能使得方法的精确度更高。由于有了这种思想,因此标准的Runge-Kutta 的算法如下(h 为求解步长):

1(,)k k K hf x y =

如果

k y 是某种方法第k 步的近似值,()k y x 是其准确值,其绝对误差为k e ,即有:

()k k k e y x y =-。假定第k 步之后的计算不再有舍入误差,只是由第k 步的舍入误差k δ引

起的扰动m δ,都有m k

δδ<,则称此方法是绝对稳定的。数值解的稳定性一般与步长h 以

及(,)f x y 有关。

2. 试验结果与分析

从结果上看,迭代的刚开始的误差较大,但随着迭代次数的增加,整体截断误差在逐步减小,当h=0.1时,说明迭代具有很好的稳定性。可以看到当x k =1时,结果已经逼近真值,即说明收敛。

(2)而当h=0.2时,结果列表如下:

对比真值数据可知,选用h=0.2时,迭代不收敛,而且随着迭代次数的增加累积的误差在不断放大,说明h=0.2时不具有稳定性。我们知道采用标准四阶rungekutta 法的绝对稳定区间为:(-2.78,0)当h=0.1时,h λ=-2,在绝对稳定区间内,当h=0.2时,h λ=-4,此时不在稳定区间之内。

总 结

首先,通过本次上机实习使我们对数值分析的书本上的知识有了更进一步的理解,使我们把书本上学习到的知道与实际中的应用初步地结合起来,为我们以后把数值分析应用我们学术方向上打下了一定的基础。

通过本次上机实习巩固了所学的知识,培养思考问题的能力,锻炼了matlab 和c 语言程序的使用。在编程过程中经常发现一些错误和问题,在修改的过程中提高自己,也体会了数值分析给计算带来的方便之处。通过matlab 与C++的对比知道了两者各有各自的优点,matlab 编程的方便与程序编写的方便简单,而c 语言能帮助我们更好地理解。

附 录

附录1 高斯赛德迭代程序,包括函数和命令行需要运行的代码 function [x,k]=g_s(A,b,x0) n=length(A);

相关文档
最新文档