我正试图找出,如果我能以某种方式找到符号矩阵的封闭形式的矩阵指数:
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:无法从a1创建mpf”! 然后我尝试使用系列扩展来估算,但是再次:
Sum(A**n, (n, 0, 1))
给出:“ValueError:Matrix det == 0;不可逆”。我猜他们试图通过joran块来获得矩阵的力量,而我的结构对此并不好。我怎么能继续?可以计算A**2
,但A**1
和A**0
之和不是?!
答案 0 :(得分:3)
方法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)))