← 返回《人工智能数学基础》
📑 查看全课大纲(第 64 / 93 节)
  1. 1.概论和集合的定义
  2. 2.逼疯康托的实数集理论
  3. 3.常用不等式与映射
  4. 4.函数及特殊函数
  5. 5.序列极限的定义
  6. 6.序列极限的性质与夹逼定理
  7. 7.重要极限
  8. 8.无穷小量,无穷大量和一组重要的阶的比较关系
  9. 9.聚点原理
  10. 10.函数极限及其性质
  11. 11.重要极限与等价无穷小
  12. 12.连续函数
  13. 13.导数的概念(那些年,扛起牛顿的胡克)
  14. 14.定义法求导
  15. 15.函数四则运算的导数与反函数求导法则
  16. 16.复合函数,隐函数,参数式求导
  17. 17.不定式求导之“洛必达与伯努利的师生情”
  18. 18.一阶微分
  19. 19.高阶导数
  20. 20.高阶微分
  21. 21.罗尔中值定理与拉格朗日中值定理
  22. 22.柯西空降科学院遭排挤
  23. 23.泰勒公式与泰勒的克妻属性
  24. 24.利用泰勒展开唯一性定理计算泰勒展开
  25. 25.泰勒公式的余项估计
  26. 26.极值问题与导数
  27. 27.函数凹凸性
  28. 28.无卵用的渐近线与函数作图
  29. 29.不定积分的定义
  30. 30.第一换元法
  31. 31.第二换元法
  32. 32.分部积分法
  33. 33.有理式积分
  34. 34.三角替换
  35. 35.定积分的概念
  36. 36.定积分的性质与积分中值定理
  37. 37.变上限定积分
  38. 38.微积分基本定理之“高斯教你如何优雅地装逼”
  39. 39.定积分的换元法
  40. 40.奇偶函数与周期函数的定积分
  41. 41.曲线求长与不可求长曲线(海岸线居然算不出长度?)
  42. 42.旋转体体积
  43. 43.旋转体侧面积
  44. 44.极坐标下图形的面积(数学系常用表白曲线)
  45. 45.欧式空间
  46. 46.点列极限,开集与闭集
  47. 47.多元函数的定义
  48. 48.多元函数的极限
  49. 49.多元连续函数
  50. 50.一阶偏导数
  51. 51.高阶偏导数
  52. 52.全微分
  53. 53.方向导数与梯度
  54. 54.链式法则
  55. 55.一阶全微分形式的不变性与高阶微分
  56. 56.多元函数的泰勒公式
  57. 57.隐函数存在定理与逆映射存在定理
  58. 58.多元函数的极值
  59. 59.矩阵基础知识
  60. 60.行列式的定义与特殊矩阵的行列式
  61. 61.行列式的性质
  62. 62.行列式按k行展开
  63. 63.线性方程组初步与高斯消元法
  64. 64.齐次线性方程组与Cramer法则
  65. 65.线性空间
  66. 66.线性相关与线性无关
  67. 67.向量组的秩
  68. 68.矩阵的秩与线性方程组有解的充要条件
  69. 69.齐次线性方程组的解集结构
  70. 70.非齐次线性方程组解集结构
  71. 71.基与维数
  72. 72.矩阵的乘法
  73. 73.特殊矩阵
  74. 74.矩阵乘积的秩与行列式
  75. 75.矩阵的逆
  76. 76.正交矩阵
  77. 77.矩阵对角化与特征值特征向量
  78. 78.实对称矩阵对角化
  79. 79.二次型与正定矩阵
  80. 80.LU分解
  81. 81.Cholesky分解
  82. 82.SVD分解
  83. 83.线搜索
  84. 84.步长
  85. 85.最速下降法和牛顿法
  86. 86.共轭梯度法
  87. 87.拟牛顿法
  88. 88.无约束优化
  89. 89.若干知识点补充(一)
  90. 90.若干知识点补充(二)
  91. 91.凸优化问题
  92. 92.对偶问题(一)
  93. 93.对偶问题(二)

齐次线性方程组与Cramer法则

约 13 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

齐次线性方程组与Cramer法则

