【计算方法笔记】矩阵分解求解线性方程组

矩阵分解

定理:

设A如果为非奇异矩阵,则必存在排列矩阵p以及单位下三角矩阵L和非奇异上三角矩阵U,使得

PA=LU

分类:

一般有Doolittle分解和Crout分解。

  • Doolittle分解

    将系数矩阵A分解为单位下三角阵(L)和上三角矩阵(U)

  • Crout分解

    将系数矩阵A分解为单位上三角阵和下三角矩阵

原理:根据矩阵乘法推导
Doolittle分解( Matlab程序)

Doolittle分解,分解的矩阵保存到原系数矩阵,减少内存

clear;
A=[5,7,9,10;6,8,10,9;7,10,8,9;5,7,6,5];
[n,cl]=size(A);
b=[26;18;22;9];
% disp(b(4));列向量行向量都可以用数组方式()访问
for i=1:n
    for j=1:n
        if(i<=j)
            A(i,j)=A(i,j)-A(i,1:i-1)*A(1:i-1,j);
            %L单位下三角阵
        else 
            A(i,j)=(A(i,j)-A(i,1:j-1)*A(1:j-1,j))/A(j,j);
            %U上三角阵
        end
    end
end

%LUx=b
%Ly=b先解y,再解ux=y,再解x
y=zeros(4,1);
for i=1:n
    y(i,1)=b(i,1)-A(i,1:i-1)*y(1:i-1,1);
end
%利用matlab矩阵可以用冒号迭代,减少代码数量
x=zeros(4,1);
for i=n:-1:1
    x(i,1)=(y(i,1)-A(i,i+1:n)*x(i+1:n,1))/A(i,i);
end
注意:

上面为自己根据理解编写的程序,还需改进,如:可以用二维数组存放增广矩阵A(1:n;1:n+1),在矩阵A基础上进行处理,这样系数矩阵的Doolittle分解与解方程组 Ly=b 可以同时进行,最后增广矩阵最后一列就是 y 的值,再解UX=y即完成了计算。

Crout分解( Matlab程序)

针对特殊系数矩阵(对角占优的三对角矩阵),Crout分解,此为追赶法。

方便计算记住:
L对角元(i,i)=A对角元(i,i)-A对角元左边(i,i-1)*A对角元上面(i-1,i)
U次对角元(i,i+1)=A(i,i+1)/A对角元(i,i)

A=[2,1,0,0;1,4,1,0;0,1,4,1;0,0,1,2];
b=[-3;6;14;2];
[n,cl]=size(A);
x=zeros(4,1);
 %将A分解成二对角元的下三角矩阵L和二对角元的上三角矩阵U,若U对角元为1则为Crout分解

 A(1,2)=A(1,2)/A(1,1);
 for i=2:n
     A(i,i)=A(i,i)-A(i,i-1)*A(i-1,i);
     if(i<=n-1)
         A(i,i+1)=A(i,i+1)/A(i,i);
     end
 end


 %解LUx=b,先解Ly=b,再解Ux=b;
 x(1)=b(1)/A(1,1);
 for i=2:n
     x(i)=(b(i)-A(i,i-1)*x(i-1))/A(i,i);
 end
 x(n)=x(n);
 for i=n-1:-1:1
     x(i)=x(i)-A(i,i+1)*x(i+1);
 end
 format rat;%以分数展示结果
 %format解除分数显示
 disp(A);
 disp(x);
总结

总的来说两种分解方法都有其类似的地方,同时注意矩阵分解的方法来求方程组的解精度比消元法高而且更节约内存。同时注意两种分解方法的计算顺序以及计算技巧。Doolittle分解先计算行,再计算列,Crout分解先进行L,再计算U

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值