数学实验第3次作业_线性方程组的数值解法

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

线性方程组的数值解法

一 实验目的

1 学会用MATLAB 软件求解线性代数方程组,对迭代法的收敛性和解的稳定性做初步分析;

2 通过实例学习线性代数方程组解决简化的实际问题。

二 实验内容

1 已知方程组Ax =b ,其中A ∈ℝ20×20,定义为:

3

1/21/41/231/21/41/41/231/21/41/41/231/21/4

1/23--⎡⎤⎢⎥---⎢

⎥⎢⎥---⎢⎥-⎢⎥⎢⎥

---⎢⎥

--⎣

试通过迭代法求解此方程组,认识迭代法收敛的含义以及迭代初值和方程组系数矩阵性质对收敛速度的影响。实验要求:

(1) 选取不同的初始向量x (0)和不同的方程组右端项向量b ,给定迭代误差要求,用雅可比迭

代法和高斯-赛德尔迭代法计算,观测得到的迭代向量序列是否均收敛?若收敛,记录迭代次数,分析计算结果并得出你的结论。

(2) 取定右端项向量b 和初始向量x (0),将A 的主对角线元素成倍增长若干次,非对角线元素

不变,每次用雅可比迭代法计算,要求迭代误差满足‖x (k+1)−x (k)‖∞<10−5,比较收敛速度,分析现象并得出你的结论。 初步解决:

首先建立利用雅克比迭代法和高斯-赛德尔迭代法计算的函数M 文件。 雅克比迭代法:

高斯-赛德尔迭代法:

关于迭代法的收敛性:

由原式Ax=b化简可得x=Bx+f,也就是说,研究此处迭代法是否收敛实际上就是研究有原矩阵A经变换之后所得矩阵B的性质。而由于该题第一问中,A保持不变,所以对于收敛性只需研究一次。在命令栏中输入以下命令:

(1)构造题目中的矩阵A:

(2)提取对角矩阵、上三角矩阵、下三角矩阵:

(3)对于两种迭代方法分别求B:

(4)分别计算两个矩阵的三种范数:

n1和m1、n2和m2、n3和m3分别是矩阵B1、B2的1-范数、2-范数和∞范数。由书上定理,矩阵的谱半径不超过任何一个范数,即ρ(B)≤‖B‖,而由图中可以看出,两个矩阵的六个范数没有一个大于1,所以两个矩阵的谱半径一定都小于1,所以此时两种迭代方法均收敛。

利用两个函数研究原方程组:

(1)对于相同的初始值x(0),选取不同的右端项向量b。

令x(0)=(0…0)20T,b分别取(1 2…19 20)20T、(20 19…2 1)20T、(10 10…10 10)20T、(−10 −9…8 9)20T,分别观察两种迭代方法最后的迭代次数。(迭代误差拟定为0.001)

相关截图如下:

从表中的数据可以看出,当初始值不变,右端项向量变化时,使用雅克比迭代法和高斯-赛德尔迭代法都可以得到最后的结果,但是明显高斯-赛德尔迭代法比雅克比迭代法的收敛

速度要快。从表中还可以看出,b的变化是会影响迭代次数的,因为b变化以后方程组的解发生了变化,使得计算得过程也发生了变化,进而影响了迭代次数。

(2)对于相同的右端项向量b,选取不同的初始值x(0)。

令b=(1 2…19 20)20T,x(0)分别取(0…0)20T、(1…1)20T、(−1…−1)20T、(1 2…19 20)20T,分别观察两种迭代方法最后的迭代次数。(迭代误差拟定为0.001)

相关截图如下:

从表中可以看出,初始值的变化会影响迭代次数,但是当迭代误差不大的时候,初始值的变化对迭代次数的变化的影响也不会非常大。但是通过实验可以发现,将最后一组数据

的迭代误差改为0.0001是,用雅克比迭代法的迭代次数变为16,而高斯-赛德尔迭代法的迭代次数变为11。但是总体而言,高斯-赛德尔迭代法的收敛速度还是比雅克比迭代

法的收敛速度快。

下面研究第二问。将初始值x (0)定为(1…1)20T ,右端向量b 定为(1 2…19 20)20T 。改变的A 的主对角元素,分别变为原来的2倍、3倍、5倍、10倍,观察迭代次数变化。(用雅克比迭代法,迭代误差定为10−5)

相关截图如下:

从表格中的数据可以看出,当改变主对角元素的值时,对迭代次数的影响很大,而且在此时给出的条件下,当主对角元素的值增大时,迭代次数同步的减小。

2对于5.1.2节假设c=10,a1=0.5,a2=0.25,b=0.20,第一年有50颗植物,且第50年后有600颗植物。试分别用追赶法、稀疏系数矩阵和满矩阵求解;若b有10%的误差,估计对结果的影响。

初步解决:用三种不同的方法解决问题。首先对数据做简单处理,由题目中c=10,a1= 0.5,a2=0.25,b=0.20,第一年有50颗植物,且第50年后有600颗植物,这些条件可知,p=−a1bc=−1,q=−a2b(1−a1)bc=−0.05,n=50,x0=50,x n=600。

追赶法:

在命令栏中输入以下命令:

输出植物数量的每年数量:

表中的数据由于精确度的关系,所以都不是整数,在具体考虑时,可以直接四舍五入。可以看出,第1年的植物数量为61棵或62棵。

画出植物数量与年份的关系曲线,输入以下命令:

得到关系曲线如图:

稀疏系数矩阵:

在命令栏中输入以下命令:

由图中可以看出,第1年的植物数量为61棵或62棵。画出植物数量与年份的关系曲线,输入以下命令:

得到关系曲线如图:

满矩阵:

在命令栏中输入以下命令:

由图中可以看出,第1年的植物数量为61棵或62棵。画出植物数量与年份的关系曲线,输入以下命令:

得到关系曲线如图:

通过这个例子也可以发现,实际上用满矩阵和稀疏系数矩阵在结果行没有什么很大的区别,主要的区别还是在于计算所用的时间上。

下面研究b的误差对结果的影响

由以上可以看出,实际上用哪一种方法队最后的结果的影响不大,所以在下面研究b对结果的影响的时候,只选用其中一种方法研究,避免重复。此处选择稀疏系数矩阵来研究。

首先将b增加10%,即b=0.22。直接更改原程序中的p与q的值,其他不变。(此时p=−1.1,q=−0.0605)

输入命令如下:

相关文档
最新文档