You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中求解含对角矩阵的特征方程的特征值

求解|A - λD|=0的特征值(D为对角矩阵)

嘿,这个问题其实可以通过数学转化或者符号计算来解决,不用自己从零实现复杂的行列式求解和多项式根计算。我分两种常见情况给你讲清楚:

情况1:对角矩阵D可逆(对角元素无0)

当D可逆时,我们可以把原方程转化为常规的特征值问题:

|A - λD| = 0
两边同时左乘D⁻¹,得到 |D⁻¹A - λI| = 0

这就意味着原方程的特征值就是矩阵D⁻¹A的特征值,直接用numpy的线性代数工具就能搞定。

Python代码示例(numpy)

import numpy as np

# 定义矩阵A和对角矩阵D
A = np.array([[2, 1], [1, 2]])
D = np.array([[3, 0], [0, 4]])  # 可逆对角矩阵,对角元素无0

# 计算D的逆(对角矩阵的逆就是对角元素取倒数)
D_inv = np.diag(1 / np.diag(D))

# 计算D^{-1}A
M = D_inv @ A

# 求解特征值
eigenvalues = np.linalg.eigvals(M)
print("特征值:", eigenvalues)

情况2:对角矩阵D不可逆(对角元素含0)

如果D有0元素,没法直接求逆,这时候可以用符号计算工具sympy来构造特征多项式,然后求根。

Python代码示例(sympy)

import sympy as sp

# 定义符号λ
lambda_sym = sp.symbols('λ')

# 定义矩阵A和对角矩阵D(这里D有一个0元素)
A = sp.Matrix([[2, 1], [1, 2]])
D = sp.Matrix([[3, 0], [0, 0]])

# 构造矩阵A - λ*D
matrix = A - lambda_sym * D

# 计算行列式(特征多项式)
char_poly = matrix.det()

# 求解特征方程char_poly = 0
eigenvalues = sp.solve(char_poly, lambda_sym)
print("特征值:", eigenvalues)

补充说明

  • 如果你的矩阵是数值型且规模较大,优先用numpy的方法(情况1),效率更高;
  • 如果需要精确的符号解或者D不可逆,用sympy的符号计算更合适;
  • 要是D是稀疏对角矩阵,也可以用scipy的稀疏矩阵工具来优化计算,避免不必要的内存开销。

内容的提问来源于stack exchange,提问作者Juan Manuel J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:06:46