zoukankan      html  css  js  c++  java
  • 线性代数(2)[漫谈]高中的消元法解方程与线性代数及LU分解之间的联系

    可怕的概念都是纸老虎。

    高斯消元、LU分解无非都是高中学过的解方程的消元法。

    高中的消元法

    现在有一个方程组需要你解,你会怎么解?答:高中教过可以用消元法来解未知数。

    \ 2x_1-4x_2=1 \ 4x_1+4x_2=5

    那么我们看看消元法怎么做的

    1. 第二个式子-2×第一个式子得到下面这个方程组:

    \ 2x_1-4x_2=1 \ 0 + 12x_2=3

    2. 第二个式子两边÷12.

    \ 2x_1-4x_2=1 \ x_2=frac 1 4

    3. 回代

    \ x_1 =1 \ x_2=frac 1 4

    确实任何线性方程都可以这么解,事实上计算机解方程也是这么做的。由于每次都要重复写x_1,x_2太麻烦了,反正他们也不起作用。于是数学家们就把方程组中的数字放在一起,符号也放在一起。这样使得消元的时候就不用总是重复写x_1,x_2这两个符号,大大简化的书写的复杂度。这种把数字和符号放在一起的写法叫做矩阵。计算机里面解方程都是输入矩阵,输出向量的。

    我们把最原始的那个方程组里面所有数字弄出来,得到下面这个式子:

    egin{bmatrix} 2 &-4 \ 4 &4 end{bmatrix} egin{bmatrix} x_1\ x_2 end{bmatrix} = egin{bmatrix} 1\ 5 end{bmatrix}

    我们定义A=egin{bmatrix} 2 &-4 \ 4 &4 end{bmatrix},我们的目标是得到\ x_1 =1 \ x_2=frac 1 4,写成矩阵形式就是egin{bmatrix} 1 &0 \ 0 &1 end{bmatrix} egin{bmatrix} x_1\ x_2 end{bmatrix} = egin{bmatrix} 1\ frac 1 4 end{bmatrix}

    通过我们高中的学的消元法可以将矩阵A变成egin{bmatrix} 1 &0 \ 0 &1 end{bmatrix}。这个对角线都是1,其他元素都是0的这个矩阵,数学家把它叫做单位矩阵。消元法的矩阵形式叫做高斯消元法。它的作用就是求解线性方程。现在用计算机解方程都是用消元法来解方程的

    矩阵高斯消元法

    1. 把系数矩阵变成对角线左下都是0的形式

    egin{bmatrix} 2 &-4 \ 4 &4 end{bmatrix} egin{bmatrix} 1\ 5 end{bmatrix} 
ightarrow egin{bmatrix} 2 &-4 \ 0 &12 end{bmatrix} egin{bmatrix} 1\ 3 end{bmatrix}

    2. 消除右上角的值,使得左边的矩阵变成egin{bmatrix} 1 &0 \ 0 &1 end{bmatrix}单位矩阵。

    egin{bmatrix} 2 &-4 \ 0 &12 end{bmatrix} egin{bmatrix} 1\ 3 end{bmatrix} 
ightarrow egin{bmatrix} 2 &-4 \ 0 &1end{bmatrix} egin{bmatrix} 1\ frac 1 4 end{bmatrix} 
ightarrow egin{bmatrix} 2 &0 \ 0 &1end{bmatrix} egin{bmatrix} 2\ frac 1 4 end{bmatrix} 
ightarrow egin{bmatrix} 1 &0 \ 0 &1end{bmatrix} egin{bmatrix} 1\ frac 1 4 end{bmatrix}

    但是,这是我们人去消元,我们知道这么做。但是怎么让计算机知道怎么消元呢?我们能不能通过矩阵相乘的方式进行消元操作?这就是高斯消元法的初衷。理解这个非常重要,我们通过一系列矩阵乘法操作把矩阵A变成了单位矩阵,那么前面的那些矩阵不就是A的逆矩阵么线性代数的各种矩阵分解基本是利用这个思路来进行矩阵分解

    我们看看高斯消元法的第一步怎么用矩阵表示:

    egin{bmatrix} 2 &-4 \ 4 &4 end{bmatrix} egin{bmatrix} 1\ 5 end{bmatrix} 
