MINIBLOG

Blog Note Tags Links About
Home Search
Apr 22, 2026
miniyuan

特征值和特征向量的计算


题 4.1

使用位移反幂法。

取初始向量 x(0)=(1,1,1) ⁣T\mathbf x^{(0)}=(1,1,1)^{\!T}x(0)=(1,1,1)T,位移量 μ=9.6\mu=9.6μ=9.6。

令

A=[123234345]A = \begin{bmatrix} 1 & 2 & 3\\ 2 & 3 & 4\\ 3 & 4 & 5 \end{bmatrix}A=​123​234​345​​ B=A−μI=[−8.6232−6.6434−4.6]B=A-\mu I = \begin{bmatrix} -8.6 & 2 & 3\\ 2 & -6.6 & 4\\ 3 & 4 & -4.6 \end{bmatrix}B=A−μI=​−8.623​2−6.64​34−4.6​​

迭代一次 y(1)=B−1x(0)\mathbf y^{(1)} = B^{-1} \mathbf x^{(0)}y(1)=B−1x(0),也即方程组

{−8.6 y1+2 y2+3 y3=12 y1−6.6 y2+4 y3=13 y1+4 y2−4.6 y3=1\begin{cases} -8.6\,y_1+2\,y_2+3\,y_3=1\\[4pt] 2\,y_1-6.6\,y_2+4\,y_3=1\\[4pt] 3\,y_1+4\,y_2-4.6\,y_3=1 \end{cases}⎩⎨⎧​−8.6y1​+2y2​+3y3​=12y1​−6.6y2​+4y3​=13y1​+4y2​−4.6y3​=1​

解得:

y(1)=[552401052]\mathbf y^{(1)}= \begin{bmatrix} \dfrac{55}{2}\\[8pt] 40\\[4pt] \dfrac{105}{2} \end{bmatrix}y(1)=​255​402105​​​

因为 λ≈μ+1/yj,j=arg max⁡i∣yi∣\lambda \approx \mu + 1/y_j,\quad j = \argmax_i |y_i|λ≈μ+1/yj​,j=argmaxi​∣yi​∣,所以特征值的估计为:

λ≈μ+1yj=9.6+2105=20221≈9.6190\lambda\approx \mu+\frac{1}{y_j} = 9.6 + \frac{2}{105}=\frac{202}{21}\approx 9.6190λ≈μ+yj​1​=9.6+1052​=21202​≈9.6190

对应单位特征向量的估计为:

x(1)=y(1)∥y(1)∥∞=[112116211]≈[0.52380.76191.0000].\mathbf x^{(1)}=\frac{\mathbf y^{(1)}}{\|\mathbf y^{(1)}\|_\infty} = \begin{bmatrix} \dfrac{11}{21}\\[8pt] \dfrac{16}{21}\\[8pt] 1 \end{bmatrix} \approx \begin{bmatrix} 0.5238\\0.7619\\1.0000 \end{bmatrix}.x(1)=∥y(1)∥∞​y(1)​=​2111​2116​1​​≈​0.52380.76191.0000​​.

题 4.2

A(0)=[422251216]A^{(0)}= \begin{bmatrix} 4 & 2 & 2\\ 2 & 5 & 1\\ 2 & 1 & 6 \end{bmatrix}A(0)=​422​251​216​​

取最大非对角元 a21(0)=2a_{21}^{(0)} = 2a21(0)​=2,则:

cot⁡θ(1):=τ(1)=4−52×2=−14tan⁡θ(1):=t(1)=−sign(τ(1))∣τ(1)∣+1+(τ(1))2≈0.7808cos⁡θ(1):=c(1)=11+(t(1))2≈0.7882sin⁡θ(1):=s(1)=c(1)t(1)≈0.6154\begin{aligned} \cot \theta^{(1)} &:= \tau^{(1)} = \frac{4-5}{2 \times 2} = -\frac{1}{4} \\ \tan \theta^{(1)} &:= t^{(1)} = -\frac{\text{sign}(\tau^{(1)})}{|\tau^{(1)}| + \sqrt{1+(\tau^{(1)})^2}} \approx 0.7808 \\ \cos \theta^{(1)} &:= c^{(1)} = \frac{1}{\sqrt{1 + (t^{(1)})^2}} \approx 0.7882 \\ \sin \theta^{(1)} &:= s^{(1)} = c^{(1)} t^{(1)} \approx 0.6154 \end{aligned}cotθ(1)tanθ(1)cosθ(1)sinθ(1)​:=τ(1)=2×24−5​=−41​:=t(1)=−∣τ(1)∣+1+(τ(1))2​sign(τ(1))​≈0.7808:=c(1)=1+(t(1))2​1​≈0.7882:=s(1)=c(1)t(1)≈0.6154​

从而旋转矩阵为:

J(1)=[c(1)−s(1)0s(1)c(1)0001]≈[0.78820.61540−0.61540.78820001].J^{(1)}= \begin{bmatrix} c^{(1)} & -s^{(1)} & 0\\ s^{(1)} & c^{(1)} & 0\\ 0 & 0 & 1 \end{bmatrix} \approx \begin{bmatrix} 0.7882 & 0.6154 & 0\\ -0.6154 & 0.7882 & 0\\ 0 & 0 & 1 \end{bmatrix}.J(1)=​c(1)s(1)0​−s(1)c(1)0​001​​≈​0.7882−0.61540​0.61540.78820​001​​.

一次 Jordan 变换后:

A(1)=(J(1))⊤A(0)J(1)≈[2.438400.961006.56162.01900.96102.01906]A^{(1)}=(J^{(1)})^\top A^{(0)}J^{(1)} \approx \begin{bmatrix} 2.4384 & 0 & 0.9610\\ 0 & 6.5616 & 2.0190\\ 0.9610 & 2.0190 & 6 \end{bmatrix}A(1)=(J(1))⊤A(0)J(1)≈​2.438400.9610​06.56162.0190​0.96102.01906​​

取最大非对角元 a32(1)≈2.0190a_{32}^{(1)} \approx 2.0190a32(1)​≈2.0190,则:

cot⁡θ(2):=τ(2)≈0.1391tan⁡θ(2):=t(2)=−sign(τ(2))∣τ(2)∣+1+(τ(2))2≈−0.8706cos⁡θ(2):=c(2)=11+(t(2))2≈0.7542sin⁡θ(2):=s(2)=c(2)t(2)≈−0.6566\begin{aligned} \cot \theta^{(2)} &:= \tau^{(2)} \approx 0.1391\\ \tan \theta^{(2)} &:= t^{(2)} = -\frac{\text{sign}(\tau^{(2)})}{|\tau^{(2)}| + \sqrt{1+(\tau^{(2)})^2}} \approx -0.8706 \\ \cos \theta^{(2)} &:= c^{(2)} = \frac{1}{\sqrt{1 + (t^{(2)})^2}} \approx 0.7542 \\ \sin \theta^{(2)} &:= s^{(2)} = c^{(2)} t^{(2)} \approx -0.6566 \end{aligned}cotθ(2)tanθ(2)cosθ(2)sinθ(2)​:=τ(2)≈0.1391:=t(2)=−∣τ(2)∣+1+(τ(2))2​sign(τ(2))​≈−0.8706:=c(2)=1+(t(2))2​1​≈0.7542:=s(2)=c(2)t(2)≈−0.6566​

从而旋转矩阵为:

J(2)=[1000c(2)−s(2)0s(2)c(2)]≈[10000.75420.65660−0.65660.7542].J^{(2)}= \begin{bmatrix} 1 & 0 & 0 0 & c^{(2)} & -s^{(2)}\\ 0 & s^{(2)} & c^{(2)}\\ \end{bmatrix} \approx \begin{bmatrix} 1 & 0 & 0\\ 0 & 0.7542 & 0.6566\\ 0 & -0.6566 & 0.7542 \end{bmatrix}.J(2)=[10​0s(2)​00c(2)​c(2)−s(2)]≈​100​00.7542−0.6566​00.65660.7542​​.

两次 Jordan 变换后:

A(2)=(J(2))⊤A(1)J(2)≈[2.43840.63100.724808.319200.724804.2423]A^{(2)}=(J^{(2)})^\top A^{(1)}J^{(2)} \approx \begin{bmatrix} 2.4384 & 0.6310 & 0.7248\\ 0 & 8.3192 & 0\\ 0.7248 & 0 & 4.2423 \end{bmatrix}A(2)=(J(2))⊤A(1)J(2)≈​2.438400.7248​0.63108.31920​0.724804.2423​​

特征值近似为:

λ1≈8.3192,λ2≈4.2423,λ3≈2.4384\lambda_1 \approx 8.3192,\quad \lambda_2 \approx 4.2423,\quad \lambda_3 \approx 2.4384λ1​≈8.3192,λ2​≈4.2423,λ3​≈2.4384

使用了如下 python 代码帮助计算:

import numpy as np

np.set_printoptions(precision=4, suppress=True)

A = np.array([[4, 2, 2],
              [2, 5, 1],
              [2, 1, 6],], dtype=float)

k = 0
n = A.shape[0]
V = np.eye(n)
N = 1000
EPS = 1e-6

while k < N:
    k += 1
    print(f"===iteration {k} start===")

    # 选最大非对角元
    p, q = 0, 1
    max_off = 0
    for i in range(n):
        for j in range(i + 1, n):
            if abs(A[i, j]) > max_off:
                max_off = abs(A[i, j])
                p, q = i, j
    print(f"A^({k-1})[{p}, {q}] = {A[p, q]:.4f}")

    if max_off < EPS:
        print("")
        print("===all iteration done===")
        break

    # 计算旋转参数
    tau = (A[p, p] - A[q, q]) / (2 * A[p, q])
    if tau >= 0:
        t = -1 / (tau + np.sqrt(1 + tau**2))
    else:
        t = 1 / (-tau + np.sqrt(1 + tau**2))
    c = 1 / np.sqrt(1 + t**2)
    s = c * t
    print(f"cot2^({k}) = {tau:.4f}")
    print(f"tan^({k}) = {t:.4f}")
    print(f"cos^({k}) = {c:.4f}")
    print(f"sin^({k}) = {s:.4f}")

    # 更新 A
    a_pp, a_qq, a_pq = A[p, p], A[q, q], A[p, q]
    A[p, p] = c**2 * a_pp + s**2 * a_qq - 2*s*c*a_pq
    A[q, q] = s**2 * a_pp + c**2 * a_qq + 2*s*c*a_pq
    A[p, q] = A[q, p] = 0

    for i in range(n):
        if i != p and i != q:
            a_ip, a_iq = A[i, p], A[i, q]
            A[i, p] = A[p, i] = c*a_ip - s*a_iq
            A[i, q] = A[q, i] = s*a_ip + c*a_iq
    print(f"A^({k}) = {A}")

    # 累积 V
    for i in range(n):
        v_ip, v_iq = V[i, p], V[i, q]
        V[i, p] = c*v_ip - s*v_iq
        V[i, q] = s*v_ip + c*v_iq
    print(f"V^({k}) = {V}")
    print("")

eigvals = np.diag(A)
idx = np.argsort(eigvals)[::-1]  # 从大到小排序
eigvals = eigvals[idx]
eigvecs = V[:, idx]

print(f"eigvals:")
for i in range(n):
    print(f"  lambda_{i} = {eigvals[i]:.4f}")

题 4.3

令:

A(0)=[−4−3−7232427],Q(0)=I3=[100010001]A^{(0)} = \begin{bmatrix} -4 & -3 & -7 \\ 2 & 3 & 2 \\ 4 & 2 & 7 \end{bmatrix}, \quad Q^{(0)} = I_3 = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}A(0)=​−424​−332​−727​​,Q(0)=I3​=​100​010​001​​

