2.1
一、题目:
用高斯消元法的消元过程作矩阵分解。设
消元过程可将矩阵A化为上三角矩阵U,试求出消元过程所用的乘数、、并以如下格式构造下三角矩阵L和上三角矩阵U
验证:矩阵A可以分解为L和U的乘积,即A=LU。
二、算法分析:
设矩阵,通过消元法可以将其化成上三角矩阵U,具体算法如下:
第1步消元:
得到
第2步消元:
得到的矩阵为
三、程序及运行结果
b1.m
A=[20 2 3;1 8 1;2 -3 15];
for i=1:2
M(i)=A(i+1,1)/A(1,1);
end
for j=2:3
A1(j,2)=A(j,2)-M(j-1)*A(1,2);
A1(j,3)=A(j,3)-M(j-1)*A(1,3);
end
M(3)=A1(3,2)/A1(2,2);
A1(3,2)=0;
A1(3,3)=A1(3,3)-M(3)*A1(2,3);
M,A1
运行结果为:
M =
0.0500 0.1000 -0.4051
A1 =
0 0 0
0 7.9000 0.8500
0 0 15.0443
所以:
验证:L=[1 0 0;0.05 1 0;0.1 -0.4051 1];U=[20 2 3;0 7.9 0.85;0 0 15.0443];A1=L*U
A1 =
20.0000 2.0000 3.0000
1.0000 8.0000 1.0000
2.0000 -3.0003 15.0000
四、精度分析
因为根据LU的递推公式可知,L,U分别为下三角和上三角矩阵,其中L不在对角线上的元素值为,在计算每个系数时会产生相应的计算误差。
2.2
一、题目
用矩阵分解方法求上题中A的逆矩阵。记
分别求解方程组
由于三个方程组系数矩阵相同,可以将分解后的矩阵重复使用。对第一个方程组,由于A=LU,所以先求解下三角方程组,再求解上三角方程组,则可得逆矩阵的第一列列向量;类似可解第二、第三方程组,得逆矩阵的第二列列向量的第三列列向量。由三个列向量拼装可得逆矩阵。
二、算法分析
首先根据LU分解,将矩阵A分解成下三角矩阵L和上三角矩阵U乘积的形式。然后分别求解方程组和。通过计算可知
最后求解得到的矩阵
三、程序及运行结果
b2.m
b1=[1 0 0]';b2=[0 1 0]';b3=[0 0 1]';
L=[1 0 0;0.05 1 0;0.1 -0.4 1];U=[20 2 3;0 8 0.85;0 0 15.04];
y1=inv(L)*b1;x1=inv(U)*y1;
y2=inv(L)*b2;x2=inv(U)*y2;
y3=inv(L)*b3;x3=inv(U)*y3;
x1,x2,x3,[x1,x2,x3]
运行结果为:
x1 =
0.0517
-0.0054
-0.0080
x2 =
-0.0162
0.1222
0.0266
x3 =
-0.0093
-0.0071
0.0665
ans =
0.0517 -0.0162 -0.0093
-0.0054 0.1222 -0.0071
-0.0080 0.0266 0.0665
四、精度分析
矩阵A经过LU分解后得到上三角U和下三角矩阵L,分别进行和计算时便产生了计算误差,所以最后结果与存在一定的误差。
2.2
一、题目
验证希尔伯特矩阵的病态性:对于三阶矩阵
取右端向量,验证:
(1)向量是方程组的准确解;
(2)取右端向量b的三位有效数字得,求方程组的准确解,并与X的数据作比较 。说明矩阵的病态性。
二、算法分析
(1)要验证向量X是方程的准确解,只需求解出该方程的解并与X作个比较即可。因为,所以
(2)与第一题算法一样,根据求解出
三、程序及运行结果
b3.m
b1=[11/6 13/12 47/60]';b2=[1.83 1.08 0.783]';
H=[1 1/2 1/3;1/2 1/3 1/4;1/3 1/4 1/5];
x1=inv(H)*b1
x2=inv(H)*b2
运行结果为:
x1 =
1.0000
1.0000
1.0000
x2 =
1.0800
0.5400
1.4400
四、精度分析
(1)通过x1的运行结果可知,是方程准确解。
(2)通过x2的运行结果可知,由于与的误差非常小,可是它们的计算结果却差别很大,根据病态矩阵的定义可知,矩阵H为病态的。