矩阵分解法求解线性方程组

1、LU分解求解线性方程组

把一个矩阵分解为一个上三角阵和一个下三角阵的乘积的形式称为矩阵的因式分解。若所分解的下三角阵还是单位下三角阵,则称这种分解为LU分解。
设n阶矩阵A的各阶顺序主子式都不为0,则A存在唯一的三角分解 A=LU,且满足L为单位下三角阵,U为单位上三角阵。

Ax = b -> LUx = b -> (令Y = Ux) LY = b

由于L的对角线元素皆为1且是下三角矩阵,则可以求出Y各个元素的值;再将求得的Y代入Y = Ux可求得方程组的解x
matlab代码:

A = [1 3 5 7;2 -1 3 5;0 0 2 5;-2 -6 -3 1];
b = [1 2 3 4]';
[L, U] = lu(A);
x = inv(U) * inv(L) * b

% 结果:

x =

    1.3429
    0.6857
   -3.0000
    1.8000

2、QR分解求解线性方程组

QR分解是将系数矩阵A分解成正交矩阵Q和上三角矩阵R。
和上述的LU分解一样,令 Y = Rx 则 Ax = b 变为 QY = b
matlab代码:

A = [6 3 -2;3 5 1;-2 1 7];   b = [1; 2; 3];
[Q, R] = qr(A);
x = inv(R)* inv(Q)*b 

% 结果:

x =

    0.2477
    0.1560
    0.4771

3、Cholesky分解求解线性方程组

如果A是对称正定矩阵,则必定存在一个非奇异的下三角矩阵L,使得A = L L*, L*是L的转置。
matlab代码:

A = [4 -1 1;-1 4.25 2.75;1 2.75 3.5];  b = [6;-0.5;1.25];
L = chol(A);
x = inv(L') * inv(L) * b

% 结果:

x =

    1.1953
   -0.2949
    1.0947

你可能感兴趣的:(MATLAB)