第一次迭代:

x(0)=A(0)[0:3,0]=[−424],∥x(0)∥2=6\mathbf{x}^{(0)} = A^{(0)}[0:3, 0] = \begin{bmatrix} -4 \\ 2 \\ 4 \end{bmatrix}, \quad \|\mathbf{x}^{(0)}\|_2 = 6x(0)=A(0)[0:3,0]=​−424​​,∥x(0)∥2​=6 y(0)=[−sign(x1(0))⋅∥x(0)∥200]=[600]\mathbf{y}^{(0)} = \begin{bmatrix} -\mathrm{sign}(\mathbf{x}_1^{(0)}) \cdot \|\mathbf{x}^{(0)}\|_2 \\ 0 \\ 0 \end{bmatrix} = \begin{bmatrix} 6 \\ 0 \\ 0 \end{bmatrix}y(0)=​−sign(x1(0)​)⋅∥x(0)∥2​00​​=​600​​ v(0)=x(0)−y(0)=[−1024],∥v(0)∥2=230\mathbf{v}^{(0)} = \mathbf{x}^{(0)} - \mathbf{y}^{(0)} = \begin{bmatrix} -10 \\ 2 \\ 4 \end{bmatrix}, \quad \|\mathbf{v}^{(0)}\|_2 = 2\sqrt{30}v(0)=x(0)−y(0)=​−1024​​,∥v(0)∥2​=230​ w(0)=v(0)∥v(0)∥2=[−530130230]≈[−0.91290.18260.3651]\mathbf{w}^{(0)} = \frac{\mathbf{v}^{(0)}}{\|\mathbf{v}^{(0)}\|_2} = \begin{bmatrix} -\frac{5}{\sqrt{30}} \\ \frac{1}{\sqrt{30}} \\ \frac{2}{\sqrt{30}} \end{bmatrix} \approx \begin{bmatrix} -0.9129 \\ 0.1826 \\ 0.3651 \end{bmatrix}w(0)=∥v(0)∥2​v(0)​=​−30​5​30​1​30​2​​​≈​−0.91290.18260.3651​​ H(0)=I−2w(0)(w(0))TH^{(0)} = I - 2\mathbf{w}^{(0)}(\mathbf{w}^{(0)})^TH(0)=I−2w(0)(w(0))T A(1)[0:3,0:3]=A(0)[0:3,0:3]−2⋅w(0)⋅((w(0))TA(0)[0:3,0:3])=[64.33331001.5333−1.40−0.93330.2]\begin{aligned} A^{(1)}[0:3, 0:3] &= A^{(0)}[0:3, 0:3] - 2 \cdot \mathbf{w}^{(0)} \cdot \bigl((\mathbf{w}^{(0)})^T A^{(0)}[0:3, 0:3]\bigr) \\ &= \begin{bmatrix} 6 & 4.3333 & 10 \\ 0 & 1.5333 & -1.4 \\ 0 & -0.9333 & 0.2 \end{bmatrix} \end{aligned}A(1)[0:3,0:3]​=A(0)[0:3,0:3]−2⋅w(0)⋅((w(0))TA(0)[0:3,0:3])=​600​4.33331.5333−0.9333​10−1.40.2​​​ Q(1)[:,0:3]=Q(0)[:,0:3]−2⋅(Q(0)[:,0:3]w(0))⋅(w(0))T=[−0.66670.33330.66670.33330.9333−0.13330.6667−0.13330.7333]\begin{aligned} Q^{(1)}[:, 0:3] &= Q^{(0)}[:, 0:3] - 2 \cdot (Q^{(0)}[:, 0:3] \mathbf{w}^{(0)}) \cdot (\mathbf{w}^{(0)})^T \\ &= \begin{bmatrix} -0.6667 & 0.3333 & 0.6667 \\ 0.3333 & 0.9333 & -0.1333 \\ 0.6667 & -0.1333 & 0.7333 \end{bmatrix} \end{aligned}Q(1)[:,0:3]​=Q(0)[:,0:3]−2⋅(Q(0)[:,0:3]w(0))⋅(w(0))T=​−0.66670.33330.6667​0.33330.9333−0.1333​0.6667−0.13330.7333​​​