小象实战讲义 · 人工智能数学基础

在学习了线性方程组的一般解法(高斯消元法)后,我们常常会遇到一类特殊的方程组——常数项全为零的齐次线性方程组。它在人工智能的诸多领域,如求解特征向量、分析网络结构零空间时都扮演着关键角色。本节将深入探讨齐次线性方程组的解的结构,并引入一个在理论上极其优美、将方程组解与行列式直接联系起来的工具——Cramer法则。学完本节,你将能快速判断齐次方程组是否有非零解,并理解行列式如何决定一个方阵方程组解的唯一性。

💡 核心导读

  • 齐次线性方程组的定义与解的特性:常数项全为零的方程组,必定有零解,核心在于判断是否存在非零解。
  • 非零解的判定准则:利用高斯消元法得到的系数矩阵的秩 r 与未知数个数 n 的关系:r < n 时必有非零解(无穷多解)。
  • Cramer法则的引入前提:仅适用于方程个数等于未知数个数的方阵线性方程组。
  • 行列式的决定性作用:系数矩阵的行列式 |A| ≠ 0 是方程组有唯一解(对于非齐次)或仅有零解(对于齐次)的充要条件。
  • Cramer法则的公式与评价:理论上给出了解的显式行列式表达式,但因其计算复杂度高,在实际数值计算中并不常用,其核心价值在于理论判断。

齐次线性方程组:定义与基本性质

