Python 如何在Symphy中编写带有符号的点积?

Python 如何在Symphy中编写带有符号的点积?,python,sympy,Python,Sympy,我希望在Symphy中点两个向量或符号,以便(latex)输出类似于下面的代码显示的内容,但使用实际的Symphy函数,例如RA.dot(RB)。。。我该怎么做呢 from sympy import * from sympy.interactive import printing printing.init_printing(use_latex = True) RA = Symbol('\mathbf{R}_A', commutative = False) RB = Symbol('\math

我希望在Symphy中点两个向量或符号,以便(latex)输出类似于下面的代码显示的内容,但使用实际的Symphy函数,例如RA.dot(RB)。。。我该怎么做呢

from sympy import *
from sympy.interactive import printing
printing.init_printing(use_latex = True)

RA = Symbol('\mathbf{R}_A', commutative = False)
RB = Symbol('\mathbf{R}_B', commutative = False)
dt = Symbol('\cdot', commutative = False)

display(RA*dt*RB)

# I would prefer something like

display(RA.dot(RB))  # If RA and RB are type Vector, VectorAdd etc.
很简单。使用以下命令:

A = MatrixSymbol('\mathbf{R}_A', 1, 1)
B = MatrixSymbol('\mathbf{R}_B', 1, 1)
dt = MatrixSymbol('\cdot',1,1)

A*dt*B

或者只是:

A = MatrixSymbol('\mathbf{R}_A', 1, 1)
B = MatrixSymbol('\mathbf{R}_B', 1, 1)

A*B

因此,乳胶产量问题的解决方案是:

from sympy import *
from sympy.interactive import printing
printing.init_printing(use_latex = True)


A, B, dt = symbols('A B \cdot', commutative = False)
display(A*dt*B)
但是,simplify()、expand()、factor()等函数不能很好地处理非交换符号,因此如果您想进行任何数学运算,我建议您使用以下代码:

expr = A*dt*B

l = [i for i in expr.atoms()]
nl = [Symbol(str(i)) for i in l]

for i in range(len(l)):
    expr = expr.subs(l[i],nl[i])

### Perform your maths now that everything is commutative, then revert back to non-comm


非常感谢。第二个版本不输出点积,而是将两个粗体符号相乘。第一个选项似乎没有问题,但当用作分母时,与标准向量不同(例如,看起来像M^-1)。如果使用“pprint(AB)”,则第二位代码会输出点积,而如果使用“display(AB)”(用于乳胶输出),则第二位代码似乎不会输出点积