【问题标题】:Sympy - dot product and norm of symbolic vectorSympy - 符号向量的点积和范数
【发布时间】:2020-06-16 23:05:41
【问题描述】:

有没有一种方法可以表达一个符号表达式,其中涉及向量和对它们的操作,而不需要对它们求值?

from sympy import symbols, acos, MatrixSymbol, Matrix

rA = MatrixSymbol("r^A", 2, 1)
rB = MatrixSymbol("r^B", 2, 1)
rA, rB = Matrix(rA), Matrix(rB) # Basically I want to skip this step
acos((rA.dot(rB)) / rA.norm())

这会将表达式计算为:

    ⎛r_00__A⋅r_00__B + r_10__A⋅r_10__B ⎞ 
acos⎜─────────────────────────────────⎟
    ⎜      _________________________  ⎟
    ⎜     ╱          2            2   ⎟
    ⎝   ╲╱  │r_00__A│  + │r_10__A│    ⎠

但相反,我希望它评估为这样的东西,同时仍然能够稍后替换符号向量。

    ⎛ r_A⋅r_B ⎞
acos⎜─────────⎟
    ⎝ ||r_A|| ⎠

【问题讨论】:

    标签: python sympy


    【解决方案1】:

    您可以将.dot.norm 替换为矩阵乘积:acos(A.T*B/sqrt(A.T*A))
    最小的工作示例:

    In [1]: from sympy import *
    In [2]: init_printing(use_unicode=True)
    In [3]: init_printing(use_latex=False)
    In [4]: A = MatrixSymbol('A', 2, 1)
    In [5]: B = MatrixSymbol('B', 2, 1)
    In [6]: acos(A.T*B/sqrt(A.T*A))
    Out[6]: 
        ⎛           -1/2⎞
        ⎜ T   ⎛ T  ⎞    ⎟
    acos⎝A ⋅B⋅⎝A ⋅A⎠    ⎠
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-18
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多