非齐次线性方程组解集结构
小象实战讲义 · 人工智能数学基础
在上一节中,我们深入探讨了齐次线性方程组 Ax=0 的解空间结构,并掌握了如何求解其基础解系。本节我们将目光转向更一般的非齐次线性方程组 Ax=b。我们将揭示其解集与对应齐次方程组解空间之间的深刻联系——一种“平移”关系,并最终给出求解非齐次方程组通解的完整方法。掌握这一结构,是理解线性方程组理论、乃至后续学习矩阵秩与线性空间理论的关键。
💡 核心导读
本节你将掌握:
- 平移关系:非齐次方程组的两个解之差,是其导出组(对应齐次方程组)的解;一个特解加上导出组的解,仍是非齐次方程组的解。
- 解集结构定理:非齐次方程组 Ax=b 的解集 U,等于它的一个特解 γ0 加上其导出组 Ax=0 的解空间 W,即 U=γ0+W。
- 求解通解的三步法:通过高斯消元法(初等行变换)同时求得特解与导出组的基础解系,最终组合得到通解。
- 几何直观:解空间 W 是一个通过原点的线性空间(子空间),而非齐次方程组的解集 U 则是该空间整体平移一个特解向量 γ0 后得到的“仿射空间”。
从齐次到非齐次:解的平移关系
考虑数域 K 上的线性方程组: Ax=b(方程组1) 其中 A 是 m×n 矩阵,b∈Km 且 b=0。我们称 Ax=b 为非齐次线性方程组。
与之对应,我们称方程组 Ax=0(方程组2) 为方程组1的导出组(或对应的齐次线性方程组)。
设方程组1的解集为 U,方程组2的解空间为 W。它们之间存在两个简单而重要的性质:
性质1: 若 γ,δ∈U 是非齐次方程组的两个解,则它们的差 γ−δ∈W,即是对应齐次方程组的解。 证明:因为 Aγ=b 且 Aδ=b,两式相减得 A(γ−δ)=b−b=0,故 γ−δ 满足 Ax=0。
性质2: 若 γ0∈U 是非齐次方程组的一个解(称为特解),η∈W 是导出组的任意一个解,则 γ0+η∈U,即它们的和仍是非齐次方程组的解。 证明:A(γ0+η)=Aγ0+Aη=b+0=b。
这两个性质揭示了非齐次方程组解集与齐次方程组解空间之间的一种“平移”关系:从任意一个特解出发,加上导出组解空间中的任意向量,就能得到非齐次方程组的另一个解。
解集结构定理
基于上述平移关系,我们可以精确描述非齐次线性方程组解集的结构。
定理(非齐次线性方程组解集结构): 设非齐次线性方程组 Ax=b 有解,γ0 是它的一个特解,W 是其导出组 Ax=0 的解空间。则 Ax=b 的解集 U 为: U=γ0+W={γ0+η∣η∈W}.
证明: 我们证明两个集合 U 和 γ0+W 相等。
证明 γ0+W⊆U: 任取 γ0+η∈γ0+W,其中 η∈W。根据上述第二个性质,γ0+η 是 Ax=b 的解,故 γ0+η∈U。因此 γ0+W 是 U 的子集。
证明 U⊆γ0+W: 任取 γ∈U。考虑向量 γ−γ0。根据上述第一个性质,γ−γ0∈W。因此,存在 η=γ−γ0∈W,使得 γ=γ0+η。这意味着 γ∈γ0+W。因此 U 是 γ0+W 的子集。
综上,U=γ0+W。
几何意义:解空间 W 是一个通过原点的线性子空间(直线、平面或更高维空间)。非齐次方程组的解集 U 则是将这个子空间整体平移一个特解向量 γ0 后得到的集合,它不再通过原点,我们称之为仿射空间。
求解方法与示例
根据定理,求解非齐次线性方程组 Ax=b 的通解,可以归结为以下三步:
- 求特解 γ0:对增广矩阵 (A∣b) 进行初等行变换,化为行最简形,然后令所有自由未知量为 0,解出主未知量的值,即得到一个特解。
- 求导出组 Ax=0 的基础解系,从而得到其解空间 W。这只需在第一步的行最简形矩阵中,忽略常数列 b,直接对系数部分写出齐次方程的一般解并赋值得到基础解系。
- 写出通解:将特解与导出组的通解(基础解系的线性组合)相加。
示例(无解情形):求解非齐次线性方程组 ⎩⎨⎧x1+2x2+3x3+4x4=5,2x1+3x2+4x3+5x4=1,3x1+4x2+5x3+6x4=2.
第一步:求特解 γ0。 写出增广矩阵并作初等行变换: (A∣b)=123234345456512r2−2r1r3−3r11002−1−23−2−44−3−65−9−13−r2r3−2r2100210320430595r1−2r2, r3×51100010−120−230−1391r2−9r3r1+13r3100010−120−230001 最后一行对应矛盾方程 0=1。此时系数矩阵的秩 r(A)=2,而增广矩阵的秩 r(A∣b)=3,两者不等,故原方程组无解。
import numpy as np
# 定义系数矩阵A和常数向量b
A = np.array([[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6]], dtype=float)
b = np.array([5, 1, 2], dtype=float)
# 构造增广矩阵
Ab = np.column_stack((A, b))
print("增广矩阵 (A|b):")
print(Ab)
# 进行初等行变换(手动步骤的numpy验证)
# 第一步:r2 = r2 - 2*r1, r3 = r3 - 3*r1
Ab[1] = Ab[1] - 2 * Ab[0]
Ab[2] = Ab[2] - 3 * Ab[0]
print("\n第一步消元后:")
print(Ab)
# 第二步:r2 = -r2
Ab[1] = -Ab[1]
print("\n第二步,r2取反后:")
print(Ab)
# 第三步:r3 = r3 - 2*r2
Ab[2] = Ab[2] - 2 * Ab[1]
print("\n第三步,r3 = r3 - 2*r2后:")
print(Ab)
# 检查秩
rank_A = np.linalg.matrix_rank(A)
rank_Ab = np.linalg.matrix_rank(Ab)
print(f"\n系数矩阵A的秩: {rank_A}")
print(f"增广矩阵(A|b)的秩: {rank_Ab}")
if rank_A == rank_Ab:
print("方程组有解。")
if rank_A < A.shape[1]:
print("方程组有无穷多解。")
else:
print("方程组有唯一解。")
else:
print("方程组无解。")
运行上述代码,我们发现系数矩阵 A 的秩为 2,增广矩阵 (A∣b) 的秩为 3,两者不等,故原方程组无解。这个例子正好演示了无解情形的判定方法。接下来再看一个有唯一解的例子。
示例(唯一解情形):求解非齐次线性方程组 ⎩⎨⎧x1+2x2+3x3=2,2x1+3x2+4x3=3,3x1+4x2+6x3=5.
第一步:求特解 γ0。 对增广矩阵 (A∣b) 进行初等行变换: (A∣b)=123234346235r2−2r1r3−3r11002−1−23−2−32−1−1−r210021−232−321−1r1−2r2r3+2r2100010−121011r1+r3r2−2r31000100011−11 得到行最简形。对应方程组为: ⎩⎨⎧x1=1,x2=−1,x3=1. 这里系数矩阵满秩(秩等于未知量个数 3),方程组有唯一解 γ0=(1,−1,1)T,代入原方程组三个等式均成立。唯一解情形没有自由未知量,不存在通解结构问题。为了完整演示”特解 + 齐次通解”的结构,最后看一个有无穷多解的例子。
示例(无穷多解情形):求解 {x1+2x2−x3=1,2x1+3x2+x3=5.
第一步:求特解 γ0。 (A∣b)=(1223−1115)r2−2r1(102−1−1313)−r2(1021−1−31−3)r1−2r2(10015−37−3) 得到行最简形。对应方程: {x1+5x3=7,x2−3x3=−3. 令自由未知量 x3=0,则得特解 γ0=(7,−3,0)T。
第二步:求导出组的基础解系。 导出组为 Ax=0,其系数矩阵的行最简形即上面矩阵去掉常数列: (10015−3) 对应齐次方程: {x1+5x3=0,x2−3x3=0. 令自由未知量 x3=1,解得 x1=−5,x2=3。故基础解系包含一个向量:ξ1=(−5,3,1)T。导出组的解空间 W={k1ξ1∣k1∈K}。
第三步:写出通解。 原非齐次方程组的通解为: x=γ0+k1ξ1=7−30+k1−531,k1∈K.
📝 动手练一练
求解非齐次方程组: 已知非齐次方程组 Ax=b 的增广矩阵经行变换后为: 1000102−10310 请写出该非齐次方程组的通解。(提示:先求特解,再对系数部分求导出组的基础解系,注意 n−r 的值。)
参考答案: 从增广矩阵可得:x1=3−2x3, x2=1+x3。令自由未知量 x3=0,得特解 γ0=(3,1,0)T。 导出组满足 x1=−2x3, x2=x3。这里未知量个数 n=3,系数矩阵秩 r=2(非零行个数),故基础解系含 n−r=1 个向量。令 x3=1,得基础解系 ξ1=(−2,1,1)T(验证:Aξ1=(−2+2, 1−1)T=0)。 通解为:x=310+k1−211,k1∈K。
验证解的结构:对于上面的示例通解,编写一段 Python 代码,随机生成多组 k1 的值,计算对应的 x,并验证它们是否都满足原方程组 Ax=b(你需要从增广矩阵还原出 A 和 b)。
import numpy as np
# 从增广矩阵还原 A 和 b
A = np.array([[1, 0, 2],
[0, 1, -1]])
b = np.array([3, 1])
# 特解和基础解系
gamma0 = np.array([3, 1, 0])
xi1 = np.array([-2, 1, 1])
# 随机生成5组系数验证
np.random.seed(42)
for _ in range(5):
k1 = np.random.randn() # 生成一个随机数
x = gamma0 + k1*xi1
residual = A @ x - b # 计算 Ax - b
print(f"k1={k1:.2f}, x={x}, A*x-b={residual}")
# 验证残差是否接近零向量(考虑浮点误差)
assert np.allclose(residual, np.zeros_like(b)), "解不满足方程!"
print("所有随机生成的解均验证通过。")
本章小结
本节我们建立了非齐次线性方程组解集的完整理论框架:
要点回顾:
- 核心关系:非齐次方程组的两个解之差是导出组的解;非齐次方程组的特解加导出组的解仍是非齐次方程组的解。
- 结构定理:若 Ax=b 有解,则其解集 U 等于一个特解 γ0 加上导出组解空间 W 的平移,即 U=γ0+W。这解释了为何通解形式为“特解+齐次通解”。
- 求解通解三步法:化增广矩阵为行最简形 → 求特解 → 求导出组基础解系 → 组合得通解。
行动清单:
- 理解平移:面对一个非齐次方程组,首先在几何上想象其解集是对应齐次解空间(过原点的平面/直线等)的一个平移。
- 规范求解:在解题时,严格按照“增广矩阵行变换 → 特解 → 基础解系 → 通解”的步骤书写,确保逻辑清晰。
- 代码验证:对于求出的通解,可以像练习中那样,用代码随机生成参数并验证解的正确性,这是检验计算和理解的有效手段。
— 小象教研组