第二次迭代:

x(1)=A(1)[1:3,1]=[1.5333−0.9333],∥x(1)∥2≈1.7951\mathbf{x}^{(1)} = A^{(1)}[1:3, 1] = \begin{bmatrix} 1.5333 \\ -0.9333 \end{bmatrix}, \quad \|\mathbf{x}^{(1)}\|_2 \approx 1.7951x(1)=A(1)[1:3,1]=[1.5333−0.9333​],∥x(1)∥2​≈1.7951 y(1)=[−sign(x1(1))⋅∥x(1)∥20]=[−1.79510]\mathbf{y}^{(1)} = \begin{bmatrix} -\mathrm{sign}(\mathbf{x}_1^{(1)}) \cdot \|\mathbf{x}^{(1)}\|_2 \\ 0 \end{bmatrix} = \begin{bmatrix} -1.7951 \\ 0 \end{bmatrix}y(1)=[−sign(x1(1)​)⋅∥x(1)∥2​0​]=[−1.79510​] v(1)=x(1)−y(1)=[3.3284−0.9333],∥v(1)∥2≈3.4568\mathbf{v}^{(1)} = \mathbf{x}^{(1)} - \mathbf{y}^{(1)} = \begin{bmatrix} 3.3284 \\ -0.9333 \end{bmatrix}, \quad \|\mathbf{v}^{(1)}\|_2 \approx 3.4568v(1)=x(1)−y(1)=[3.3284−0.9333​],∥v(1)∥2​≈3.4568 w(1)=v(1)∥v(1)∥2≈[0.9628−0.2700]\mathbf{w}^{(1)} = \frac{\mathbf{v}^{(1)}}{\|\mathbf{v}^{(1)}\|_2} \approx \begin{bmatrix} 0.9628 \\ -0.2700 \end{bmatrix}w(1)=∥v(1)∥2​v(1)​≈[0.9628−0.2700​] H(1)=I−2w(1)(w(1))TH^{(1)} = I - 2\mathbf{w}^{(1)}(\mathbf{w}^{(1)})^TH(1)=I−2w(1)(w(1))T A(2)[1:3,1:3]=A(1)[1:3,1:3]−2⋅w(1)⋅((w(1))TA(1)[1:3,1:3])=[−1.79511.29990−0.5571]\begin{aligned} A^{(2)}[1:3, 1:3] &= A^{(1)}[1:3, 1:3] - 2 \cdot \mathbf{w}^{(1)} \cdot \bigl((\mathbf{w}^{(1)})^T A^{(1)}[1:3, 1:3]\bigr) \\ &= \begin{bmatrix} -1.7951 & 1.2999 \\ 0 & -0.5571 \end{bmatrix} \end{aligned}A(2)[1:3,1:3]​=A(1)[1:3,1:3]−2⋅w(1)⋅((w(1))TA(1)[1:3,1:3])=[−1.79510​1.2999−0.5571​]​ Q(2)[:,1:3]=Q(1)[:,1:3]−2⋅(Q(1)[:,1:3]w(1))⋅(w(1))T=[0.06190.7428−0.86660.37140.49520.5571]\begin{aligned} Q^{(2)}[:, 1:3] &= Q^{(1)}[:, 1:3] - 2 \cdot (Q^{(1)}[:, 1:3] \mathbf{w}^{(1)}) \cdot (\mathbf{w}^{(1)})^T \\ &= \begin{bmatrix} 0.0619 & 0.7428 \\ -0.8666 & 0.3714 \\ 0.4952 & 0.5571 \end{bmatrix} \end{aligned}Q(2)[:,1:3]​=Q(1)[:,1:3]−2⋅(Q(1)[:,1:3]w(1))⋅(w(1))T=​0.0619−0.86660.4952​0.74280.37140.5571​​​

