Sympy-点积和符号向量规范

时间:2019-03-19 09:57:20

标签: python sympy

有没有一种方法可以表达不包含矢量的符号表达以及对它们的运算?

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|| ⎠

1 个答案:

答案 0 :(得分:3)

您可以将.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⎠    ⎠