【问题标题】:Sympy Symbolic Matrix ExponentialSympy 符号矩阵 指数
【发布时间】:2017-11-11 16:33:12
【问题描述】:

我想知道,如果我能以某种方式找到符号矩阵的封闭形式的矩阵指数:

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**1A**0的和不行?!

【问题讨论】:

    标签: python matrix sympy


    【解决方案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 提高到 symbolic 幂 n。仅对可逆 A 实现矩阵的符号幂运算;很难想象不可逆的应该是什么。相反,使用 Python 的 sum,给它一个零矩阵 initial value of the accumulator

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

    【讨论】:

    • 非常感谢!我仍然想知道,为什么 sum 不起作用,但 exp 确实可以完成工作!好的!我越来越喜欢同情了!
    • 很高兴得到 2 个解释!在这里可以学到很多东西!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多