一个包含 s 个方程、n 个未知数的线性方程组,如果其每个方程右端的常数项都为零,则称其为 n 元齐次线性方程组。其一般形式为: {a11x1+a12x2++a1nxn=0a21x1+a22x2++a2nxn=0as1x1+as2x2++asnxn=0\begin{cases} a_{11}x_1 + a_{12}x_2 + \cdots + a_{1n}x_n = 0 \ a_{21}x_1 + a_{22}x_2 + \cdots + a_{2n}x_n = 0 \ \vdots \ a_{s1}x_1 + a_{s2}x_2 + \cdots + a_{sn}x_n = 0 \end{cases} 用矩阵形式可简洁地表示为: Ax=0A\mathbf{x} = \mathbf{0} 其中,AAs×ns \times n 的系数矩阵,x=(x1,x2,,xn)T\mathbf{x} = (x_1, x_2, \dots, x_n)^T 是未知数列向量,0\mathbf{0} 是零向量。

齐次方程组的一个显著性质是它必定有解。因为将所有未知数取为零,即 x=0\mathbf{x} = \mathbf{0},必然满足所有方程。这个解称为 零解平凡解

因此,对于齐次方程组 Ax=0A\mathbf{x} = \mathbf{0},我们关心的核心问题不再是“有没有解”,而是 “除了零解之外,还有没有其他解?”。这些其他解被称为 非零解

根据线性方程组解的一般理论(回顾高斯消元法),线性方程组的解只可能有三种情况:无解、有唯一解、有无穷多解。对于齐次方程组,既然零解已经是一个解,那么“无解”的情况就被排除了。所以,齐次方程组的解只可能是:

  1. 仅有零解(唯一解)
  2. 有无穷多解(即存在非零解)

判断属于哪种情况,我们依然可以依靠高斯消元法。将系数矩阵 AA 通过初等行变换化为行阶梯形矩阵,设其非零行的个数(即矩阵的秩)为 rr

  • r=nr = n,则方程组有唯一解,即零解。
  • r<nr < n,则方程组有无穷多解,即存在非零解。

一个特别简单且常用的推论是:如果齐次线性方程组中,方程的个数 ss 小于未知数的个数 nn,则它一定有非零解。 因为行阶梯形矩阵的非零行个数 rr 不可能超过方程个数 ss,即 rs<nr \le s < n,必然满足 r<nr < n 的条件。

Cramer法则:行列式与方程组的桥梁

当线性方程组满足一个特殊条件——方程的个数等于未知数的个数(即 s=ns = n)时,系数矩阵 AA 是一个 n×nn \times n 的方阵。此时,我们可以引入一个强大的工具:行列式。

行列式与解的唯一性

考虑一般的 nn 元线性方程组 Ax=bA\mathbf{x} = \mathbf{b},其中 AAn×nn \times n 方阵,b\mathbf{b} 是常数项列向量。其解的存在性与唯一性,与系数矩阵 AA 的行列式 det(A)\det(A)(也记作 A|A|)有着直接而深刻的联系。

定理(Cramer法则的前提):对于 nn 个方程的 nn 元线性方程组 Ax=bA\mathbf{x} = \mathbf{b},其有唯一解的 充要条件 是系数矩阵的行列式 det(A)0\det(A) \neq 0

逻辑推导

  1. 对系数矩阵 AA 进行初等行变换,将其化为行阶梯形矩阵 JJ
  2. 回顾行列式性质:对矩阵做一次初等行变换,其行列式要么不变,要么反号,要么乘以一个非零常数。因此,变换前后的行列式只差一个非零因子 lldet(J)=ldet(A)\det(J) = l \cdot \det(A),且 l0l \neq 0
  3. 关键点在于:det(A)\det(A) 是否为零,直接决定了 det(J)\det(J) 是否为零。
    • det(A)0\det(A) \neq 0,则 det(J)0\det(J) \neq 0。对于一个方阵 JJ,若其行列式非零,则其行阶梯形不可能出现全零行(否则行列式为0)。这意味着 JJnn 个非零行(r=nr = n),且必然是一个主对角线元素均非零的上三角矩阵。根据高斯消元法理论,此时方程组有唯一解。
    • det(A)=0\det(A) = 0,则 det(J)=0\det(J) = 0。这意味着行阶梯形矩阵 JJ 中至少有一行全为零(r<nr < n)。此时,方程组要么无解(对于非齐次方程组,可能出现 0=d,d00 = d, d\neq 0 的矛盾),要么有无穷多解。

这个结论是Cramer法则的核心价值之一:通过计算一个行列式 det(A)\det(A) 是否为零,就能判断方阵线性方程组是否有唯一解。

Cramer法则的公式表述

det(A)0\det(A) \neq 0,从而方程组有唯一解的前提下,Cramer法则进一步给出了这个唯一解的具体表达式。

定理(Cramer法则):设 nn 元线性方程组 Ax=bA\mathbf{x} = \mathbf{b} 的系数矩阵 AA 的行列式 det(A)0\det(A) \neq 0,则方程组有唯一解,且其解为: x1=det(A1)det(A),x2=det(A2)det(A),,xn=det(An)det(A)x_1 = \frac{\det(A_1)}{\det(A)},\quad x_2 = \frac{\det(A_2)}{\det(A)},\quad \dots,\quad x_n = \frac{\det(A_n)}{\det(A)} 其中,矩阵 AjA_j 是将系数矩阵 AA 的第 jj 列用常数项列向量 b\mathbf{b} 替换后所得的 nn 阶方阵。

示例:对于二元方程组 {a11x1+a12x2=b1a21x1+a22x2=b2\begin{cases} a_{11}x_1 + a_{12}x_2 = b_1 \ a_{21}x_1 + a_{22}x_2 = b_2 \end{cases}det(A)=a11a12a21a220\det(A) = \begin{vmatrix} a_{11} & a_{12} \ a_{21} & a_{22} \end{vmatrix} \neq 0,则其解为: x1=b1a12b2a22det(A),x2=a11b1a21b2det(A).x_1 = \frac{\begin{vmatrix} b_1 & a_{12} \ b_2 & a_{22} \end{vmatrix}}{\det(A)},\quad x_2 = \frac{\begin{vmatrix} a_{11} & b_1 \ a_{21} & b_2 \end{vmatrix}}{\det(A)}.

Cramer法则的评价与应用场景

尽管Cramer法则在理论上非常优美,将解直接表示为行列式的商,但在实际数值计算中,尤其是当 nn 较大时,它并不是一个高效的算法

  • 计算复杂度高:计算一个 nn 阶行列式,即使使用优化的算法(如LU分解后求对角元乘积),其复杂度也在 O(n3)O(n^3) 量级。而用Cramer法则求解需要计算 n+1n+1nn 阶行列式,总复杂度约为 O(n4)O(n^4),远高于高斯消元法或LU分解法的 O(n3)O(n^3)
  • 数值稳定性问题:当矩阵接近奇异(det(A)\det(A) 接近零)时,行列式的计算会带来较大的数值误差。

因此,在科学计算和工程软件中,几乎不会使用Cramer法则来实际求解线性方程组。它的主要价值体现在:

  1. 理论分析:在证明定理或进行公式推导时,Cramer法则提供的显式表达式非常有用。
  2. 小型方程组(如n=2,3):可以直接套用公式,便于记忆和理解。
  3. 判断解的唯一性:计算 det(A)\det(A) 是否为零,是判断方阵方程组是否有唯一解(或齐次方程组是否仅有零解)的一个有效方法。

对于齐次方程组 Ax=0A\mathbf{x} = \mathbf{0},Cramer法则的推论尤为重要:齐次方程组 Ax=0A\mathbf{x} = \mathbf{0} 有非零解的充要条件是 det(A)=0\det(A) = 0 因为如果 det(A)0\det(A) \neq 0,根据上述定理,方程组有唯一解,而这个唯一解只能是零解。

import numpy as np

# 示例:验证Cramer法则与齐次方程组解的判断
# 定义一个3x3矩阵A
A = np.array([[1, 2, 3],
              [2, 5, 7],
              [3, 7, 10]], dtype=np.float64)

# 计算系数矩阵A的行列式
det_A = np.linalg.det(A)
print(f"系数矩阵A的行列式 det(A) = {det_A:.6f}")

# 情况1:非齐次方程组 A*x = b
b = np.array([6, 15, 21], dtype=np.float64)
print(f"\n1. 求解非齐次方程组 A*x = {b}")
if not np.isclose(det_A, 0):
    # 使用numpy的求解器(基于LU分解等高效算法)
    x_numpy = np.linalg.solve(A, b)
    print(f"   NumPy求解结果: x = {x_numpy}")
    
    # 使用Cramer法则验证(仅用于演示,效率低)
    n = A.shape[0]
    x_cramer = np.zeros(n)
    for j in range(n):
        Aj = A.copy()
        Aj[:, j] = b  # 将第j列替换为b
        x_cramer[j] = np.linalg.det(Aj) / det_A
    print(f"   Cramer法则验证: x = {x_cramer}")
    print(f"   两者是否接近: {np.allclose(x_numpy, x_cramer)}")
else:
    print("   行列式为0,Cramer法则不适用,可能无解或有无穷多解。")

# 情况2:对应的齐次方程组 A*x = 0
print(f"\n2. 分析齐次方程组 A*x = 0")
if np.isclose(det_A, 0):
    print(f"   因为 det(A) = {det_A:.6f} ≈ 0,所以齐次方程组存在非零解。")
    # 求解齐次方程组,即寻找零空间(null space)的非零向量
    # 使用奇异值分解(SVD)来找到零空间的一个基向量
    U, S, Vh = np.linalg.svd(A)
    # 零空间向量对应于奇异值为0的右奇异向量
    # 由于数值计算,奇异值可能非常小但不精确为0
    tolerance = 1e-10
    null_space = Vh[S <= tolerance]
    if len(null_space) > 0:
        x_null = null_space[0]  # 取一个零空间向量
        print(f"   一个非零解(零空间向量)示例: x = {x_null}")
        print(f"   验证 A * x 是否接近0: {np.allclose(A @ x_null, 0)}")
else:
    print(f"   因为 det(A) = {det_A:.6f} ≠ 0,所以齐次方程组仅有零解。")
    x_zero = np.zeros(A.shape[1])
    print(f"   唯一解是零向量: x = {x_zero}")

📝 动手练一练

  1. 判断齐次方程组解的情况
    判断下列齐次线性方程组是仅有零解,还是存在非零解(无穷多解)。不必求解。 {2x1x2+3x3=04x12x2+6x3=02x1+x23x3=0\begin{cases} 2x_1 - x_2 + 3x_3 = 0 \ 4x_1 - 2x_2 + 6x_3 = 0 \ -2x_1 + x_2 - 3x_3 = 0 \end{cases}

  2. 应用Cramer法则(小规模)
    利用Cramer法则求解下列线性方程组: {3x1+2x2=74x1+5x2=13\begin{cases} 3x_1 + 2x_2 = 7 \ 4x_1 + 5x_2 = 13 \end{cases}

参考答案:

  1. 判断齐次方程组解的情况
    观察三个方程,发现第二个方程是第一个方程的2倍,第三个方程是第一个方程的-1倍。因此,这三个方程本质上是同一个方程,有效方程个数为1,小于未知数个数3。根据“方程个数小于未知数个数的齐次方程组必有非零解”的推论,该方程组存在非零解(有无穷多解)
    严谨做法:写出系数矩阵并化简,可得秩 r=1<n=3r=1 < n=3,故有无穷多解。

  2. 应用Cramer法则(小规模)
    系数矩阵 A=(3245)A = \begin{pmatrix} 3 & 2 \ 4 & 5 \end{pmatrix},常数项 b=(713)\mathbf{b} = \begin{pmatrix} 7 \ 13 \end{pmatrix}
    计算行列式:det(A)=3×52×4=158=70\det(A) = 3\times5 - 2\times4 = 15 - 8 = 7 \neq 0
    构造 A1A_1A2A_2
    A1=(72135)A_1 = \begin{pmatrix} 7 & 2 \ 13 & 5 \end{pmatrix}det(A1)=7×52×13=3526=9\det(A_1) = 7\times5 - 2\times13 = 35 - 26 = 9
    A2=(37413)A_2 = \begin{pmatrix} 3 & 7 \ 4 & 13 \end{pmatrix}det(A2)=3×137×4=3928=11\det(A_2) = 3\times13 - 7\times4 = 39 - 28 = 11
    根据Cramer法则:
    x1=det(A1)/det(A)=9/7x_1 = \det(A_1) / \det(A) = 9 / 7
    x2=det(A2)/det(A)=11/7x_2 = \det(A_2) / \det(A) = 11 / 7
    故方程组的解为 x1=97,x2=117x_1 = \frac{9}{7}, x_2 = \frac{11}{7}

本章小结

本节我们聚焦于线性方程组中两个紧密相连的重要专题:齐次线性方程组和Cramer法则。

要点回顾:

  • 齐次线性方程组 Ax=0A\mathbf{x} = \mathbf{0} 必定有零解。其核心问题是判断非零解的存在性。
  • 非零解存在的充要条件是系数矩阵的秩 rr 小于未知数个数 nn。一个快速推论是:当方程个数少于未知数个数时,必有非零解。
  • Cramer法则适用于方程个数等于未知数个数的方阵方程组。它指出:
    1. 判定条件:方程组 Ax=bA\mathbf{x} = \mathbf{b} 有唯一解     \iff det(A)0\det(A) \neq 0。对齐次方程组,这意味着 det(A)=0\det(A) = 0 是有非零解的充要条件。
    2. 求解公式:当 det(A)0\det(A) \neq 0 时,唯一解可由行列式的商表示:xj=det(Aj)/det(A)x_j = \det(A_j) / \det(A)
  • 实践认知:Cramer法则的公式在理论推导和小规模计算中很有价值,但由于其 O(n4)O(n^4) 的计算复杂度,在实际大规模数值计算中应使用高斯消元法、LU分解法等更高效的算法

行动清单:

  1. 强化判断:遇到齐次方程组,首先尝试观察方程间关系或计算秩,快速判断其是否必有非零解。
  2. 善用工具:对于方阵方程组,在需要从理论上判断解的唯一性时,计算其行列式 det(A)\det(A) 是一个有效方法。
  3. 代码验证:运行本节提供的Python代码,修改矩阵 AA 和向量 b\mathbf{b},直观感受行列式为零与非零时,方程组解的不同情况,并比较直接求解与Cramer法则的结果。

— 小象教研组

配套学习资源与课件
  • 第10章讲义(含板书):线性代数(PDF · 15.5MB)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加课程顾问,免费获取网盘下载链接
微信二维码:扫码添加课程顾问微信扫码添加顾问