线代笔记(自)

6.9k 词

这份笔记本来是期末复习用的(同济版六章),重写时每条定理都补上”为什么”和机器人工程落点。因为学完线代你马上会撞上:旋转矩阵、雅可比、惯性张量、最小二乘标定、SVD、李雅普诺夫稳定性——全是线代。所有 numpy 代码可直接运行。

这门课在机器人里到底用在哪

线代概念 机器人落点
矩阵乘法 坐标变换复合:$T_{AC} = T_{AB}T_{BC}$
正交矩阵 旋转矩阵 $R$,$R^TR = I$
秩 雅可比矩阵降秩 = 奇异位形,IK 失效
特征值 线性系统稳定性、模态分析
二次型/正定 惯性张量主轴、李雅普诺夫函数 $V = x^TPx$
SVD/伪逆 最小二乘标定、阻尼最小二乘 IK
基变换 坐标系之间的坐标转换

第一章 行列式:面积、体积与”为什么不用克拉默”

定义回顾:$n$ 阶行列式是所有排列的带符号乘积之和(逆序数定号),按行展开(代数余子式)是递归计算。几何意义:二阶行列式是平行四边形的有向面积,三阶是有向体积——这是理解”行列式为 0 ⇔ 退化”的关键:面积/体积被压成 0,说明行向量线性相关。

为什么工程上没人用克拉默法则解方程组? 克拉默 $x_i = \det(A_i)/\det(A)$ 需要算 $n+1$ 个行列式,每个行列式按定义展开是 $O(n!)$。$n=20$ 时 $20! \approx 2.4\times10^{18}$ 次乘法,超算也扛不住。高斯消元 $O(n^3)$,$n=20$ 只要 8000 次。克拉默的价值在理论上(解的存在唯一性),不在计算上。

考试要点:① 某行乘 $k$,行列式乘 $k$(不是乘 $k^n$);② 两行互换变号;③ 某行 $\times k$ 加到另一行,值不变;④ $\det(AB)=\det A\det B$,但 $\det(A+B) \ne \det A + \det B$;⑤ 范德蒙德行列式。

工程判断奇异:别用 det,用条件数:

1
2
3
4
5
6
import numpy as np
A_ill = np.array([[1.0, 1.0], [1.0, 1.0 + 1e-12]])
print(np.linalg.det(A_ill)) # 1.0e-12,看起来"接近奇异"
print(np.linalg.cond(A_ill)) # 4.0e12,真实病态程度
A_ok = np.array([[1.0, 2.0], [3.0, 4.0]])
print(np.linalg.cond(1e6*A_ok)) # 14.93,和 cond(A_ok) 相同!

det 有两个致命问题:尺度依赖($\det(kA)=k^n\det A$,放大 100 万倍行列式爆炸但矩阵没变病态)和溢出/下溢。条件数 $\kappa(A)=|A||A^{-1}|$ 尺度不变,$\kappa$ 越大解越脆弱:解的相对误差 ≤ $\kappa \times$ 数据的相对误差。

第二章 矩阵:乘法是复合,旋转矩阵是正交矩阵

矩阵乘法为什么那样定义? 因为矩阵表示线性映射,$(AB)x = A(Bx)$——先做 B 变换再做 A 变换。这个定义不是拍脑袋,是”映射复合”的坐标表达。所以矩阵乘法不可交换(先旋转再平移 ≠ 先平移再旋转),但可结合($(AB)C = A(BC)$),结合律对应”复合的顺序不因加括号改变”。

逆矩阵:方阵 $A$ 可逆 ⇔ $\det A \ne 0$ ⇔ 列向量线性无关 ⇔ $Ax=0$ 只有零解。左逆 = 右逆(方阵才成立)。

旋转矩阵与正交矩阵(考试 + 工程双重点):$R$ 是正交矩阵 $\iff R^TR = I \iff$ 列向量是标准正交基。旋转矩阵还满足 $\det R = 1$(保向)。验证代码:

1
2
3
4
th = np.pi/3
R = np.array([[np.cos(th), -np.sin(th)], [np.sin(th), np.cos(th)]])
print(R.T @ R) # 单位阵
print(np.linalg.det(R)) # 1.0

