有没有一种方法可以表达不包含矢量的符号表达以及对它们的运算?
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|| ⎠
答案 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⎠ ⎠