我试图在SymPy中进行一些符号计算,但我无法使用乳胶打印并获得我想要的图形输出。这一直困扰着我,并花了几个小时(也许是几天)试图精确定制对象的打印方式(在LaTeX中,在pprint表示中,它已被很好地记录)。
但是,在这种情况下,我试图对未定义函数psi进行符号计算,这取决于x,y,z。但是,这些计算意味着条件最多为psi * \ vec r卷曲的三倍。
我有以下代码
init_printing(use_latex=True)
R = ReferenceFrame(r"E", variables=["x", "y", "z"])
psi = Function(r"\psi")(R[0], R[1], R[2])
rpsi = (R[0]*R.x + R[1]*R.y + R[2]*R.z)*psi
如果您不熟悉,R[i]
是第i个变量(x,y或z)和R.x
,R.y
和{{ 1}}是单一的笛卡尔向量,在对ReferenceFrame的调用中实例化(来自sympy.physics的函数)。
例如,当我尝试查看R.z
时,输出充满了" \ psi(x,y,z)" (用乳胶编译并显示为图像)表示遵循表达式会很乏味。
有没有办法自定义编译的乳胶字符串(这适用于我正在做的其他计算)。如果无法做到这一点,如何解决这个特殊问题(即每次打印功能时都会显示自变量)。
我正在使用jupyter和qtconsole。
干杯,
答案 0 :(得分:1)
最简单的方法是创建一个自定义函数,可以根据需要进行打印。您可以通过继承Function
并定义_latex
来实现此目标(请参阅http://docs.sympy.org/latest/modules/printing.html#sympy.printing.latex.LatexPrinter.printmethod)。
In [33]: class psi(Function):
....: def _latex(self, printer):
....: return r'\psi'
....:
In [34]: latex(psi(x, y, z))
Out[34]: '\\psi'
如果您要打印参数,请使用self.args
访问它们并使用printer._print
(例如,通常的打印机类似于r'\phi{\left (' + ', '.join(printer._print(i) for i in self.args) + '\right )}'
)。