三维里旋转矩阵构成 SO(3),齐次变换矩阵是 4×4 分块 $\begin{bmatrix} R & t \ 0 & 1 \end{bmatrix}$,逆为 $\begin{bmatrix} R^T & -R^Tt \ 0 & 1 \end{bmatrix}$——正交矩阵求逆 = 转置,这是机器人里坐标变换最快的运算。

分块矩阵:$\begin{bmatrix} A & B \ 0 & D \end{bmatrix}^{-1} = \begin{bmatrix} A^{-1} & -A^{-1}BD^{-1} \ 0 & D^{-1} \end{bmatrix}$($A,D$ 可逆)。工程里大稀疏系统(SLAM 的信息矩阵)都是块结构,分块求逆比整体求逆省一个数量级。

第三章 初等变换与方程组:秩与最小二乘

高斯消元就是反复做行初等变换(换行、倍乘、倍加),把增广矩阵化成行阶梯形。秩 = 行阶梯形非零行数 = 行/列向量组张成空间的维数。

解的结构(秩的语言):

  • $Ax=b$ 有解 ⇔ $\mathrm{rank}(A) = \mathrm{rank}([A|b])$;
  • 有解时:$\mathrm{rank}(A) = n$(未知数个数)→ 唯一解;$\mathrm{rank}(A) < n$ → 无穷多解,通解 = 一个特解 + 齐次解空间(自由变量个数 = $n - \mathrm{rank}(A)$)。

工程场景:超定方程组没有精确解。标定、传感器融合都是”方程比未知数多”:$A \in \mathbb{R}^{m\times n}, m > n$。此时求最小二乘解 $\min_x |Ax - b|_2$:

1
2
3
4
5
6
7
8
A = np.array([[1., 1.], [1., 2.], [1., 3.], [1., 4.]])
b = np.array([1.1, 1.9, 3.2, 3.9])
x_ne = np.linalg.solve(A.T @ A, A.T @ b) # 法方程
Q, R = np.linalg.qr(A)
x_qr = np.linalg.solve(R[:2, :2], (Q.T @ b)[:2]) # QR
x_svd = np.linalg.pinv(A) @ b # SVD 伪逆
x_ls, *_ = np.linalg.lstsq(A, b, rcond=None) # 工程首选
# 四种方法结果一致:[0.1, 0.97]

为什么不用法方程 $A^TAx = A^Tb$? 因为 $\kappa(A^TA) = \kappa(A)^2$——条件数平方,直接丢一半有效数字。实测:$\kappa(A_2)=2.4\times10^8$ 的矩阵,$\kappa(A_2^TA_2)=4.5\times10^{16}$,double 精度下法方程已经废了。工程上解最小二乘用 QR 或 SVD(np.linalg.lstsq 内部就是 SVD),法方程只配出现在考试里。

第四章 向量组:线性相关与雅可比奇异

几何意义:线性相关 = 有向量”多余”(共线/共面),能被其余向量线性表出;线性无关 = 谁都不可或缺。秩 = 向量组张成空间的维数,最大无关组就是”张成同一空间的最少向量”。n 维空间里任意 $n+1$ 个向量必线性相关——这就是为什么 3 维空间里 4 个点必共面(退化情形)。

考试三句等价($n$ 个 $n$ 维向量):线性无关 ⇔ 行列式非零 ⇔ 秩为 $n$。

工程落点:雅可比矩阵的秩 = 机器人的奇异位形。机械臂速度映射 $\dot{p} = J(q)\dot{q}$,$J$ 是 $m\times n$ 矩阵,其列向量就是各关节单位速度引起的末端速度。当某列线性相关(比如二连杆完全伸直),$J$ 降秩:

1
2
3
4
5
6
7
8
9
def jacobian(q1, q2):  # 二连杆,单位杆长
c1, s1 = np.cos(q1), np.sin(q1)
c12, s12 = np.cos(q1+q2), np.sin(q1+q2)
return np.array([[-s1 - s12, -s12], [c1 + c12, c12]])

J_good = jacobian(0.5, 1.0) # 正常位形
J_sing = jacobian(0.0, 0.0) # 完全伸直
print(np.linalg.matrix_rank(J_good), np.linalg.svd(J_good, compute_uv=False)) # 2, [1.97 0.43]
print(np.linalg.matrix_rank(J_sing), np.linalg.svd(J_sing, compute_uv=False)) # 1, [2.24 0. ]

