大学数学实验五_线性代数方程组的数值解法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c=10;a1=0.5;a2=0.25;b=0.20; p=-a1*b*c;q=-a2*b*(1-a1)*b*c; A1=p*eye(49,49); A2=[zeros(48,1),eye(48,48);zeros(1,49)]; A3=[[zeros(1,48);q*eye(48,48)],zeros(49,1)]; A=A1+A2+A3; B=zeros(49,1);B(1,1)=-q*50;B(49,1)=-600; A1=sparse(A);B1=sparse(B);X=A1\B1; X1=[50;X;600] hold on; grid on; plot(0:50,X1)
第 22 年后 第 23 年后 第 24 年后 第 25 年后 第 26 年后 第 27 年后 第 28 年后 第 29 年后 第 30 年后 第 31 年后 第 32 年后
A=Amatrix(20,3,-1/2,-1/4); %根据需要删除注释符号 X0=zeros(20,1); %初始向量(零向量) %X0=ones(20,1); %初始向量(1向量) B=ones(20,1); %右端向量(1向量) %X0=[1:20]'; %初始向量([1, 2, 3, … , 19, 20]) %B=[1:20]'; %右端向量([1, 2, 3, … , 19, 20]) [X,k]= Jacobi(A,X0,B,1e-7); %[X,k]= GaussSeidel (A,X0,B,1e-7); [X]' [k]
输出结果 迭代次数 k
雅可比迭代法
高斯-赛德尔迭代法
n=3 k=16
k=11
n=6
k=8
k=6
n=9
k=6
k=5
n=81 k=4
k=3
6
n=300
k=3
k=3
结果讨论: 1、 随着矩阵 A 主对角线元素的增大,两种迭代方法的收敛速度均有加快,迭代次数越来越
小。 2、 当矩阵 A 主对角线元素增大到一定程度后,无论它再怎样增大,收敛速度不会再明显加
取定右端向量 b 为[1:20],初始向量为 1 向量,改变矩阵 A 的主对角线元素分别为 3、6、9、 81、300,分别用雅可比迭代法和高斯-赛德尔迭代法计算,记录下迭代次数,并绘出解向量-迭 代次数的 -k 曲线。
5
A=Amatrix(20,3,-1/2,-1/4); %修改数字3即可改变A的主对角线元素 X0=ones(20,1); B=[1:20]'; [X,k,P]= Jacobi(A,X0,B,1e-5); %可改用GaussSeidel函数 hold on; grid on; plot(0:k,P) [k]
输出的植物数量-年数曲线如下。
输出的植物的数量随时间变化的数据。
第1年 第 1 年后 第 2 年后 第 3 年后 第 4 年后 第 5 年后 第 6 年后 第 7 年后 第 8 年后 第 9 年后 第 10 年后
50.0000 61.5030 64.0030 67.0782 70.2783 73.6322 77.1462 80.8278 84.6851 88.7265 92.9607
雅可比迭代法 迭代次数 k B =ones(20,1) B =[1:20]
X0=zeros(20,1) 23 23
X0=ones(20,1) 22 23
X0=[1:20] 27 22
高斯-赛德尔迭代法
迭代次数 k
X0=zeros(20,1)
B =ones(20,1)
14
B =[1:20]
15
X0=ones(20,1) 14 15
雅可比迭代法
B =ones(20,1)
B =[1:20]
X0=zeros(20,1)
X0=ones(20,1)
X0=[1:20] 4
高斯-赛德尔迭代法
B =ones(20,1)
X0=zeros(20,1)
B =[1:20]
X0=ones(20,1)
X0=[1:20]
由于给定的矩阵 A 是严格对角占优的,所以雅可比迭代和高斯-赛德尔迭代均收敛。从 上两表中的图片也可看出,得到的迭代向量序列都是收敛的。 结果讨论: 1、比较雅可比迭代法和高斯-赛德尔迭代法,发现同样条件下,雅可比方法的迭代次数多于 高斯-赛德尔方法,说明后者具有更好的收敛速度。 2、给定的初始向量和最终的解向量越接近,迭代收敛越快,迭代次数越少。
解向量 X 为: B =ones(20,1)时,解向量 X=[0.4816, 0.5734, 0.6328, 0.6521, 0.6609, 0.6643, 0.6657, 0.6663, 0.6665, 0.6666, 0.6666, 0.6665, 0.6663, 0.6657, 0.6643, 0.6609, 0.6521, 0.6328, 0.5734, 0.4816] B =[1:20]时,解向量 X=[0.7247, 1.3444, 2.0071, 2.6690, 3.3344, 4.0004, 4.6668, 5.3333, 5.9998, 6.6661, 7.3320, 7.9967, 8.6585, 9.3133, 9.9501, 10.5455, 11.0251, 11.2817, 10.6973, 9.3897]
1
本题的解答过程基本如下: (1)编写生成主对角线元素值可控的矩阵 A 生成函数。 (2)编写用雅可比迭代法和高斯-赛德尔迭代法求方程解的函数。 (3)按照题目要求进行分析。
编写生成主对角线元素值可控的矩阵 A 生成函数 Amatrix。
function A=Amatrix(n,a,c,b) A1=a*eye(n,n); A2=[zeros(n-2,2),b*eye(n-2,n-2);zeros(2,n)]; A3= [[zeros(2,n-2);b*eye(n-2,n-2)],zeros(n,2)]; A4=[zeros(n-1,1),c*eye(n-1,n-1);zeros(1,n)]; A5=[[zeros(1,n-1);c*eye(n-1,n-1)],zeros(n,1)]; A=A1+A2+A3+A4+A5;
k=k+1; xj=Bj*xj+fj; end
这个函数中,A 表示所求解的线性方程组的系数矩阵,X0 表示初始向量,b 表示右端 项向量,e 表示给定的迭代误差。
编写用高斯-赛德尔迭代法求方程解的函数 GaussSeidel。
function [xg,k]=GaussSeidel(A,X0,b,e) D=diag(diag(A)); n=length(A); L=-(tril(A)-D); U=-(triu(A)-D); fg=(D-L)\b; Bg=(D-L)\U; xg=X0; k=0; while norm(A*xg-b)/norm(b)>e
大学数学实验五 线性代数方程组的数值解法 实验报告
【实验目的】 1、学会用 MATLAB 软件数值求解线性代数方程组,对迭代法的收敛性和解
的稳定性作初步分析。 2、通过实例学习用线性代数方程组解决简化的实际问题。
【实验内容】
3 已知方程组 Ax=b,其中
,定义为
试通过迭代法求解此方程组,认识迭代法收敛的含义以及迭代初值和方程组系数矩阵性质对 收敛速度的影响。实验要求: (1) 选取不同的初始向量 x(0)和不同的方程组的右端项向量 b,给定迭代误差要求,用雅
模型: 已知某年该植物的数量为 xBaidu Nhomakorabea,记第 k 年的植物数量为 xk,那么有 xk + pxk-1 + qxk-2 = 0 (k = 2, 3, …… , n)
其中 p = -a1bc,q = -a2b(1-a1)bc。若要求 n 年后数量达到 xn,则 Ax = b
其中


