Sympy强调MatrixSymbol在漂亮的印刷品中改变了外观

时间:2015-04-15 13:58:17

标签: python sympy

如果我使用变量名中的下划线生成符号矩阵:

import sympy as sp
v_fluid = sp.MatrixSymbol('v_fluid',1,3)
V_fluid = sp.diag(*v_fluid )
sp.pprint(V_fluid )

我获得:

⎡v_fluid_00      0           0     ⎤
⎢                                  ⎥
⎢    0       v_fluid_01      0     ⎥
⎢                                  ⎥
⎣    0           0       v_fluid_02⎦

但如果我不使用下划线:

v_fluid = sp.MatrixSymbol('vfluid',1,3)
V_fluid = sp.diag(*v_fluid )
sp.pprint(V_fluid )

IPython查看器中的输出看起来不同:

⎡vfluid₀₀     0         0    ⎤
⎢                            ⎥
⎢   0      vfluid₀₁     0    ⎥
⎢                            ⎥
⎣   0         0      vfluid₀₂⎦

计算似乎没有改变。这种行为只是一个图形问题吗?

1 个答案:

答案 0 :(得分:2)

这不仅仅是一个图形问题。回想一下,传递给sp.MatrixSymbol的第一个参数是SymPy符号。在你的第一个案例中,你正在传递它

>>> v_fluid = sp.MatrixSymbol('v_fluid',1,3)
>>> v_fluid

enter image description here

而在第二种情况下,

>>> v_fluid = sp.MatrixSymbol('vfluid',1,3)
>>> v_fluid

enter image description here

这个SymPy符号由LaTex在漂亮打印时处理。在第一种情况下,您的下划线作为LaTex特殊字符处理,您下标fluid以及您的数字

v_{fluid}_{0, 0}

结果是

enter image description here

在您的第二种情况下,LaTex不会被任何下划线混淆,只有 下标您的数字

vfluid_{0, 0}

导致这样的符号!

enter image description here

然后,如果你pprint,双字下标只是按字面处理,这会在矩阵中产生下划线,而vfluid后面的单个下划线实际上下标你的数字。