伸直位形第二个奇异值 = 0,末端沿径向的速度方向无法实现,且 $\dot{q} = J^{-1}\dot{p}$ 在该方向爆炸($\kappa \to \infty$)。工程处理:阻尼最小二乘 $\dot{q} = J^T(JJ^T + \lambda^2 I)^{-1}\dot{p}$,加正则项 $\lambda^2$ 把奇异值下限抬到 $\lambda$,用微小精度损失换掉速度爆炸——本质就是 SVD 里”奇异值截断 + 正则化”的思想。

第五章 相似矩阵与二次型:特征值、主轴与稳定性

特征值/特征向量的几何意义:$Av = \lambda v$——变换 $A$ 作用在 $v$ 上方向不变、只伸缩 $\lambda$ 倍。特征向量是变换的”不动方向”,特征值是沿该方向的增益。求法:特征方程 $\det(\lambda I - A) = 0$。

相似:$B = P^{-1}AP$——同一个线性变换在不同基下的矩阵。相似矩阵特征值相同(特征多项式相同),所以特征值是变换的内禀属性,与坐标系无关。

实对称矩阵必可正交对角化:$A = Q\Lambda Q^T$,$Q$ 正交($Q^TQ=I$),不同特征值对应的特征向量自动正交。这是二次型能化简的根本原因。惯性张量对角化就是主轴定理:刚体的惯性张量 $I$ 是实对称矩阵,正交对角化后得到三个主惯量,对应的正交方向叫主轴——绕主轴旋转时惯性积为零,没有陀螺力矩。这就是云台/飞轮设计要尽量让旋转轴对准主轴的物理原因(不对称转子的陀螺效应会让云台晃动、让电机多扛一个交变力矩)。代码:

1
2
3
4
5
I_plate = np.array([[4.0, -3.0, 0.0], [-3.0, 6.0, 0.0], [0.0, 0.0, 10.0]])
evals, evecs = np.linalg.eigh(I_plate) # 对称矩阵用 eigh,保证实特征值
print(evals) # 主惯量 [1.84 8.16 10. ]
print(evecs.T @ I_plate @ evecs) # 主轴上退化为对角阵
print(evecs.T @ evecs) # 正交性:单位阵

正定二次型与稳定性:$x^TAx > 0$($A$ 正定)⇔ 全部顺序主子式 > 0(Sylvester 判据)⇔ 全部特征值 > 0。控制里最经典的用法是李雅普诺夫函数 $V(x) = x^TPx$($P$ 正定对称):若沿系统轨迹 $\dot{V} < 0$,能量单调下降,系统稳定。对线性系统 $A$ 稳定 ⇔ 李雅普诺夫方程 $A^TP + PA = -Q$($Q$ 正定)有正定解 $P$:

1
2
3
4
5
A_sys = np.array([[0., 1.], [-2., -3.]])
Q = np.eye(2)
P = np.linalg.solve(np.kron(np.eye(2), A_sys.T) + np.kron(A_sys.T, np.eye(2)), -Q.ravel()).reshape(2, 2)
P = (P + P.T) / 2
print(np.linalg.eigvalsh(P)) # [0.19 1.31] 全正 → A 稳定

这直接连着 PID/状态反馈文章里的稳定性分析——“系统稳不稳”在线代里就是”某个二次型矩阵正不正定”。

SVD 预告(研究生/工程前置):$A = U\Sigma V^T$ 对任意(含非方阵)矩阵成立,奇异值 $\sigma_i$ 是 $A^TA$ 特征值的平方根——特征值是方阵的专属,奇异值是它的推广。伪逆 $A^+ = V\Sigma^+U^T$ 统一了最小二乘(超定)和最小范数解(欠定),PCA 就是协方差矩阵的特征分解。SLAM、标定、IK 全在这上面。

第六章 线性空间与线性变换:基变换就是坐标变换

