当符号是标量时,在 sympy 输出中抑制符号的转置

Suppress the transpose of a symbol in sympy output when the symbol is a scalar

我正在尝试使用 sympy 在 python 中进行一些符号计算。因此,我定义了一些标量和矩阵符号。但是,控制台中的打印输出看起来很难看,我希望它更紧凑。更具体地说,我有一个标量符号 dt,它被插入到矩阵 Fd 中。如果我打印 Fd 的转置,包含 dt 的条目将打印为 transpose(dt)。这是我的代码:

#!/usr/bin/python
from sympy import *

dt = Symbol('dt')

A = MatrixSymbol('A',3,3)
B = MatrixSymbol('B',3,3)
C = MatrixSymbol('C',3,3)
D = MatrixSymbol('D',3,3)
E = MatrixSymbol('E',3,3)
F = MatrixSymbol('F',3,3)
Ct = MatrixSymbol('Ct',3,3)
I = Identity(3)
O = ZeroMatrix(3,3 )

Fd = BlockMatrix([[I, dt*I, A, B, -Ct*(dt*dt)/2], [O, I, C, D, -Ct*dt], [O, O, E, F, O], [O, O, O, I, O], [O, O, O, O, I]])
print "======================="
print "Fd = "
print Fd
print "======================="

Fdt = Fd.T
print "======================="
print "Fdt = "
print Fdt
print "======================="

这是输出:

=======================
Fd = 
Matrix([
[I, dt*I, A, B, (-dt**2/2)*Ct],
[0,    I, C, D,      (-dt)*Ct],
[0,    0, E, F,             0],
[0,    0, 0, I,             0],
[0,    0, 0, 0,             I]])
=======================
=======================
Fdt = 
Matrix([
[                        I,                    0,  0, 0, 0],
[                  (dt*I)',                    I,  0, 0, 0],
[                       A',                   C', E', 0, 0],
[                       B',                   D', F', I, 0],
[(-transpose(dt)**2/2)*Ct', (-transpose(dt))*Ct',  0, 0, I]])
=======================

我想要一个更紧凑的输出(因为我会做更多的矩阵乘法),其中 dt 实际上被识别为标量符号(因此不打印转置)。有人知道怎么做吗?

确实,不知道通用的 sympy 对象是否等于它的转置。如果您希望 dt 被视为实数或复数标量,请将其声明为:

dt = Symbol('dt', real=True)

dt = Symbol('dt', complex=True)

然后你将在输出中得到 dt 而不是 transpose(dt)

参考:assumptions