前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >线性方程组

线性方程组

作者头像
老齐
发布2020-05-15 17:09:03
2.3K0
发布2020-05-15 17:09:03
举报
文章被收录于专栏:老齐教室老齐教室

作者:老齐

线性方程组,是任何标准大学数学教材讲解矩阵是都要用到的,并用它引出矩阵概念。之所以如此,可能有两个原因:一是因为我们在初中的时候就已经学习过线性方程组,对它不陌生,正所谓“温故而知新”;二是矩阵的确是为了求解线性方程组而被提出的。所以,此处也不免俗,依然从线性方程组开始,引出矩阵。

\begin{cases}-x_1+3x_2-5x_3=-3\\2x_1-2x_2+4x_3=8\\x_1+3x_2 = 6\end{cases}

如果将上述线性方程组的等号左侧各个多项式的系数,按照下面的方式排列:

\begin{bmatrix}-1 & 3 & -5 \\ 2 & -2 & 4 \\ 1 & 3 & 0 \end{bmatrix}

这就是矩阵。

线性方程组中第三个方程式缺少

x_3

,可以认为该变量的系数是0。上面的矩阵中的数字来自线性方程组左侧多项式的系数,此矩阵也称为系数矩阵。

如果将线性方程组等号右侧的常数也纳入到矩阵中,其样式如下:

\begin{bmatrix}\begin{array}{c c c | c}-1 & 3 & -5 & -3 \\ 2 & -2 & 4 & 8 \\ 1 & 3 & 0 & 6 \end{array}\end{bmatrix}

这种类型的矩阵称为增广矩阵。

对于增广矩阵,用下面所演示的步骤,完成对线性方程组的求解过程。注:以下演示中,数字①②③分别指增广矩阵的第一行、第二行和第三行。

  1. 分别对第一行和第二行执行如下操作:
    • 第一行:
    ①×(-1)
    • 第二行:
    ②×(\frac12)

结果如下:

\begin{bmatrix}\begin{array}{c c c | c}1 & -3 & 5 & 3 \\ 1 & -1 & 2 & 4 \\ 1 & 3 & 0 & 6 \end{array}\end{bmatrix}
  1. 第二行和第三行分别与第一行做减法,第一行不变,即:
    • 第二行:
    ②+①×(-1)
    • 第三行:
    ③+①×(-1)

结果如下:

\begin{bmatrix}\begin{array}{c c c | c}1 & -3 & 5 & 3 \\ 0 & 2 & -3 & 1 \\ 0 & 6 & -5 & 3 \end{array}\end{bmatrix}
  1. 第一行和第二行不变,第三行做如下变化:
    • 第三行:
    ③+②×(-3)

结果如下:

\begin{bmatrix}\begin{array}{c c c | c}1 & -3 & 5 & 3 \\ 0 & 2 & -3 & 1 \\ 0 & 0 & -14 & 0 \end{array}\end{bmatrix}

此矩阵对应着一个新的线性方程组,只是此线性方程组与前面我们求解的线性方程组具有相同的解。

\begin{cases}x_1-3x_2+5x_3=3\\2x_2-3x_3=1\\-14x_3 = 0\end{cases}

由此线性方程组,比较容易求得:

\begin{cases}x_1=\frac92\\x_2=\frac12\\x_3 = 0\end{cases}

在上面的操作过程中,经过一系列的变换,最终得到了一个非常容易求解的矩阵,该矩阵称之为阶梯形矩阵。

定义 如果满足如下条件,该矩阵称为阶梯形矩阵

  1. 矩阵中如果有元素都是0的行,那么它位于矩阵的下方。
  2. 矩阵中每个非零行的第一个不是0的元素,称为矩阵的主元,主元的列索引随着行索引的递增而严格增大。

例如,下面是一个阶梯形矩阵:

\begin{bmatrix}1 & -3 & 5 & 3 & 9 \\ 0 & 2 & -8 & 1 & 0 \\ 0 & 0 & 0 & 1 & 2 \\ 0 & 0 & 0 & 0 & 0\end{bmatrix}
  • 第一行主元1,位于第一列
  • 第二行主元2,位于第二列
  • 第三行主元1,位于第四列
  • 第四行是元素都为0的零行

前述将增广矩阵变换成比较容易求解的阶梯矩阵的过程,称为矩阵的初等变换,严格地说,上述进行的是初等行变换。

上述经过初等变换所得到的的阶梯矩阵,还可以继续进行如下变换:

  1. 第一行不变,将第二行和第四行的主元分别变为1:
    • 第二行:
    ②×\frac12
    • 第三行:
    ③×(-\frac1{14})
\begin{bmatrix}\begin{array}{c c c | c}1 & -3 & 5 & 3 \\ 0 & 1 & -\frac32 & \frac12 \\ 0 & 0 & 1 & 0 \end{array}\end{bmatrix}
  1. 第三行不变:
    • 第一行:
    ①+②×3
    • 第二行:
    ②+③×\frac32
\begin{bmatrix}\begin{array}{c c c | c}1 & 0 & \frac12 & \frac92 \\ 0 & 1 & 0 & \frac12 \\ 0 & 0 & 1 & 0 \end{array}\end{bmatrix}
  1. 第二行和第三行不变:
    • 第一行:
    ①+③×(-\frac12)
\begin{bmatrix}\begin{array}{c c c | c}1 & 0 & 0 & \frac92 \\ 0 & 1 & 0 & \frac12 \\ 0 & 0 & 1 & 0 \end{array}\end{bmatrix}