线性空间:满足加法/数乘封闭 + 八条算律的集合。不只是 $\mathbb{R}^n$——多项式、$n\times n$ 矩阵、连续函数都是线性空间。子空间:对运算封闭的子集(比如过原点的平面)。基:线性无关且能张成全空间的最大向量组,向量个数 = 维数 $\dim V$。坐标:$x$ 在基 $\mathcal{B}$ 下的坐标 $[x]_\mathcal{B}$ 是线性组合系数。

过渡矩阵(考试核心):从基 $\mathcal{B}$ 到基 $\mathcal{B}’$ 的过渡矩阵 $T$,第 $j$ 列 = 旧基向量 $v_j$ 在新基下的坐标。坐标变换:

$$[x]{\mathcal{B}’} = T{\mathcal{B}’\leftarrow\mathcal{B}},[x]_\mathcal{B}$$

最大的坑是方向:基变换和坐标变换方向相反——基向量”变长 2 倍”,同一向量的坐标”缩成 1/2”:

1
2
3
4
B = np.array([[2., 0.], [0., 3.]])   # 新基:标准基沿 x,y 拉长 2、3 倍
x_std = np.array([1., 1.])
x_new = np.linalg.solve(B, x_std) # 坐标 [0.5, 1/3]——方向相反!
print(B @ x_new) # 还原 [1., 1.]

这就是机器人坐标系变换的本质:{B} 系相对 {A} 系的位姿(旋转矩阵 $R$ + 平移 $t$)就是过渡矩阵,$p_A = R,p_B + t$ 就是在做基变换。核 $\mathrm{Ker}(T)$(被打成零的向量)与像 $\mathrm{Im}(T)$(能到达的所有地方)对应齐次方程组解空间和列空间;维数定理 $\dim\mathrm{Ker}(T) + \dim\mathrm{Im}(T) = \dim V$——“变没了的维度 + 剩下来的维度 = 总维度”,是全书最漂亮的守恒律,也是秩-零度定理。

补充:子空间/基扩充/基替换(考试速查)

  • 基扩充定理:$u_1,\dots,u_r$ 线性无关 ⇒ 可补成 $V$ 的一组基(补 $n-r$ 个向量);
  • 基替换(Steinitz 交换引理):基中任一向量可用非零向量 $u$ 替换(只要 $u$ 在基下的坐标对应分量非零),仍是基;
  • 维数公式:$\dim(U+W) = \dim U + \dim W - \dim(U\cap W)$;
  • 直和:$V = U \oplus W \iff U \cap W = {0}$ 且 $V = U + W$,此时 $\dim V = \dim U + \dim W$,两组基拼起来就是 $V$ 的基;
  • 等价命题:$\dim V = n$ 时,”$n$ 个向量线性无关” ⇔ “能生成 $V$” ⇔ “是基”(三句等价,同济最爱考)。

踩坑与考试细节

  1. det 判奇异是陷阱:见第一章,用 np.linalg.cond。数值上还要注意 det 溢出(大矩阵 det 动辄 $10^{\pm100}$)。
  2. **对称矩阵用 eigh 不用 eig**:eig 对浮点误差敏感,可能给出带小虚部的特征值;eigh 利用对称性保证实特征值且更快。
  3. 特征向量正交性只在实对称时保证:一般矩阵不同特征值的特征向量线性无关但不正交;考试里”可对角化”≠”可正交对角化”。
  4. 矩阵乘法没有交换律、没有消去律:$AB=AC$ 且 $A\ne 0$ 推不出 $B=C$($A$ 奇异时);$(AB)^k \ne A^kB^k$。
  5. **$|kA| = k^n|A|$**($n$ 阶),不是 $k|A|$;$|A^{-1}| = 1/|A|$;$|A^T| = |A|$。
  6. 秩是贯穿全书的量:把每章定理翻译成秩的语言(解的存在性、相关性、奇异位形、维数定理),考试和工程都会清晰很多。
  7. 法方程 vs QR/SVD:任何”$A^TA$ 出现的地方”先警惕条件数平方,标定代码里一律 lstsq/pinv。
  8. 齐次变换矩阵求逆用分块公式($R^T$ 那块),别直接 np.linalg.inv 硬算 4×4——又慢又损失精度,ROS/TF 源码里都是手写分块。

一句话总结:行列式给存在性,秩给结构,特征值给动态,SVD 给数值,基变换给坐标——机器人的每个数学模型最后都落在这五件事上。