实对称矩阵的正交相似对角化

一、知识点分析
实对称矩阵具有以下性质:
- 实对称矩阵的特征值都是实数;
- 不同特征值对应的特征向量正交;
- 可以找到正交矩阵 QQQ,使得QTAQQ^{\mathrm{T}}AQQTAQ为对角阵(对角线上的元素是 AAA 的特征值)。
解题过程为:
- 求矩阵AAA的特征值(解特征方程∣λE−A∣=0|\lambda E - A| = 0∣λE−A∣=0);
- 对每个特征值,求对应的特征向量(解齐次线性方程组 (λE−A)x=0(\lambda E - A)\mathbf{x} = \mathbf{0}(λE−A)x=0);
- 将特征向量正交化、单位化(若同一特征值的特征向量不正交,需用施密特正交化;最后单位化得到单位正交向量组);
- 由单位正交向量组构成正交矩阵 QQQ,此时QTAQQ^{\mathrm{T}}AQQTAQ 为对角阵(对角元为特征值)。
二、具体求解过程
步骤1:计算特征值
矩阵 A=[22−225−4−2−45]A = \begin{bmatrix} 2 & 2 & -2 \\ 2 & 5 & -4 \\ -2 & -4 & 5 \end{bmatrix}A=22−225−4−2−45,特征方程∣λE−A∣=0|\lambda E - A| = 0∣λE−A∣=0。
∣λE−A∣=∣λ−2−22−2λ−5424λ−5∣=(λ−1)2(λ−10) \begin{align*} |\lambda E - A| &= \begin{vmatrix} \lambda - 2 & -2 & 2 \\ -2 & \lambda - 5 & 4 \\ 2 & 4 & \lambda - 5 \end{vmatrix} \\ &= (\lambda - 1)^2 (\lambda - 10) \end{align*} ∣λE−A∣=λ−2−22−2λ−5424λ−5=(λ−1)2(λ−10)
因此,特征值为:λ1=λ2=1\lambda_1 = \lambda_2 = 1λ1=λ2=1(二重特征值),λ3=10\lambda_3 = 10λ3=10(单特征值)
步骤2:求特征向量
-
对于二重特征值 λ=1\lambda = 1λ=1
解方程组(E−A)x=0(E - A)\mathbf{x} = \mathbf{0}(E−A)x=0,计算 E−AE - AE−A:
E−A=[1−2−22−21−54241−5]=[−1−22−2−4424−4] E - A = \begin{bmatrix} 1 - 2 & -2 & 2 \\ -2 & 1 - 5 & 4 \\ 2 & 4 & 1 - 5 \end{bmatrix} = \begin{bmatrix} -1 & -2 & 2 \\ -2 & -4 & 4 \\ 2 & 4 & -4 \end{bmatrix} E−A=1−2−22−21−54241−5=−1−22−2−4424−4
行化简(第二行 - 2×第一行,第三行 + 2×第一行):
[12−2000000] \begin{bmatrix} 1 & 2 & -2 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{bmatrix} 100200−200
同解方程:x1=−2x2+2x3x_1 = -2x_2 + 2x_3x1=−2x2+2x3(x2,x3x_2, x_3x2,x3 为自由变量)取自由变量组合:
- 令 x2=1,x3=0x_2 = 1, x_3 = 0x2=1,x3=0,得 α1=[−210]\mathbf{\alpha}_1 = \begin{bmatrix} -2 \\ 1 \\ 0 \end{bmatrix}α1=−210;
- 令 x2=0,x3=1x_2 = 0, x_3 = 1x2=0,x3=1,得α2=[201]\mathbf{\alpha}_2 = \begin{bmatrix} 2 \\ 0 \\ 1 \end{bmatrix}α2=201。
因此,λ=1\lambda = 1λ=1的线性无关特征向量为α1,α2\mathbf{\alpha}_1, \mathbf{\alpha}_2α1,α2
-
对于单特征值 λ=10\lambda = 10λ=10
解方程组(10E−A)x=0(10E - A)\mathbf{x} = \mathbf{0}(10E−A)x=0,计算 10E−A10E - A10E−A:
10E−A=[10−2−22−210−542410−5]=[8−22−254245] 10E - A = \begin{bmatrix} 10 - 2 & -2 & 2 \\ -2 & 10 - 5 & 4 \\ 2 & 4 & 10 - 5 \end{bmatrix} = \begin{bmatrix} 8 & -2 & 2 \\ -2 & 5 & 4 \\ 2 & 4 & 5 \end{bmatrix} 10E−A=10−2−22−210−542410−5=8−22−254245
行化简(第一行 ÷ 2,第二行 + 第一行,第三行 - 第一行):
[4−11099099]→[4−11011000]→[100.5011000] \begin{bmatrix} 4 & -1 & 1 \\ 0 & 9 & 9 \\ 0 & 9 & 9 \end{bmatrix} \to \begin{bmatrix} 4 & -1 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 0 \end{bmatrix} \to \begin{bmatrix} 1 & 0 & 0.5 \\ 0 & 1 & 1 \\ 0 & 0 & 0 \end{bmatrix} 400−199199→400−110110→1000100.510
同解方程:x1=−0.5x3x_1 = -0.5x_3x1=−0.5x3,x2=−x3x_2 = -x_3x2=−x3(x3x_3x3 为自由变量)令 x3=2x_3 = 2x3=2(消去小数),得 α3=[−1−22]\mathbf{\alpha}_3 = \begin{bmatrix} -1 \\ -2 \\ 2 \end{bmatrix}α3=−1−22
步骤3:特征向量的正交化与单位化
实对称矩阵中,不同特征值的特征向量已正交(λ=1\lambda=1λ=1 的特征向量与 λ=10\lambda=10λ=10的 α3\mathbf{\alpha}_3α3正交,可验证:α1⋅α3=(−2)(−1)+1×(−2)+0×2=2−2+0=0\mathbf{\alpha}_1 \cdot \mathbf{\alpha}_3 = (-2)(-1) + 1×(-2) + 0×2 = 2 -2 +0=0α1⋅α3=(−2)(−1)+1×(−2)+0×2=2−2+0=0),因此仅需对同一特征值的α1,α2\mathbf{\alpha}_1, \mathbf{\alpha}_2α1,α2 施密特正交化。
-
第一步:施密特正交化(针对 α1,α2\mathbf{\alpha}_1, \mathbf{\alpha}_2α1,α2)
令β1=α1=[−210]\mathbf{\beta}_1 = \mathbf{\alpha}_1 = \begin{bmatrix} -2 \\ 1 \\ 0 \end{bmatrix}β1=α1=−210;
计算 β2=α2−(α2,β1)(β1,β1)β1\mathbf{\beta}_2 = \mathbf{\alpha}_2 - \frac{(\mathbf{\alpha}_2, \mathbf{\beta}_1)}{(\mathbf{\beta}_1, \mathbf{\beta}_1)} \mathbf{\beta}_1β2=α2−(β1,β1)(α2,β1)β1:- 内积(α2,β1)=2×(−2)+0×1+1×0=−4(\mathbf{\alpha}_2, \mathbf{\beta}_1) = 2×(-2) + 0×1 + 1×0 = -4(α2,β1)=2×(−2)+0×1+1×0=−4;
- 内积 (β1,β1)=(−2)2+12+02=5(\mathbf{\beta}_1, \mathbf{\beta}_1) = (-2)^2 + 1^2 + 0^2 = 5(β1,β1)=(−2)2+12+02=5;
- 代入得:
β2=[201]−−45[−210]=[2−850+451+0]=[25451] \mathbf{\beta}_2 = \begin{bmatrix} 2 \\ 0 \\ 1 \end{bmatrix} - \frac{-4}{5} \begin{bmatrix} -2 \\ 1 \\ 0 \end{bmatrix} = \begin{bmatrix} 2 - \frac{8}{5} \\ 0 + \frac{4}{5} \\ 1 + 0 \end{bmatrix} = \begin{bmatrix} \frac{2}{5} \\ \frac{4}{5} \\ 1 \end{bmatrix} β2=201−5−4−210=2−580+541+0=52541
此时β1,β2\mathbf{\beta}_1, \mathbf{\beta}_2β1,β2正交,且与 α3\mathbf{\alpha}_3α3正交
-
第二步:单位化(所有正交特征向量)
单位化公式:q=β∥β∥\mathbf{q} = \frac{\mathbf{\beta}}{\|\mathbf{\beta}\|}q=∥β∥β- 对β1\mathbf{\beta}_1β1:
∥β1∥=(−2)2+12+02=5 ⟹ q1=15[−210]=[−255550] \|\mathbf{\beta}_1\| = \sqrt{(-2)^2 + 1^2 + 0^2} = \sqrt{5} \implies \mathbf{q}_1 = \frac{1}{\sqrt{5}} \begin{bmatrix} -2 \\ 1 \\ 0 \end{bmatrix} = \begin{bmatrix} -\frac{2\sqrt{5}}{5} \\ \frac{\sqrt{5}}{5} \\ 0 \end{bmatrix} ∥β1∥=(−2)2+12+02=5⟹q1=51−210=−525550 - 对β2\mathbf{\beta}_2β2:
∥β2∥=(25)2+(45)2+12=4+16+2525=4525=355 \|\mathbf{\beta}_2\| = \sqrt{\left( \frac{2}{5} \right)^2 + \left( \frac{4}{5} \right)^2 + 1^2} = \sqrt{\frac{4 + 16 + 25}{25}} = \sqrt{\frac{45}{25}} = \frac{3\sqrt{5}}{5} ∥β2∥=(52)2+(54)2+12=254+16+25=2545=535
q2=535[25451]=[2515451553] \mathbf{q}_2 = \frac{5}{3\sqrt{5}} \begin{bmatrix} \frac{2}{5} \\ \frac{4}{5} \\ 1 \end{bmatrix} = \begin{bmatrix} \frac{2\sqrt{5}}{15} \\ \frac{4\sqrt{5}}{15} \\ \frac{\sqrt{5}}{3} \end{bmatrix} q2=35552541=1525154535 - 对α3\mathbf{\alpha}_3α3(已正交,直接单位化):
∥α3∥=(−1)2+(−2)2+22=1+4+4=3 \|\mathbf{\alpha}_3\| = \sqrt{(-1)^2 + (-2)^2 + 2^2} = \sqrt{1 + 4 + 4} = 3 ∥α3∥=(−1)2+(−2)2+22=1+4+4=3
q3=13[−1−22]=[−13−2323] \mathbf{q}_3 = \frac{1}{3} \begin{bmatrix} -1 \\ -2 \\ 2 \end{bmatrix} = \begin{bmatrix} -\frac{1}{3} \\ -\frac{2}{3} \\ \frac{2}{3} \end{bmatrix} q3=31−1−22=−31−3232
- 对β1\mathbf{\beta}_1β1:
步骤4:构造正交矩阵 QQQ与对角阵Λ\LambdaΛ
将单位正交特征向量q1,q2,q3\mathbf{q}_1, \mathbf{q}_2, \mathbf{q}_3q1,q2,q3 按列排列,得到正交矩阵 QQQ;对角阵Λ\LambdaΛ 的对角元为特征值(与 QQQ 的列向量一一对应)。
Q=[−2552515−13554515−2305323],Λ=[1000100010] Q = \begin{bmatrix} -\frac{2\sqrt{5}}{5} & \frac{2\sqrt{5}}{15} & -\frac{1}{3} \\ \frac{\sqrt{5}}{5} & \frac{4\sqrt{5}}{15} & -\frac{2}{3} \\ 0 & \frac{\sqrt{5}}{3} & \frac{2}{3} \end{bmatrix}, \quad \Lambda = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 10 \end{bmatrix} Q=−5255501525154535−31−3232,Λ=1000100010
验证:QTAQ=ΛQ^T A Q = \LambdaQTAQ=Λ(实对称矩阵正交相似对角化的核心结果)
三、手写实现