ightarrow egin{bmatrix} 2 &-4 \ 0 &12 end{bmatrix} egin{bmatrix} 1\ 3 end{bmatrix}

    我们是把第一行×-2加到第二行,来实现消除第二行的第一个数字。那么怎么用矩阵来表示“把第一行×2加到第二行”这个操作呢?先看看结果,待会再解释为何要左乘这个矩阵。

    egin{bmatrix} 1 &0 \ -2 &1 end{bmatrix} egin{bmatrix} 2 &-4&1 \ 4 &4 & 5 end{bmatrix} 
ightarrow egin{bmatrix} 2 &-4 & 1\ 0 &12 & 3 end{bmatrix}

    左乘是可以对行操作的。而消元法它只对行操作不对列操作。所以得左乘。

    由于矩阵A的第一行没有变,所以A左乘的那个矩阵的第一行是[1,0]。然后我们对第一行乘-2然后加到第二行,所以左乘的那个矩阵第二行为[-2,1](哪一行变了就着重关注哪一行,其他没变的行肯定是[0..1.0..]之类)。其他的几步消元操作基本是左乘类似的矩阵。这种一次只操作一行的矩阵,叫做初等变换矩阵。这种矩阵一般记作E。可以实现把第1行加到第2行的这种矩阵可以表示为E_{12}

    LU分解与高斯消元法的联系

    LU分解它要做的事情是把一个矩阵A分解成一个下三角矩阵和一个上三角矩阵相乘的形式,即A=L*U。(L是Lower Tiangular Matrix的意思,U是Upper Triangular Matrix的意思)。

    所以我们要求下三角矩阵L,和上三角矩阵U。

    什么是下三角矩阵?下面这个矩阵就是下三角矩阵,对角线和左下是非零,其他地方是0.

    egin{bmatrix} 1 &0 \ -2 &1 end{bmatrix}

    这个矩阵是不是很熟悉?这个矩阵就是前面提到的E_{12}矩阵。所以LU分解中的下三角矩阵L就是把矩阵A=egin{bmatrix} 2 &-4 \ 4 &4 end{bmatrix}变成上三角矩阵形式的一系列初等变换矩阵的乘积的结果逆矩阵,在本文中L就是E_{12}^{-1}E_{12}。为啥是逆矩阵?因为 E_{12}A=U ,而我们期待的是 A=LU 。所以 L=E_{12}^{-1}

    egin{bmatrix} 1 &0 \ -2 &1 end{bmatrix} egin{bmatrix} 2 &-4 \ 4 &4 end{bmatrix} 
ightarrow egin{bmatrix} 2 &-4 \ 0 &12 end{bmatrix}

    上三角矩阵U就是egin{bmatrix} 2 &-4 \ 0 &12 end{bmatrix}

    即A=L*U=egin{bmatrix} 1 &0 \ 2 &1 end{bmatrix}egin{bmatrix} 2 &-4 \ 0 &12 end{bmatrix}

    娱乐小知识:

    1. 估算n^2+(n-1)^2+...+1^2可以用积分的形式。前面那个式子≈int n^2 d_n

    2. 为何矩阵AB的逆,要把AB位置倒过来?书里面直接告诉你这个乘法求逆规则无异于告诉你先有儿子,再有老子。

    这一切都要从定义出发。什么是AB的逆矩阵?答:把AB变成单位矩阵的那种就是逆矩阵。那怎么把AB怎么变成单位矩阵?ABB^{-1}A^{-1}=I
ightarrow B^{-1}A^{-1}=(AB)^{-1}

    其他阅读:线性代数的应用和理解

    知乎 https://www.zhihu.com/people/yuanmuou/activities
  • 相关阅读:
    java实现第六届蓝桥杯格子中输出
    java实现第六届蓝桥杯格子中输出
    java实现第六届蓝桥杯循环节长度
    java实现第六届蓝桥杯循环节长度
    java实现第六届蓝桥杯格子中输出
    java实现第六届蓝桥杯格子中输出
    java实现第六届蓝桥杯循环节长度
    java实现第六届蓝桥杯循环节长度
    java实现第六届蓝桥杯加法变乘法
    深入研究java.lang.ThreadLocal类 (转)
  • 原文地址:https://www.cnblogs.com/ailitao/p/11047277.html
Copyright © 2011-2022 走看看