最终分解:

Q=Q(2)=[−0.66670.06190.74280.3333−0.86660.37140.66670.49520.5571]Q = Q^{(2)} = \begin{bmatrix} -0.6667 & 0.0619 & 0.7428 \\ 0.3333 & -0.8666 & 0.3714 \\ 0.6667 & 0.4952 & 0.5571 \end{bmatrix}Q=Q(2)=​−0.66670.33330.6667​0.0619−0.86660.4952​0.74280.37140.5571​​ R=A(2)=[64.3333100−1.79511.299900−0.5571]R = A^{(2)} = \begin{bmatrix} 6 & 4.3333 & 10 \\ 0 & -1.7951 & 1.2999 \\ 0 & 0 & -0.5571 \end{bmatrix}R=A(2)=​600​4.3333−1.79510​101.2999−0.5571​​

使用了如下 python 代码帮助计算:

import numpy as np

np.set_printoptions(precision=4, suppress=True)

A = np.array([[-4, -3, -7],
              [2, 3, 2],
              [4, 2, 7],], dtype=float)

n = A.shape[0]
Q = np.eye(n)

for k in range(n - 1):
    x = A[k:, k]  # (n - k,)
    norm_x = np.linalg.norm(x)

    if norm_x < 1e-15:  # 全 0
        continue

    y = np.zeros((n - k,))  # (n - k,)
    y[0] = -np.sign(x[0]) * norm_x
    w = (x - y) / np.linalg.norm(x - y)  # (n - k,)

    # H = np.eye(n) - 2 * np.outer(w, w)
    sub_A = A[k:, k:]  # (n - k, n - k)
    sub_Q = Q[:, k:]  # (n, n - k)

    sub_A -= 2 * np.outer(w, w @ sub_A)
    sub_Q -= 2 * np.outer(sub_Q @ w, w)

