
本文介绍如何使用 SymPy 计算矩阵指数函数 exp(A*t),并通过对结果逐元素化简,将复指数形式自动转换为三角函数形式(如 cos(t)、sin(t)),从而获得简洁、可读性强的解析解。
本文介绍如何使用 sympy 计算矩阵指数函数 `exp(a*t)`,并通过对结果逐元素化简,将复指数形式自动转换为三角函数形式(如 cos(t)、sin(t)),从而获得简洁、可读性强的解析解。
在符号计算中,SymPy 的 Matrix.exp() 方法可直接计算方阵的矩阵指数(即 e^A)。但需注意:当矩阵含参数(如时间 t)时,exp() 返回的结果常以复指数 exp(I*t) 形式表达,虽数学等价,但缺乏物理直观性。例如,对旋转系统动力学中常见的斜对称矩阵
$$
A = \begin{bmatrix} 0 & 1 \ -1 & 0 \end{bmatrix},
$$
其状态转移矩阵应为 e^(At) = [[cos(t), sin(t)], [-sin(t), cos(t)]],但默认输出却是含 exp(I*t) 的复数表达式。
解决方法是对矩阵结果应用 applyfunc(simplify) ——该操作会对每个矩阵元独立调用 sympy.simplify(),触发欧拉公式识别与三角恒等式合并,从而完成自动化简。
以下是完整可运行示例:
from sympy import Matrix, symbols, I, simplify, cos, sin
t = symbols("t")
A = Matrix([[0, 1], [-1, 0]]) * t # 构造 A*t
A_exp = A.exp() # 计算矩阵指数
A_simplified = A_exp.applyfunc(simplify) # 逐元素化简
print(A_simplified)
输出:
Matrix([ [cos(t), sin(t)], [-sin(t), cos(t)] ])
⚠️ 注意事项:
-
simplify()是启发式化简,对含三角/指数混合的表达式效果显著;若需更强控制,可尝试trigsimp()或expand(complex=True)配合使用; -
applyfunc()是关键:A_exp.simplify()不生效(Matrix.simplify()并非标准方法),必须显式作用于每个元素; - 确保已导入
from sympy import *或显式导入simplify,否则会报NameError; - 该方法适用于任意可对角化或幂零矩阵的符号指数计算,是构建解析解、验证李群性质(如 SO(2))的可靠工具。
通过这一流程,你不仅能获得数学上精确的闭式解,还能确保结果以最符合工程与物理直觉的形式呈现。










