使用高斯消元法求解线性方程组
作为矩阵运算的一个应用,高斯消元法在线性方程组求解中发挥着重要的作用。高斯消元法的本质,是通过一系列线性变换,将线性方程组的系数矩阵变为上三角矩阵或者下三角矩阵,进而通过回代的方法得到所有变量的值。本文作为一篇抛砖引玉的介绍,将简要说一下如何在一个具体的线性方程组上应用高斯消元法,并给出一个python程序用于展示编程求解线性方程组的方法。
一、矩阵、矩阵的线性变换
矩阵的本质是一个数据表。例如,下面的这个上三角矩阵(主对角线以下都是零的矩阵)就是一个3×3的数据表。 $$ \left[ \begin{matrix} 1 & 2 & 3 \\ 0 & 5 & 6 \\ 0 & 0 & 9\\ \end{matrix} \right] $$ 矩阵的线性变化包括初等行变换和初等列变换。初等行变换包括三种变换:(1)对换两行(例如,对换矩阵中\(i\)和\(j\)两行,记作\(r_i \leftrightarrow r_j\));(2)以一个非零实数乘某一行的所有元素(例如,第\(i\)行乘\(k\),记作\(r_i\times k\));(3)把某一行的所有元素的\(k\)倍加到另一行上(例如第\(j\)行的\(k\)倍加到第\(i\)行,记作\(r_i+kr_j\))。列变换也包括三种变化,将上述行变换的“行”换成“列”,就得到了初等列变换。
二、高斯消元法
高斯消元法(Gaussian elimination)是求解线性方阵组的一种算法。它通过逐步消除未知数来将原始线性系统转化为另一个更简单的等价的系统。它的实质是通过初等行变化,将线性方程组的增广矩阵转化为行阶梯矩阵。 我们举一个例子: $$ \begin{align} 2x +y -z & =8 \\ -3x -y +2z & =-11\\ -2x +y +2z & =-3 \end{align} $$ 我们构造增广矩阵,也就是上述线性方程组的系数矩阵\(A\)加上常数向量\(b\)。 $$ \left[ \begin{matrix} 2 & 1 & -1& 8 \\ -3& -1& 2 & -11\\ -2& 1 & 2 & -3\\ \end{matrix} \right] $$ 经过初等变换\(r_2-(-3/2)r_1,\ r_3-(-1)r_2\)得到 $$ \left[ \begin{matrix} 2 & 1 & -1& 8 \\ 0 & 1/2&1/2& 1 \\ 0 & 2 & 1 & 5 \\ \end{matrix} \right] $$ 再经初等变换\(r_3-4r_2\)得到 $$ \left[ \begin{matrix} 2 & 1 & -1& 8 \\ 0 & 1/2&1/2& 1 \\ 0 & 0 & -1& 1 \\ \end{matrix} \right] $$ 于是我们得到了一个简化的三角方程组。在这个三角方程组中,首先就可以得到变量z的值,进而得到y的值,最后得到x的值。 $$ \left( \begin{align} 2x +y -z & =8 \\ 1/2y +1/2z & = 1\\ -z & = 1 \end{align} \right) \\ \Rightarrow z=-1,\ y=3,\ x=2 $$
三、程序实现
这里我们使用Python实现一个线性方程组的求解程序。这个程序的思想来自文章《高斯消元法详解》,并结合Python的一些特性进行了修改。
1 | #!/usr/bin/python3 |