2017-11-11 127 views
0

我想找到了,如果我能以某种方式找到一种封闭形式的符号矩阵指数矩阵: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]) 

然而

expm(A) 

似乎不工作,“TypeError:无法创建mp1从a1”! 后来我试着用级数展开得到的估计,但再次:

Sum(A**n, (n, 0, 1)) 

给出了: “ValueError异常:矩阵DET == 0;不可逆”。我想他们试图通过古兰经块来获得矩阵的力量,而我的结构对此并不好。我怎么能继续? A**2可以计算,但是A**1A**0的总和不??

回答

1

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

SymPy使用exp代替matrix exponentiation。我建议将它与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)]]) 

如果希望计算幂级数的部分和用于EXP(A),这样做的方式是不

Sum(A**n/factorial(n), (n, 0, 5)) 

因为上述将尝试在插入特定值之前将A提升至符号的功率n。将矩阵提升为符号能力仅用于可逆A;很难想象它对于不可逆的应该是什么。相反,使用Python的sum,给它一个零矩阵作为initial value of the accumulator

sum([A**n/factorial(n) for n in range(6)], zeros(*(A.shape))) 
+0

非常感谢!我仍然想知道,为什么这个总和没有奏效,但是这个工作确实完成了!太好了!我越来越喜欢sympy! – mike

+0

非常高兴为2个解释!很多要在这里学习!非常感激! – mike