【问题标题】:sympy Matrices not alignedsympy 矩阵未对齐
【发布时间】:2016-01-18 22:50:30
【问题描述】:

我正在尝试使用 sympy 来帮助我隔离矩阵表达式中的向量。我写了这段代码:

    import sympy
    from sympy import symbols, MatrixSymbol, Matrix
    from sympy import Identity    

    Xp = MatrixSymbol('Xp', 3,1)
    t = MatrixSymbol('t', 3,1)
    n = MatrixSymbol('n', 3,1)
    H = n.T*Xp*Identity(3) - t*n.T

我的目的是隔离 n。我不确定 sympy 是否可以做到这一点,但我已经得到一个 'ShapeError: Matrices n'*Xp and I are not aligned',我认为这个错误不应该发生,因为 n'*Xp 是一个标量,所以它应该是能够与矩阵相乘。

如何使表达式n.T*Xp*Identity(3) 有效? 而且,sympy 能帮我分离出这个方程中的向量 n 吗?

【问题讨论】:

    标签: python math matrix sympy


    【解决方案1】:
    n.T*Xp*Identity(3) 
    

    有维度签名

    (1,3)*(3,1)*(3,3)
    

    这显然行不通。

    n*Xp.T*Identity(3) 
    

    可以工作。


    如果你想解决

    H=(n.T*X)*I-t*n.T
    

    对于n,第一句话是这并不总是可能的。假设存在解决方案,请注意

    1/(t.T*t)*t.T*H=1/(t.T*t)*(n.T*X)*t.T-n.T
    

    这样

    n = a*t - b*H.T*t
    

    a 未知,b=1/(t.T*t)。代入原方程得到

    H = (a*t.T*X-b*t.T*H*X)*I - a*t*t.T + b*t*t.T*H
    

    H - b*t*t.T*H +b*(t.T*H*X)*I = a*((t.T*X)*I - t*t.T)
    

    在右侧矩阵的每个重要组成部分中,它都会给出a 的值,但只有当所有这些值都相同时才存在解决方案。

    【讨论】:

    • n.T*Xp 是一个 (1,1) 矩阵,我假设 sympy 可以将其解释为标量。有没有可以用来强制执行此操作的转换功能? then 是一个标量矩阵乘法。请注意,即使我在 n.T*Xp 周围加上括号,它也不起作用
    • 这个 matlab 约定是一罐蠕虫。我认为即使是 1×1 矩阵,它仍然是一个矩阵对象,你需要像 Kronecker 产品这样的东西才能正确地进行乘法运算。或者(n.T*Xp)[0,0] 可能有效。
    • 好的,谢谢。如果我写H = (n.T*Xp)[0,0]*Identity(3) - t*n.T 它可以工作。我现在想解决 n 。我试过解决(H,n)但它抱怨'str'对象没有属性'is_Piecewise'??
    • 这样的解决方案很可能不存在,我已经添加了一个关于它的部分。您可能想寻找最小的错误解决方案。
    • 目前无法求解矩阵表达式,除非先将矩阵表达式替换为非交换符号。见github.com/sympy/sympy/issues/7379
    猜你喜欢
    • 2012-11-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2014-03-22
    • 2017-01-12
    • 1970-01-01
    • 2012-02-03
    相关资源
    最近更新 更多