print("Q =")
print(f"{Q}")
print("R =")
print(f"{A}")
print("QR =")
print(f"{Q @ A}")

题 4.4

要求 1

记 nnn 阶矩阵 A\mathbf AA 为 A(n)\mathbf A^{(n)}A(n),对应的特征多项式为 p(n)p^{(n)}p(n)。 归纳证明 p(n)p^{(n)}p(n) 满足题示形式。

当 n=2n = 2n=2 时,A(2)\mathbf A^{(2)}A(2) 的特征多项式为:

p(2)(λ)=det⁡(λI−A(2))=∣λ+c1c2−1λ∣=λ2+c1λ+c2p^{(2)}(\lambda) = \det(\lambda \mathbf{I} - \mathbf{A}^{(2)}) = \begin{vmatrix} \lambda + c_1 & c_2 \\ -1 & \lambda \\ \end{vmatrix} = \lambda^2 + c_1 \lambda + c_2p(2)(λ)=det(λI−A(2))=​λ+c1​−1​c2​λ​​=λ2+c1​λ+c2​

成立!

假设 n=k−1n = k-1n=k−1 时成立,下证 n=kn=kn=k 时也成立。

A(k)\mathbf A^{(k)}A(k) 的特征多项式为:

p(k)(λ)=det⁡(λI−A(k))=∣λ+c1c2c3⋯ck−1ck−1λ0⋯000−1λ⋯0000−1⋯00⋮⋮⋮⋱⋮⋮000⋯λ0000⋯−1λ∣p^{(k)}(\lambda) = \det(\lambda \mathbf{I} - \mathbf{A}^{(k)}) = \begin{vmatrix} \lambda + c_1 & c_2 & c_3 & \cdots & c_{k-1} & c_k \\ -1 & \lambda & 0 & \cdots & 0 & 0 \\ 0 & -1 & \lambda & \cdots & 0 & 0 \\ 0 & 0 & -1 & \cdots & 0 & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\ 0 & 0 & 0 & \cdots & \lambda & 0 \\ 0 & 0 & 0 & \cdots & -1 & \lambda \\ \end{vmatrix}p(k)(λ)=det(λI−A(k))=​λ+c1​−100⋮00​c2​λ−10⋮00​c3​0λ−1⋮00​⋯⋯⋯⋯⋱⋯⋯​ck−1​000⋮λ−1​ck​000⋮0λ​​

行列式按最后一列展开得:

p(k)(λ)=det⁡(λI−A(k))=λ∣λ+c1c2c3⋯ck−2ck−1−1λ0⋯000−1λ⋯0000−1⋯00⋮⋮⋮⋱⋮⋮000⋯λ0000⋯−1λ∣+ck=λp(k−1)(λ)+ck=λ(λk−1+c1λk−2+⋯+ck−2λ+ck−1)+ck=λk+c1λk−1+⋯+ck−1λ+ck\begin{aligned} p^{(k)}(\lambda) &= \det(\lambda \mathbf{I} - \mathbf{A}^{(k)}) \\ &= \lambda \begin{vmatrix} \lambda + c_1 & c_2 & c_3 & \cdots & c_{k-2} & c_{k-1} \\ -1 & \lambda & 0 & \cdots & 0 & 0 \\ 0 & -1 & \lambda & \cdots & 0 & 0 \\ 0 & 0 & -1 & \cdots & 0 & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\ 0 & 0 & 0 & \cdots & \lambda & 0 \\ 0 & 0 & 0 & \cdots & -1 & \lambda \\ \end{vmatrix} + c_k \\ &= \lambda p^{(k-1)}(\lambda) + c_k \\ &= \lambda (\lambda^{k-1} + c_1\lambda^{k-2} + \cdots + c_{k-2}\lambda + c_{k-1}) + c_k \\ &= \lambda^{k} + c_1\lambda^{k-1} + \cdots + c_{k-1}\lambda + c_k \end{aligned}p(k)(λ)​=det(λI−A(k))=λ​λ+c1​−100⋮00​c2​λ−10⋮00​c3​0λ−1⋮00​⋯⋯⋯⋯⋱⋯⋯​ck−2​000⋮λ−1​ck−1​000⋮0λ​​+ck​=λp(k−1)(λ)+ck​=λ(λk−1+c1​λk−2+⋯+ck−2​λ+ck−1​)+ck​=λk+c1​λk−1+⋯+ck−1​λ+ck​​

也成立!

要求 2

整体算法:

  1. 初始化:令 p0(x)=p(x)p_0(x)=p(x)p0​(x)=p(x),次数为 nnn。
  2. 迭代求根:对 i=1,2,…,n−1i=1,2,\dots,n-1i=1,2,…,n−1,
    • 构造 pi−1(x)p_{i-1}(x)pi−1​(x) 的伴随矩阵 Ai−1\mathbf A_{i-1}Ai−1​,用幂法求 Ai−1\mathbf A_{i-1}Ai−1​ 的按模最大特征值,得到 pi−1(x)p_{i-1}(x)pi−1​(x) 按模最大根 xix_ixi​;
    • 对 pi−1(x)p_{i-1}(x)pi−1​(x) 做综合除法,除以 (x−xi)(x-x_i)(x−xi​) 得到降阶后的商式 pi(x)p_i(x)pi​(x)。
  3. 终止:当多项式降为 1 次时,pn−1(x)=x+cp_{n-1}(x)=x+cpn−1​(x)=x+c,直接得最后一个根 xn=−cx_n=-cxn​=−c。

