Cramer's Rule

克拉默法则

当系数行列式 D0 时, n 个未知数、 n 个方程的线性方程组有唯一解,且每个未知数都能写成两个行列式之比 xj=Dj/D 。它优雅、深刻、理论价值极高;但作为计算工具,它昂贵而低效。

鸡兔同笼

《孙子算经》有:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”

设鸡 x 只、兔 y 只,得方程组

{x+y=352x+4y=94

古人的“半足法”(足数减半再减头数得兔数)本质上就是消元。消元是算法:一步步做,答案逐步浮现。但数学家有个执念,像一元二次方程的求根公式

x=b±b24ac2a

把线性方程组的解直接写成公式,就是克拉默法则。对这个笼子,它给出:

x=|351944||1124|=462=23,y=|135294||1124|=242=12.

鸡 23,兔 12。

多少个点确定一条曲线

加布里埃尔·克拉默(Gabriel Cramer, 1704–1752),瑞士日内瓦数学家。1750 年他出版《代数曲线分析引论》,研究一个时髦问题:5 个点确定一条二次曲线,9 个点确定一条三次曲线,以点拟合曲线时,未知数是多项式系数,问题归结为解线性方程组。在该书附录中,克拉默对一般的 n 元方程组给出了用行列式之比表示解的规则,并发明了带双下标的系统记号。

优先权公案:苏格兰数学家麦克劳林的遗著《代数论著》(1748 年)已对二元、三元情形给出同样的规则。两人几乎同时、很可能独立,因此有科学史家主张应称“麦克劳林–克拉默法则”。更早的萌芽还可追到日本的关孝和(1683)与莱布尼茨(1693),但“行列式”作为系统概念,要等柯西、雅可比、凯莱在十九世纪才真正成熟。

法则的陈述

二阶行列式:

|abcd|=adbc.

三阶可用余子式展开。

对每一列都是线性的(多重线性);两列相同则为零(交错性)。

定理:克拉默法则

n 个未知数、 n 个方程的线性方程组

j=1naijxj=bi,i=1,,n,

若系数行列式

D=|a11a1nan1ann|0,

则方程组有解且解唯一:

xj=DjD

其中 Dj 是把 D 的第 j 列换成常数列 (b1,,bn)T 所得的行列式。

方程个数等于未知数个数(系数矩阵是方阵),且 D0

2×2 一次消元

对二元方程组,第一式乘 a22 、第二式乘 a12 后相减, y 项消:

(a11a22a21a12)x=b1a22b2a12,

Dx=D1 ;同理 Dy=D2 。请注意一个细节:消元时乘的系数 (a22,a12) 恰好是 x 的系数列的代数余子式。消元的本质是“用余子式制造零”,下面的一般证明正是这一招的推广。

三元:

{x+y+z=6x+2y+3z=142xy+z=3

第一行展开得 D=5 ;把第一、二、三列分别换成 (6,14,3)T ,得 D1=5, D2=10, D3=15 ,解为

x=55=1,y=105=2,z=155=3.

一般证明

余子式消元

aik 的代数余子式为 Cik 。把第 i 个方程乘以 Cik ,并对 i 求和:

i=1n(j=1naijxj)Cik=i=1nbiCik.

左边交换求和顺序: jxj(iaijCik) 。由行列式按列展开理论:

  • j=k 时, iaikCik=D (按第 k 列正常展开);
  • jk 时, iaijCik=0 (这相当于“用第 j 列的元素配第 k 列的余子式展开”,得到一个有两列相同的行列式,故为零)。

于是左边 =xkD 。右边把 A 的第 k 列换成 b 后按第 k 列展开的结果,即 Dk 。故 xkD=Dk ,除以 D 即得。

多重线性展开

A 按列分块 A=(a1,,an) ,方程组即 x1a1++xnan=b 。对每个 i

Di=det(a1,,ai1,b,ai+1,,an)=det(a1,,ai1,jxjaj,ai+1,,an)(代入 b=jxjdet(a1,,ai1,aj,ai+1,,an)(该槽位线性)=xidet(A).ji 时 aj 出现两次,行列式为 0

D0 时解的存在性由伴随矩阵恒等式 Aadj(A)=DI 保证:直接验证 x=adj(A)b/D 满足 Ax=b

A1=adj(A)/D 就是克拉默法则的等价形式。

D=0 而某个 Di0 ,方程组无解(否则会推出 0=Di 的矛盾)

几何意义

u,vA 的两列, b=xu+yv 。记 [p,q]=det(p,q) (两向量张成平行四边形的有向面积)。由交错性 [v,v]=0

[b,v]=x[u,v]+y[v,v]=x[u,v].

固定一条边,把另一条边从 u 换成 b ,平行四边形的有向面积精确地变为原来的 x ,因为 b 中与 v 平行的分量不贡献任何面积。所以 x=[b,v]/[u,v] :横坐标是两个有向面积之比。

一般 n 维情形: |detA|n 根“支柱” a1,,an 撑起的平行多面体的(有向)体积。把第 i 根支柱换成 b ,体积恰好变为原来的 xi 倍。克拉默法则的几何内核就是一句话:坐标是体积之比。 行列式的正负号(定向是否翻转)也自然解释了公式中的符号约定。

美丽而昂贵的代价:

设克拉默是“求根公式”,高斯消元是“配方法”,那么我们必须诚实地谈成本。用余子式展开计算 n 阶行列式满足递推 T(n)=nT(n1)+O(n2) ,即 Θ(n!) 。按每秒 109 次运算:

n 余子式展开耗时 高斯消元 23n3
10 约 0.004 秒 微秒级
15 约 22 分钟 微秒级
20 约 77 年 微秒级
25 约五亿年 约 1 万次运算,微秒级

即便用 LU 分解(每个行列式 O(n3) )来算这 n+1 个行列式,总代价约 (n+1)23n3 ,是直接消元求解的约 n 倍,纯属浪费。数值上更糟:接近奇异时 DDj 可能同时巨大或微小,比值易上溢、下溢,误差被放大。所以 LAPACK、MATLAB 的 \、NumPy 的 solve,底层全部是带选主元的 LU 分解,不会用克拉默。

对固定的小系统( n=2,3 ),显式公式可以内联进代码、向量化,反而极快:计算机图形学中射线与三角形求交的 Möller–Trumbore 算法,本质就是一次 3×3 克拉默。此外,正如二次方程求根公式在 b24ac 时也有灾难性开销一样,公式透明≠算法稳健

理论价值

  1. 解是系数的显式有理函数。 xj=Dj/D 是系数的多项式之比。于是只要 D0 ,当系数光滑(甚至解析)地依赖参数 t 时,解自动光滑(解析)地依赖 t 。这是扰动分析、隐函数思想、经济学比较静态的底层机制之一,IS-LM 模型每本中级宏观教材都在用克拉默求 Y/G

  2. 环上的结构。 Dxj=Dj 说明:整系数、整常数项时,解的分母整除 D ;特别地 D=±1 时整数方程组有整数解(单模矩阵,数论与格理论中的常客)。法则在有限域、多项式环上同样成立,这是“环上的线性代数”。

  3. 插值的存在唯一性。 n+1 个互异节点上的插值问题归结为范德蒙德方程组,其行列式 i<j(xjxi)0 ,克拉默法则一步给出插值多项式的存在唯一性。妙极了:这正是克拉默当年造出这个法则的原始动机,法则回到了它的出生地。

  4. 常微分方程。 二阶线性方程“变易常数法”中待定系数恰由二元克拉默解出,分母正是朗斯基行列式 WW0D0 呼应得严丝合缝。

  5. 小规模符号计算。 例如部分分式: 1(x+1)(x+2)=Ax+1+Bx+2 给出 A+B=0, 2A+B=1D=1DA=1DB=1 ,立刻 A=1, B=1

D=0

D=0 时法则沉默。此时方程组无解或有无穷多解,需要秩理论(Rouché–Capelli 定理:有解 rankA=rank[A|b] )来裁决。但克拉默的遗产仍能帮上一半的忙:

  • 某个 Di0 ⇒ 必无解(第四节推论)。例如 x+y=1, 2x+2y=3D=0D1=10 ,矛盾立判。
  • D=0 且所有 Di=0 ⇒ 不能下结论。 二元时( A0 )确为无穷多解;但三元及以上可能翻车:
{x+0y+0z=00x+0y+0z=10x+0y+0z=0

无解(第二式 0=1 ),却 D=D1=D2=D3=0

  • 进阶注记:当 rankA=n1 时,伴随矩阵非零,可以证明“所有 Di=0 ”恰好等价于“有解”(此时为无穷多);当 rankAn2 时伴随矩阵为零, Di 恒为零,判别彻底失效,上面那个反例正是 rankA=1 的情形。

方法对照表:

方法 适用范围 复杂度
高斯消元(选主元) 任意矩形方程组 O(n3)
克拉默法则 n×nD0 O(n!) /余子式
逆矩阵 x=A1b n×n 可逆 O(n3)