7
① 用稀疏系数矩阵求解。
X0=[1:20] 17 14
对雅可比迭代法和高斯-赛德尔迭代法的函数略作修改,以便输出图形,观察迭代向量 序列是否收敛。
修改后的 Jacobi 函数
function [xj,k,P]=Jacobi(A,X0,b,e) D=diag(diag(A)); n=length(A); L=-(tril(A)-D); U=-(triu(A)-D); fj=D\b; Bj=D\(L+U); xj=X0; k=0; P=X0; while norm(A*xj-b)/norm(b)>e
输出图形直观地观察迭代向量序列是否收敛
A=Amatrix(20,3,-1/2,-1/4); %根据需要删除注释符号 X0=zeros(20,1); %初始向量(零向量) %X0=ones(20,1); %初始向量(1向量) B=ones(20,1); %右端向量(1向量) %X0=[1:20]'; %初始向量([1, 2, 3, … , 19, 20]) %B=[1:20]'; %右端向量([1, 2, 3, … , 19, 20]) [X,k,P]= Jacobi(A,X0,B,1e-7); % [X,k,P]= GaussSeidel(A,X0,B,1e-7); hold on; grid on; plot(0:k,P)
第 11 年后 第 12 年后 第 13 年后 第 14 年后 第 15 年后 第 16 年后 第 17 年后 第 18 年后 第 19 年后 第 20 年后 第 21 年后
97.3970 102.0451 106.9149 112.0172 117.3629 122.9638 128.8319 134.9801 141.4217 148.1707 155.2418
可比迭代法和高斯-赛德尔迭代法计算,观测得到的迭代向量序列是否均收敛?若收 敛,记录迭代次数,分析计算结果并得出结论。 (2) 取定右端向量 b 和初始向量 x(0),将 A 的主对角线元素成倍增长若干次,非主对角 线元素不变,每次用雅可比迭代法计算,要求迭代误差满足|| x(k+1)- x(k)||∞<10-5,比较 收敛速度,分析现象并得出结论。
这个函数中,n 表示矩阵 A 的阶数,在本题中恒取 20,a 表示主对角线元素的值,b 在 本题中恒取-1/4,c 在本题中恒取-1/2。
编写用雅可比迭代法求方程解的函数 Jacobi。
function [xj,k]=Jacobi(A,X0,b,e) D=diag(diag(A)); n=length(A); L=-(tril(A)-D); U=-(triu(A)-D); fj=D\b; Bj=D\(L+U); xj=X0; k=0; while norm(A*xj-b)/norm(b)>e
k=k+1; xj=Bj*xj+fj; P=[P,xj]; end
3
修改后的 Jacobi 函数多输出了矩阵 P,矩阵 P 可视为一个行向量,其每个元素均为迭代 k 次后得到的 xk。这样以 k 为横轴,解向量为纵轴,可输出图形观察 xk 是否收敛。函数 GaussSeidel 也需作同样修改,修改后的函数在此不再赘述。
k=k+1; xg=Bg*xg+fg; end
对函数 Jacobi(A,X0,b,e)的说明对这个函数一样有效。
2
题目要求选取不同的初始向量和右端向量,并分别用雅可比迭代法和高斯-赛德尔迭代 法求解,输出最终解和迭代次数,给定的迭代误差 e 为 1e-7。初始向量分别取零向量、1 向 量和[1, 2, 3, … , 19, 20],右端向量分别取 1 向量和[1, 2, 3, … , 19, 20]。
快,迭代次数不会再减小。 3、 相同条件下,雅可比迭代法不如高斯-赛德尔迭代法收敛得快,但当矩阵 A 主对角线元
素增大到一定程度后,两种方法的迭代次数相同。
4 一年生植物的繁殖问题 若一棵植物秋季产种的平均数为 c,种子能够活过冬天的比例为 b,1 岁的种子能在春
季发芽的比例为 a1,2 岁的种子能在春天发芽的比例为 a2。假定种子最多可以活动两个冬天。 如果在繁衍过程中,我们知道了某一年植物的数量,并希望若干年后它的数量达到给定的规 模,就需要在原模型的基础上改进,求第二年(及以后诸年)这种植物的数量。假设 c=10, a1=0.5,a2=0.25,b=0.20,第一年有 50 棵植物,且第 50 年后有 600 棵植物,试用追赶法、 稀疏系数矩阵和满矩阵求解。若 b 有 10%误差,估计对结果的影响。
相关文档
最新文档