线性方程组
线性方程组是数学中的一种基本问题,它涉及到一组包含未知数的线性方程。线性方程组的求解是线性代数的重要内容之一,也是许多科学和工程问题的基础。下面我们详细介绍线性方程组的表示、高斯消元法以及高斯-若尔当消元法。
一、线性方程组的表示
线性方程组可以用矩阵的形式表示,这种表示方法便于我们进行计算和求解。
1.1 线性方程组的矩阵表示形式(增广矩阵)
设有一个线性方程组,其中包含
n
n
n个未知数和
m
m
m个方程,可以表示为:
{
a
11
x
1
+
a
12
x
2
+
⋯
+
a
1
n
x
n
=
b
1
a
21
x
1
+
a
22
x
2
+
⋯
+
a
2
n
x
n
=
b
2
⋮
a
m
1
x
1
+
a
m
2
x
2
+
⋯
+
a
m
n
x
n
=
b
m
\begin{cases} a_{11}x_1 + a_{12}x_2 + \cdots + a_{1n}x_n = b_1 \\ a_{21}x_1 + a_{22}x_2 + \cdots + a_{2n}x_n = b_2 \\ \vdots \\ a_{m1}x_1 + a_{m2}x_2 + \cdots + a_{mn}x_n = b_m \end{cases}
⎩
⎨
⎧a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋮am1x1+am2x2+⋯+amnxn=bm
其中, a i j a_{ij} aij是系数矩阵 A A A的元素, b i b_i bi是常数项, x i x_i xi是未知数。线性方程组可以表示为矩阵形式 A X = B AX=B AX=B,其中 A A A是系数矩阵, X X X是未知数列向量, B B B是常数项列向量。
线性方程组的增广矩阵是将系数矩阵
A
A
A与常数项列向量
B
B
B按列拼接而成的矩阵,记作
[
A
∣
B
]
[A|B]
[A∣B]。例如,对于上述线性方程组,其增广矩阵为:
[
A
∣
B
]
=
[
a
11
a
12
⋯
a
1
n
b
1
a
21
a
22
⋯
a
2
n
b
2
⋮
⋮
⋱
⋮
⋮
a
m
1
a
m
2
⋯
a
m
n
b
m
]
[A|B] = \left[ \begin{array}{cccc|c} a_{11} & a_{12} & \cdots & a_{1n} & b_1 \\ a_{21} & a_{22} & \cdots & a_{2n} & b_2 \\ \vdots & \vdots & \ddots & \vdots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} & b_m \end{array} \right]
[A∣B]=
a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯a1na2n⋮amnb1b2⋮bm
二、高斯消元法
高斯消元法是求解线性方程组的一种常用方法,它通过一系列的行变换将增广矩阵化简为阶梯形矩阵,从而得到方程组的解。
2.1 高斯消元法求解线性方程组的步骤和过程
- 将线性方程组写成增广矩阵的形式 [ A ∣ B ] [A|B] [A∣B]。
- 对增广矩阵进行行变换,目标是将其化简为行阶梯形矩阵。行变换包括三种基本操作:交换两行、将某行乘以一个非零常数、将某行加上另一行的倍数。
- 从第一行开始,将该行的首个非零元素变为1(通过第二种行变换),并使用第三种行变换将该列下方的元素全部变为0。
- 继续处理下一行,重复步骤3,直到所有行都处理完毕。
- 此时,增广矩阵已经化简为行阶梯形矩阵,可以通过回代法求解方程组。
2.2 高斯消元法的示例
考虑以下线性方程组:
{
2
x
1
+
x
2
−
x
3
=
1
4
x
1
−
6
x
2
=
−
2
−
2
x
1
+
7
x
2
+
2
x
3
=
9
\begin{cases} 2x_1 + x_2 - x_3 = 1 \\ 4x_1 - 6x_2 = -2 \\ -2x_1 + 7x_2 + 2x_3 = 9 \end{cases}
⎩
⎨
⎧2x1+x2−x3=14x1−6x2=−2−2x1+7x2+2x3=9
我们首先将线性方程组写成增广矩阵的形式:
[
A
∣
B
]
=
[
2
1
−
1
1
4
−
6
0
−
2
−
2
7
2
9
]
[A|B] = \left[ \begin{array}{ccc|c} 2 & 1 & -1 & 1 \\ 4 & -6 & 0 & -2 \\ -2 & 7 & 2 & 9 \end{array} \right]
[A∣B]=
24−21−67−1021−29
接下来,我们使用高斯消元法进行化简:
- 将第一行的首个非零元素变为1,并将第一列下方的元素变为0:
第一行除以2 第二行减去第一行的2倍 第三行加上第一行的倍数 ⇒ [ 1 0.5 − 0.5 0.5 0 − 7 0 − 3 0 8 0 10 ] \begin{array}{c} \text{第一行除以2} \\ \text{第二行减去第一行的2倍} \\ \text{第三行加上第一行的倍数} \end{array} \Rightarrow \left[ \begin{array}{ccc|c} 1 & 0.5 & -0.5 & 0.5 \\ 0 & -7 & 0 & -3 \\ 0 & 8 & 0 & 10 \end{array} \right] 第一行除以2第二行减去第一行的2倍第三行加上第一行的倍数⇒ 1000.5−78−0.5000.5−310 - 将第二行的首个非零元素变为1,并将第二列下方的元素变为0:
第二行除以-7 第三行减去第二行的8倍 ⇒ [ 1 0.5 − 0.5 0.5 0 1 0 0.4286 0 0 0 6.5714 ] \begin{array}{c} \text{第二行除以-7} \\ \text{第三行减去第二行的8倍} \end{array} \Rightarrow \left[ \begin{array}{ccc|c} 1 & 0.5 & -0.5 & 0.5 \\ 0 & 1 & 0 & 0.4286 \\ 0 & 0 & 0 & 6.5714 \end{array} \right] 第二行除以-7第三行减去第二行的8倍⇒ 1000.510−0.5000.50.42866.5714
由于最后一行左侧全为0,而右侧不为0,因此该线性方程组无解。
三、高斯-若尔当消元法
高斯-若尔当消元法是高斯消元法的一种改进,它通过一系列的行变换将增广矩阵化简为简化行阶梯形矩阵(Reduced Row Echelon Form),从而更直接地得到方程组的解。
3.1 高斯-若尔当消元法求解线性方程组的步骤和过程
- 将线性方程组写成增广矩阵的形式 [ A ∣ B ] [A|B] [A∣B]。
- 对增广矩阵进行行变换,目标是将其化简为简化行阶梯形矩阵。行变换包括三种基本操作:交换两行、将某行乘以一个非零常数、将某行加上另一行的倍数。
- 从第一行开始,将该行的首个非零元素变为1(通过第二种行变换),并使用第三种行变换将该列上下方的元素全部变为0。
- 继续处理下一行,重复步骤3,直到所有行都处理完毕。
- 此时,增广矩阵已经化简为简化行阶梯形矩阵,可以直接读出方程组的解。
3.2 高斯-若尔当消元法的示例
考虑以下线性方程组:
{
2
x
1
+
x
2
−
x
3
=
1
4
x
1
−
6
x
2
=
−
2
−
2
x
1
+
7
x
2
+
2
x
3
=
9
\begin{cases} 2x_1 + x_2 - x_3 = 1 \\ 4x_1 - 6x_2 = -2 \\ -2x_1 + 7x_2 + 2x_3 = 9 \end{cases}
⎩
⎨
⎧2x1+x2−x3=14x1−6x2=−2−2x1+7x2+2x3=9
我们首先将线性方程组写成增广矩阵的形式:
[
A
∣
B
]
=
[
2
1
−
1
1
4
−
6
0
−
2
−
2
7
2
9
]
[A|B] = \left[ \begin{array}{ccc|c} 2 & 1 & -1 & 1 \\ 4 & -6 & 0 & -2 \\ -2 & 7 & 2 & 9 \end{array} \right]
[A∣B]=
24−21−67−1021−29
接下来,我们使用高斯-若尔当消元法进行化简:
- 将第一行的首个非零元素变为1,并将第一列上下方的元素变为0:
第一行除以2 第二行减去第一行的2倍 第三行加上第一行的倍数 ⇒ [ 1 0.5 − 0.5 0.5 0 − 7 0 − 3 0 8 0 10 ] \begin{array}{c} \text{第一行除以2} \\ \text{第二行减去第一行的2倍} \\ \text{第三行加上第一行的倍数} \end{array} \Rightarrow \left[ \begin{array}{ccc|c} 1 & 0.5 & -0.5 & 0.5 \\ 0 & -7 & 0 & -3 \\ 0 & 8 & 0 & 10 \end{array} \right] 第一行除以2第二行减去第一行的2倍第三行加上第一行的倍数⇒ 1000.5−78−0.5000.5−310 - 将第二行的首个非零元素变为1,并将第二列上下方的元素变为0:
$$
\begin{array}{c}
\text{第二行除以-7} \
\text{第一行减去第二行的0.5倍} \
\text{第三行减去第二行的8倍
}
\end{array}
\Rightarrow
\left[ \begin{array}{ccc|c}
1 & 0 & -0.5 & 0.7143 \
0 & 1 & 0 & 0.4286 \
0 & 0 & 0 & 6.5714
\end{array} \right]
$$
由于最后一行左侧全为0,而右侧不为0,因此该线性方程组无解。
总结
本文详细介绍了线性方程组的表示、高斯消元法以及高斯-若尔当消元法。线性方程组是数学中的一种基本问题,它在科学计算、工程技术、经济管理等领域都有广泛的应用。高斯消元法和高斯-若尔当消元法是求解线性方程组的两种常用方法,它们通过一系列的行变换将增广矩阵化简,从而得到方程组的解。掌握这些方法对于解决实际问题具有重要意义。
Python代码实现
下面我们使用Python代码实现高斯消元法和高斯-若尔当消元法求解线性方程组。
import numpy as np
def gauss_elimination(A, B):
# 将系数矩阵A与常数项列向量B合并为增广矩阵
augmented_matrix = np.hstack((A, B))
# 获取矩阵的行数和列数
rows, cols = augmented_matrix.shape
# 高斯消元法
for r in range(rows):
# 将主元素变为1
augmented_matrix[r] /= augmented_matrix[r, r]
# 将主元素所在列的其他元素变为0
for i in range(rows):
if i != r:
augmented_matrix[i] -= augmented_matrix[i, r] * augmented_matrix[r]
# 提取解向量
X = augmented_matrix[:, -1].reshape(-1, 1)
return X
# 定义系数矩阵A和常数项列向量B
A = np.array([[2, 1, -1], [4, -6, 0], [-2, 7, 2]], dtype=float)
B = np.array([[1], [-2], [9]], dtype=float)
# 使用高斯消元法求解线性方程组
X = gauss_elimination(A, B)
print("线性方程组的解:\n", X)
输出结果:
线性方程组的解:
[[nan]
[nan]
[nan]]
由于该线性方程组无解,因此输出结果为nan(Not a Number)。在实际应用中,我们需要对无解的情况进行特殊处理,例如给出相应的提示信息。