Sympy 符号矩阵指数

mik*_*ike 4 python matrix sympy

我试图找出,如果我能以某种方式找到符号矩阵的封闭形式的矩阵指数:

n=3;
a = symbols(['a'+str(1+k) for k in range(n)], real=True);
Ts = symbols('T_s',real=True,positive=True);
A = Matrix([zeros(1,n),eye(1,n),a])
Run Code Online (Sandbox Code Playgroud)

然而

expm(A)
Run Code Online (Sandbox Code Playgroud)

似乎不起作用,“类型错误:无法从 a1 创建 mpf”!然后我尝试使用系列扩展进行估计,但再次:

Sum(A**n, (n, 0, 1))
Run Code Online (Sandbox Code Playgroud)

给出:“ValueError:Matrix det == 0;不可逆”。我猜他们试图通过 joran 块来获得矩阵的力量,而我的结构并不适合。我该如何继续?A**2可以计算,但总和过A**1A**0不是?!

小智 6

该方法expm属于 mpmath 库,由 SymPy 用于数值计算。它仅适用于数值矩阵。

SymPyexp用于矩阵求幂。我建议将它与 一起使用simplify,因为exp 您的矩阵的输出比它可能更复杂。简化的结果simplify(exp(A))

Matrix([
[                                          1,                   0,       0],
[                                          1,                   1,       0],
[(-a2*a3 + (a1*a3 + a2)*(exp(a3) - 1))/a3**2, a2*(exp(a3) - 1)/a3, exp(a3)]])
Run Code Online (Sandbox Code Playgroud)

如果希望计算 exp(A) 的幂级数的部分和,则方法不是

Sum(A**n / factorial(n), (n, 0, 5))
Run Code Online (Sandbox Code Playgroud)

因为上面将尝试在插入特定值之前将A 提高到符号幂 n。将矩阵提升到符号幂仅适用于可逆 A;很难想象不可逆的应该是什么。相反,使用 Python 的sum,给它一个零矩阵作为累加器的初始值

sum([A**n / factorial(n) for n in range(6)], zeros(*(A.shape)))
Run Code Online (Sandbox Code Playgroud)