综合除法:

设当前 mmm 次多项式为

pn−m(x)=xm+c1xm−1+c2xm−2+⋯+cmp_{n-m}(x)=x^{m}+c_1x^{m-1}+c_2x^{m-2}+\cdots+c_{m}pn−m​(x)=xm+c1​xm−1+c2​xm−2+⋯+cm​

设已求得近似根 x=xix=x_ix=xi​,做带余除法:

pn−m(x)=(x−xi) q(x)+r,p_{n-m}(x)=(x-x_i)\,q(x)+r,pn−m​(x)=(x−xi​)q(x)+r,

其中商式 q(x)q(x)q(x) 为 m−1m-1m−1 次多项式,记为

q(x)=xm−1+d1xm−2+d2xm−3+⋯+dm−1q(x)=x^{m-1}+d_1x^{m-2}+d_2x^{m-3}+\cdots+d_{m-1}q(x)=xm−1+d1​xm−2+d2​xm−3+⋯+dm−1​

比较 (x−r)q(x)(x-r)q(x)(x−r)q(x) 与 pn−m(x)p_{n-m}(x)pn−m​(x) 的系数,得到系数递推关系:

d0=1,dk=ck+xi⋅dk−1,k=1,2,…,m−1,r=cm+xi⋅dm−1≈0\begin{aligned} d_0 &= 1,\\ d_k &= c_k + x_i\cdot d_{k-1},\qquad k=1,2,\dots,m-1,\\ r &= c_m + x_i\cdot d_{m-1} \approx 0 \end{aligned}d0​dk​r​=1,=ck​+xi​⋅dk−1​,k=1,2,…,m−1,=cm​+xi​⋅dm−1​≈0​

其中 rrr 约为 0,直接舍去即可。用这些新系数构造下一次迭代的伴随矩阵,继续求根。

题 4.5

系统总输入与总输出

总输入:

  • 用户集合 U={u1,…,uN}U=\{u_1,\dots,u_N\}U={u1​,…,uN​},共 NNN 位匿名用户
  • 原始树洞帖子集合 P={p1,…,pL}P=\{p_1,\dots,p_L\}P={p1​,…,pL​},每个帖子 plp_lpl​ 包含匿名用户 ID u(pl)u(p_l)u(pl​) 与文本内容
  • 食堂菜品名称库 M={d1,…,dM}M=\{d_1,\dots,d_M\}M={d1​,…,dM​}

