Skip to content

2.2 线性方程组

解方程是量化里最常见的操作——因子分析、回归、资产定价,最终都归结为解一个线性系统。


一、形式

方程组

{2x+3y=74xy=7\begin{cases} 2x + 3y = 7 \\ 4x - y = 7 \end{cases}

可以写成矩阵形式:

Ax=b,A=[2341],  x=[xy],  b=[77]A\boldsymbol{x} = \boldsymbol{b}, \quad A = \begin{bmatrix} 2 & 3 \\ 4 & -1 \end{bmatrix},\; \boldsymbol{x} = \begin{bmatrix} x \\ y \end{bmatrix},\; \boldsymbol{b} = \begin{bmatrix} 7 \\ 7 \end{bmatrix}

如果 AA 可逆,解就是 x=A1b\boldsymbol{x} = A^{-1}\boldsymbol{b}

二、手算

{2x+3y=74xy=7\begin{cases} 2x + 3y = 7 \\ 4x - y = 7 \end{cases}

方法一:代入法

由第二式得 y=4x7y = 4x - 7,代入第一式:2x+3(4x7)=72x + 3(4x - 7) = 7

2x+12x21=714x=28x=22x + 12x - 21 = 7 \quad\Rightarrow\quad 14x = 28 \quad\Rightarrow\quad x = 2

代入得 y=4×27=1y = 4 \times 2 - 7 = 1

方法二:矩阵求逆

A1=12×(1)3×4[1342]=114[1342]=[114314414214]A^{-1} = \dfrac{1}{2\times(-1) - 3\times4} \begin{bmatrix} -1 & -3 \\ -4 & 2 \end{bmatrix} = \dfrac{1}{-14} \begin{bmatrix} -1 & -3 \\ -4 & 2 \end{bmatrix} = \begin{bmatrix} \frac{1}{14} & \frac{3}{14} \\ \frac{4}{14} & -\frac{2}{14} \end{bmatrix}

x=A1b=[114314414214][77]=[714+211428141414]=[21]\boldsymbol{x} = A^{-1}\boldsymbol{b} = \begin{bmatrix} \frac{1}{14} & \frac{3}{14} \\ \frac{4}{14} & -\frac{2}{14} \end{bmatrix} \begin{bmatrix} 7 \\ 7 \end{bmatrix} = \begin{bmatrix} \frac{7}{14} + \frac{21}{14} \\ \frac{28}{14} - \frac{14}{14} \end{bmatrix} = \begin{bmatrix} 2 \\ 1 \end{bmatrix}

两种方法结果一样:x=2x = 2y=1y = 1

三、无解和无穷多解

不是所有方程组都有唯一解。

情况例子含义
唯一解上面的 2×22\times2两条直线相交于一点
无解x+y=1,  x+y=3x + y = 1,\; x + y = 3平行线,不相交
无穷多解x+y=1,  2x+2y=2x + y = 1,\; 2x + 2y = 2两直线重合

Quant Link线性回归就是解一个"数据点多于变量数"的方程组,这种情况通常无解(数据点不可能全落在一条直线上)。退而求其次,我们找最接近的解——最小化 Axb2\|A\boldsymbol{x} - \boldsymbol{b}\|^2,这就是最小二乘法,解为 x=(ATA)1ATb\boldsymbol{x} = (A^T A)^{-1} A^T \boldsymbol{b}


四、Python 实践

python
import numpy as np

# 解线性方程组
A = np.array([[2, 3], [4, -1]])
b = np.array([7, 7])
x = np.linalg.solve(A, b)
print(f"解: x={x[0]}, y={x[1]}")  # x=2, y=1

# 最小二乘(线性回归)
# 假设 4 个数据点 (x, y): (1, 2.1), (2, 3.9), (3, 6.0), (4, 8.2)
X = np.array([[1, 1], [1, 2], [1, 3], [1, 4]])  # 第一列截距
y = np.array([2.1, 3.9, 6.0, 8.2])
beta, residuals, rank, s = np.linalg.lstsq(X, y, rcond=None)
print(f"回归系数 (截距, 斜率): {beta}")
print(f"预测值: {X @ beta}")
print(f"真实值: {y}")

\n> 下一步:继续学习 2.3 正定矩阵与二次型

Built with VitePress