四、代码实现
使用 Python 和 NumPy 计算特征值和特征向量,构造 QQQ。
# 使用numpy.linalg.eigh
import numpy as np# 定义矩阵 A
A = np.array([[2, 2, -2],[2, 5, -4],[-2, -4, 5]])# 计算特征值和特征向量
# numpy.linalg.eig 通用函数求解特征值和特征向量
# numpy.linalg.eigh:专门用于厄米特矩阵,返回:特征值(升序)、特征向量(按列排列)
eigenvalues, eigenvectors = np.linalg.eigh(A)
print(f"特征值为:{eigenvalues}")# eigh返回的特征向量已单位化且正交,直接作为 Q
Q = eigenvectors
print(f"Q =\n{Q}")result = Q.T @ A @ Q
print(f"Q^T A Q =\n{result}")tolerance = 1e-10
result_cleaned = np.where(np.abs(result) < tolerance, 0, result)
print(f"控制误差后的 Q^T A Q =\n{result_cleaned}")# 使用numpy.linalg.eig
# import numpy as np
#
# # 定义矩阵 A
# A = np.array([[2, 2, -2],
# [2, 5, -4],
# [-2, -4, 5]])
#
# # 使用 eig 计算特征值和特征向量
# eigenvalues, eigenvectors = np.linalg.eig(A)
# print(f"原始特征值为: {eigenvalues}")
#
# # 对特征值和特征向量进行排序
# idx = np.argsort(eigenvalues)
# eigenvalues_sorted = eigenvalues[idx]
# eigenvectors_sorted = eigenvectors[:, idx]
# print(f"排序后的特征值: {eigenvalues_sorted}")
#
# # 识别二重特征值
# tolerance = 1e-10
# if abs(eigenvalues_sorted[0] - eigenvalues_sorted[1]) < tolerance:
# #二重特征值,对前两个特征向量进行施密特正交化
# v1 = eigenvectors_sorted[:, 0]
# v2 = eigenvectors_sorted[:, 1]
# v3 = eigenvectors_sorted[:, 2]
#
# # 施密特正交化
# beta1 = v1
# beta2 = v2 - (np.dot(v2, beta1) / np.dot(beta1, beta1)) * beta1
#
# # 单位化所有向量
# q1 = beta1 / np.linalg.norm(beta1)
# q2 = beta2 / np.linalg.norm(beta2)
# q3 = v3 / np.linalg.norm(v3)
#
# # 构建 Q 矩阵
# Q = np.column_stack([q1, q2, q3])
# else:
# # 如果没有重特征值,直接单位化
# Q = eigenvectors_sorted / np.linalg.norm(eigenvectors_sorted, axis=0)
#
# print(f"Q =\n{Q}")
#
# # 验证 Q^T A Q 是否为对角阵
# result = Q.T @ A @ Q
# print(f"Q^T A Q =\n{result}")
#
# tolerance = 1e-10
# result_cleaned = np.where(np.abs(result) < tolerance, 0, result)
# print(f"控制误差后的 Q^T A Q =\n{result_cleaned}")
补充知识点
1.区分用于矩阵特征值分解的函数:numpy.linalg.eig 和 numpy.linalg.eigh
| 对比维度 | numpy.linalg.eig | numpy.linalg.eigh |
|---|---|---|
| 适用矩阵类型 | 任意方阵 | 专门用于厄米特矩阵(复域):满足 ( A = A^H )(共轭转置等于自身); 实域特例:实对称矩阵(满足 ( A = A^T )) |
| 算法与性能 | 采用通用算法(如QR算法),无结构优化; 计算复杂度高,速度较慢; 数值稳定性一般 | 采用对称/厄米特矩阵专用优化算法(如分治QR、Jacobi算法); 充分利用矩阵对称性,速度更快; 数值稳定性更优,内存效率更高 |
| 特征值排序 | 无固定排序规则,输出顺序随机(与矩阵结构、数值计算过程相关) | 特征值严格按升序排列(从最小到最大),结果具有规范性 |
| 特征向量正交性保证 | 不保证特征向量正交: - 不同特征值的特征向量仅线性无关(非对称矩阵); - 实对称矩阵中不同特征值的特征向量天然正交,但同一特征值的特征向量仅线性无关(不正交); - 所有特征向量均不保证单位性(模长≠1) | 强制保证特征向量单位正交: - 不同特征值的特征向量天然正交(矩阵固有性质); - 同一特征值的特征向量自动做施密特正交化; - 所有特征向量均自动单位化(模长=1) |
| 特征值/特征向量性质 | 可能返回复数特征值/特征向量(即使输入是实矩阵,非对称时可能出现) | 特征值必为实数(厄米特矩阵固有性质); 特征向量为实向量(实对称矩阵)或复向量(复厄米特矩阵),但始终满足单位正交 |
2.对于厄米特矩阵
- eigh 会自动对同一特征值的特征向量做施密特正交化,再对所有特征向量单位化,最终返回 “单位正交” 的结果
- eig 不会做这些额外处理,仅返回 “满足特征方程的原始特征向量”
| 函数 | 实对称/厄米特矩阵的特征向量性质 |
|---|---|
np.linalg.eig | 1. 不同特征值:正交(固有性质); 2. 同一特征值:仅线性无关,不一定正交; 3. 所有特征向量:不保证单位性(模长≠1)。 |
np.linalg.eigh | 1. 不同特征值:正交(固有性质); 2. 同一特征值:自动正交化; 3. 所有特征向量:自动单位化(模长=1); 最终结果:单位正交。 |
因此,用eig得到特征向量后,想得到单位正交向量,需要完成:
- 对同一特征值的线性无关特征向量做施密特正交化;
- 对所有正交后的特征向量做单位化