总输出:

  • 完整预测矩阵 A^∈RN×∣M′∣\hat{\mathbf{A}}\in\mathbb{R}^{N\times |M'|}A^∈RN×∣M′∣,其中 M′⊆MM'\subseteq MM′⊆M 为帖子中出现过的有效菜品集合
  • 每位用户的 Top-KKK 推荐列表(从 M′M'M′ 中选取)

阶段一:NLP 文本量化系统

菜品筛选与用户-菜品帖子聚合

  • 输入:原始树洞帖子集合 PPP;菜品名称库 MMM。
  • 输出:
    • 有效菜品集合 M′={dj∈M:∃ p∈P,  dj∈p}M'=\{d_j\in M:\exists\, p\in P,\; d_j\in p\}M′={dj​∈M:∃p∈P,dj​∈p},即至少被一个帖子提及的菜品子集。

    • 对每个用户 uiu_iui​ 和菜品 dj∈M′d_j\in M'dj​∈M′, 聚合得到 uiu_iui​ 发布的所有提及 djd_jdj​ 的帖子文本集合 Dij=⋃p∈Pu(p)=ui,dj∈ppD_{ij}=\bigcup_{\substack{p\in P\\u(p)=u_i,\,d_j\in p}} pDij​=⋃p∈Pu(p)=ui​,dj​∈p​​p。

      若 uiu_iui​ 从未提及 dj∈M′d_j\in M'dj​∈M′,则 Dij=∅D_{ij}=\emptysetDij​=∅。绝大多数 (i,j)(i,j)(i,j) 对满足 Dij=∅D_{ij}=\emptysetDij​=∅,导致后续口碑矩阵极度稀疏。

实现方式:

  1. 菜品筛选:遍历所有帖子,对菜品库 MMM 中每个名称做子串匹配,统计被至少一个帖子提及的菜品,构成有效菜品集合 M′M'M′。对未在帖子中出现的菜品,系统无法获得任何信息,故不纳入后续预测。
  2. 规则匹配:对 M′M'M′ 中每个 djd_jdj​,在帖子文本中做子串匹配。
  3. 用户归属:按帖子附带的匿名用户ID,将匹配到的文本片段归入对应 DijD_{ij}Dij​。

word2vec 语义空间构建

  • 输入:所有帖子文本拼接成的长词序列。
  • 输出:词向量矩阵 E∈R∣V∣×d\mathbf{E}\in\mathbb{R}^{|V|\times d}E∈R∣V∣×d,词表 VVV 中每个词 www 对应稠密向量 ew∈Rd\mathbf{e}_w\in\mathbb{R}^dew​∈Rd。

算法实现:

使用 Skip-gram 进行训练。将高维稀疏的 one-hot 空间压缩到低维稠密语义空间。

对于中心词 wtw_twt​,定义其上下文窗口为 C(wt)={wt−c,…,wt−1,wt+1,…,wt+c}C(w_t)=\{w_{t-c},\dots,w_{t-1},w_{t+1},\dots,w_{t+c}\}C(wt​)={wt−c​,…,wt−1​,wt+1​,…,wt+c​},其中 ccc 为窗口半径。

目标函数为:

L=∑t=1T∑w∈C(wt)log⁡exp⁡(ew′Tewt)∑v∈Vexp⁡(ev′Tewt)\mathcal{L} =\sum_{t=1}^{T}\sum_{w\in C(w_t)}\log\frac{\exp(\mathbf{e}_w^{\prime\mathsf{T}}\mathbf{e}_{w_t})} {\sum_{v\in V}\exp(\mathbf{e}_v^{\prime\mathsf{T}}\mathbf{e}_{w_t})}L=t=1∑T​w∈C(wt​)∑​log∑v∈V​exp(ev′T​ewt​​)exp(ew′T​ewt​​)​

实际训练中常采用负采样或层次 Softmax 加速优化。

情感语义聚类

  • 输入:词向量矩阵 E\mathbf{E}E;少量人工正面种子词 S+S^+S+ 与负面种子词 S−S^-S−。
  • 输出:正面语义簇 V+V^+V+、负面语义簇 V−V^-V−;种子词向量集合 S+,S−S^+, S^-S+,S− 作为后续相似度计算基准。

算法实现:

V+=⋃s∈S+{w∈V:cos⁡(ew,es)>θ},V−=⋃s∈S−{w∈V:cos⁡(ew,es)>θ}V^+ = \bigcup_{s\in S^+}\{w\in V : \cos(\mathbf{e}_w,\mathbf{e}_s)>\theta\},\quad V^- = \bigcup_{s\in S^-}\{w\in V : \cos(\mathbf{e}_w,\mathbf{e}_s)>\theta\}V+=s∈S+⋃​{w∈V:cos(ew​,es​)>θ},V−=s∈S−⋃​{w∈V:cos(ew​,es​)>θ}

其中 θ\thetaθ 为相似度阈值。

用户-菜品语义特征提取

  • 输入:用户-菜品聚合文本 DijD_{ij}Dij​(dj∈M′d_j\in M'dj​∈M′);词向量矩阵 E\mathbf{E}E;种子词集合 S+,S−S^+, S^-S+,S−.
  • 输出:二维语义特征向量 xij=(xij+,xij−)T\mathbf{x}_{ij}=(x_{ij}^+, x_{ij}^-)^\mathsf{T}xij​=(xij+​,xij−​)T。若 Dij=∅D_{ij}=\emptysetDij​=∅,则特征缺失。

算法实现:

对 DijD_{ij}Dij​ 中每个词 www,计算其与正、负面种子词的最大余弦相似度作为情感权重,累加得到加权和特征:

xij+=∑w∈Dijmax⁡s∈S+cos⁡(ew,es),xij−=∑w∈Dijmax⁡s∈S−cos⁡(ew,es)x_{ij}^+ = \sum_{w\in D_{ij}}\max_{s\in S^+}\cos(\mathbf{e}_w,\mathbf{e}_s),\qquad x_{ij}^- = \sum_{w\in D_{ij}}\max_{s\in S^-}\cos(\mathbf{e}_w,\mathbf{e}_s)xij+​=w∈Dij​∑​s∈S+max​cos(ew​,es​),xij−​=w∈Dij​∑​s∈S−max​cos(ew​,es​)

用户-菜品口碑量化

  • 输入:语义特征 xij=(xij+,xij−)T\mathbf{x}_{ij}=(x_{ij}^+, x_{ij}^-)^\mathsf{T}xij​=(xij+​,xij−​)T(仅对 Dij≠∅D_{ij}\neq\emptysetDij​=∅ 的项,且 dj∈M′d_j\in M'dj​∈M′)。
  • 输出:稀疏口碑矩阵 A~=[a~ij]∈RN×∣M′∣\tilde{\mathbf{A}}=[\tilde{a}_{ij}]\in\mathbb{R}^{N\times |M'|}A~=[a~ij​]∈RN×∣M′∣, 其中 a~ij∈[1,5]\tilde{a}_{ij}\in[1,5]a~ij​∈[1,5] 为用户 uiu_iui​ 对菜品 djd_jdj​ 的文本推断评分;若 Dij=∅D_{ij}=\emptysetDij​=∅,则 a~ij\tilde{a}_{ij}a~ij​ 缺失。

算法实现:

直接基于正面、负面情感权重的比例进行映射,并做拉普拉斯平滑避免除零:

a~ij=1+4⋅xij++1xij++xij−+2\tilde{a}_{ij}=1+4\cdot\frac{x_{ij}^+ + 1}{x_{ij}^+ + x_{ij}^- + 2}a~ij​=1+4⋅xij+​+xij−​+2xij+​+1​

阶段二:SVD 个性化推荐系统

稀疏口碑矩阵的 SVD 补全

  • 输入:稀疏口碑矩阵 A~=[a~ij]\tilde{\mathbf{A}}=[\tilde{a}_{ij}]A~=[a~ij​],由阶段一输出,尺寸 N×∣M′∣N\times |M'|N×∣M′∣。
  • 输出:
    • 完整预测矩阵 A^∈RN×∣M′∣\hat{\mathbf{A}}\in\mathbb{R}^{N\times |M'|}A^∈RN×∣M′∣
    • 每位用户的 Top-KKK 推荐列表(从 M′M'M′ 中选取)

算法实现:

记观测索引集 Ω={(i,j):Dij≠∅}\Omega=\{(i,j): D_{ij}\neq\emptyset\}Ω={(i,j):Dij​=∅}。首先计算全局均值、用户偏差与菜品偏差:

μ=1∣Ω∣∑(i,j)∈Ωa~ijαi=1∣Mi∣∑j∈Mia~ij−μ,  Mi={j:(i,j)∈Ω}βj=1∣Uj∣∑i∈Uja~ij−μ,  Uj={i:(i,j)∈Ω}\begin{aligned} \mu &= \frac{1}{|\Omega|}\sum_{(i,j)\in\Omega}\tilde{a}_{ij} \\ \alpha_i &= \frac{1}{|M_i|}\sum_{j\in M_i}\tilde{a}_{ij} - \mu,\; M_i=\{j:(i,j)\in\Omega\} \\ \beta_j &= \frac{1}{|U_j|}\sum_{i\in U_j}\tilde{a}_{ij} - \mu,\; U_j=\{i:(i,j)\in\Omega\} \end{aligned}μαi​βj​​=∣Ω∣1​(i,j)∈Ω∑​a~ij​=∣Mi​∣1​j∈Mi​∑​a~ij​−μ,Mi​={j:(i,j)∈Ω}=∣Uj​∣1​i∈Uj​∑​a~ij​−μ,Uj​={i:(i,j)∈Ω}​

构造去均值矩阵 B∈RN×∣M′∣\mathbf{B}\in\mathbb{R}^{N\times |M'|}B∈RN×∣M′∣:

  • 若 (i,j)∈Ω(i,j)\in\Omega(i,j)∈Ω,bij=a~ij−μ−αi−βjb_{ij}=\tilde{a}_{ij}-\mu-\alpha_i-\beta_jbij​=a~ij​−μ−αi​−βj​。
  • 否则 bij=0b_{ij}=0bij​=0。

对 B\mathbf{B}B 做截断 SVD:

B≈UkΣkVkT.\mathbf{B} \approx \mathbf{U}_k\mathbf{\Sigma}_k\mathbf{V}_k^{\mathsf{T}}.B≈Uk​Σk​VkT​.

最终预测公式为:

a^ij=μ+αi+βj+uiTΣkvj,\hat{a}_{ij}=\mu+\alpha_i+\beta_j+\mathbf{u}_i^{\mathsf{T}}\mathbf{\Sigma}_k\mathbf{v}_j,a^ij​=μ+αi​+βj​+uiT​Σk​vj​,

其中 uiT\mathbf{u}_i^{\mathsf{T}}uiT​ 与 vj\mathbf{v}_jvj​ 分别为 Uk\mathbf{U}_kUk​ 与 Vk\mathbf{V}_kVk​ 的第 iii、jjj 行。

Top-KKK 推荐生成:

  • 输入:完整预测矩阵 A^=[a^ij]∈RN×∣M′∣\hat{\mathbf{A}}=[\hat{a}_{ij}]\in\mathbb{R}^{N\times |M'|}A^=[a^ij​]∈RN×∣M′∣;用户-菜品聚合关系 DijD_{ij}Dij​;有效菜品集合 M′M'M′。
  • 输出:每位用户 uiu_iui​ 的 Top-KKK 推荐列表 Rec(ui)={dj1,…,djK}⊆M′\text{Rec}(u_i)=\{d_{j_1},\dots,d_{j_K}\}\subseteq M'Rec(ui​)={dj1​​,…,djK​​}⊆M′。

算法实现:

对每位用户 uiu_iui​,筛选其未产生过文本提及的有效菜品(即 dj∈M′d_j\in M'dj​∈M′ 且 Dij=∅D_{ij}=\emptysetDij​=∅ 的项),按预测评分 a^ij\hat{a}_{ij}a^ij​ 降序排列,取前 KKK 个菜品构成个性化推荐列表:

Rec(ui)=Top-Kdj∈M′, Dij=∅a^ij\text{Rec}(u_i) = \mathop{\mathrm{Top}\text{-}K}_{d_j\in M',\, D_{ij}=\emptyset}\hat{a}_{ij}Rec(ui​)=Top-Kdj​∈M′,Dij​=∅​a^ij​

其中 Top-K\mathop{\mathrm{Top}\text{-}K}Top-K 表示取前 KKK 个最大值的索引集合。

目录
  • 题 4.1
  • 题 4.2
  • 题 4.3
  • 题 4.4
    • 要求 1
    • 要求 2
  • 题 4.5
    • 系统总输入与总输出
    • 阶段一:NLP 文本量化系统
      • 菜品筛选与用户-菜品帖子聚合
      • word2vec 语义空间构建
      • 情感语义聚类
      • 用户-菜品语义特征提取
      • 用户-菜品口碑量化
    • 阶段二:SVD 个性化推荐系统
      • 稀疏口碑矩阵的 SVD 补全
© 2026 miniyuan. All rights reserved.
Go to miniyuan's GitHub repo