如果我使用变量名中的下划线生成符号矩阵:
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₀₂⎦
计算似乎没有改变。这种行为只是一个图形问题吗?
答案 0 :(得分:2)
这不仅仅是一个图形问题。回想一下,传递给sp.MatrixSymbol
的第一个参数是SymPy符号。在你的第一个案例中,你正在传递它
>>> v_fluid = sp.MatrixSymbol('v_fluid',1,3)
>>> v_fluid
而在第二种情况下,
>>> v_fluid = sp.MatrixSymbol('vfluid',1,3)
>>> v_fluid
这个SymPy符号由LaTex在漂亮打印时处理。在第一种情况下,您的下划线作为LaTex特殊字符处理,您下标fluid
以及您的数字
v_{fluid}_{0, 0}
结果是
在您的第二种情况下,LaTex不会被任何下划线混淆,只有 下标您的数字
vfluid_{0, 0}
导致这样的符号!
然后,如果你pprint
,双字下标只是按字面处理,这会在矩阵中产生下划线,而vfluid
后面的单个下划线实际上下标你的数字。