矩阵变换到这里,就可以直接“读”出解了。在这里我们得到了一种特殊的矩阵(去掉常数项):

\begin{bmatrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}

这个矩阵称为单位矩阵

定义 主对角线元素都是1,其他元素都为0的矩阵,称为单位矩阵。通常用符号

\mathbf I

表示。 ”

在上述计算过程中,将最初的矩阵(增广矩阵),经过一系列变换,最终得到了阶梯形矩阵,乃至于还能得到单位矩阵,这个变换的过程称为矩阵的初等行变换

★对矩阵反复施行以下三种变换:

  1. 把某一行的倍数加到另一行上;
  2. 两行位置互换;
  3. 用一个非零数乘以某一行。

这三种变换称为矩阵的初等行变换。 ”

显然,求解线性方程组,即写出其增广矩阵,然后通过初等行变换化成阶梯形矩阵(包括最终的单位矩阵),从而得到原线性方程组的解。这种方法称为高斯(Gauss)消元法

★任意一个矩阵都可以通过一系列的初等行变换化成阶梯形矩阵。 ”

正如你所知,线性方程组的系数和常数项为有理数时,线性方程组的解有三种可能:无解、有唯一解、有无穷多个解。

n

元线性方程组(即含有

n

个未知量的线性方程组)的增广矩阵经过初等行变换化成阶梯形矩阵:

  • 若阶梯形矩阵形如:
\begin{bmatrix}0 & 0 & 0 & ... 0 & b\end{bmatrix},b≠0

,则原方程组无解。

  • 否则,有解:
    • 若阶梯形矩阵的非零行数(用
    r

    表示)等于未知量的数,即

    r=n

    ,则原方程组有唯一解;

    • 若$r

以上简要说明了利用矩阵求解线性方程组的方法,当然,这种方法是用手工计算完成的。那么,利用计算机程序如何实现?Numpy是机器学习的基础库,它提供了一种途径。

代码语言:javascript
复制
import numpy as np

A = np.mat("-1 3 -5; 2 -2 4;1 3 0")    # 系数矩阵
b = np.mat("-3 8, 6").T                # 常数项矩阵

r = np.linalg.solve(A,b)               # 调用 solve 函数求解
print(r)

输出结果为:

代码语言:javascript
复制
[[ 4.5]
 [ 0.5]
 [-0. ]]

此结果中的三项依次对应为

x_1, x_2, x_3

的结果。

但是,如果要利用上述方法求解下面的线性方程组:

\begin{cases}x_1+3x_2-4x_3+2x_4=0\\3x_1-x_2+2x_3-x_4=0\\-2x_1+4x_2-x_3+3x_4= 0\\3x_1+9x_2-7x_3+6x_4=0\end{cases}

会得到如下的解:

代码语言:javascript
复制
A = np.mat("1 3 -4 2;3 -1 2 -1;-2 4 -1 3;3 0 -7 6")
b = np.mat("0 0 0 0").T

r = np.linalg.solve(A, b)
print(r)

# 输出结果
[[ 0.]
 [ 0.]
 [-0.]
 [ 0.]]

观察线性方程组,如果各个变量的值都是0,此线性方程组成立。

不妨对线性方程组的系数矩阵经过初等行变换化成阶梯形矩阵:

\begin{bmatrix}1 & 3 & -4 & 2 \\ 3 & -1 & 2 & -1 \\ -2 & 4 & -1 & 3 \\3 & 9 & -7 & 6 \end{bmatrix} \to \begin{bmatrix}1 & 0 & 0 & -\frac{1}{10}\\0 & 1 & 0 & \frac{7}{10}\\ 0 & 0 & 1 & 0 \\0 & 0 & 0 & 0\end{bmatrix}

观察阶梯形矩阵可知,原线性方程组有解,且$r=3,n=4,r

\begin{cases}x_1=\frac{1}{10}x_4\\x_2=-\frac{7}{10}x_4\\x_3= 0\end{cases}

这个解称为原线性方程组的一般解,其中

x_4

称为自由变量。

那么,如果通过程序,是否可以求得一般解?

代码语言:javascript
复制
from sympy import *
from sympy.solvers.solveset import linsolve
x1, x2, x3, x4 = symbols("x1 x2 x3 x4")
linsolve([x1 + 3*x2 - 4*x3 + 2*x4, 3*x1 - x2 + 2*x3 - x4, -2*x1 + 4*x2 - x3 + 3*x4, 3*x1 +9*x2 - 7*x3 + 6*x4], (x1, x2, x3, x4))

输出结果:

\{(\frac{x_4}{10}, -\frac{7x_4}{10}, 0, x_4)\}

用未知量表示,即为:

\begin{cases}x_1 = \frac{x_4}{10} \\ x_2 = -\frac{7x_4}{10} \\ x_3 = 0 \\ x_4 = x_4\end{cases}

此结果与上述运用初等行变换手工计算结果一样。

关于使用SymPy求解线性方程组的详细说明,请参阅文档:https://docs.sympy.org/latest/index.html。

从上述计算中可知,为了求解线性方程组,引入了矩阵——这项工作是19世纪英国数学家凯利发起的,自此之后,不仅形成了以矩阵为研究对象的数学分支,矩阵在电路、力学、量子力学、计算机科学等领域亦有广泛应用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老齐教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档