SymPy仅打印函数名称

时间:2016-11-19 17:32:29

标签: python latex sympy

我试图在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.xR.y和{{ 1}}是单一的笛卡尔向量,在对ReferenceFrame的调用中实例化(来自sympy.physics的函数)。

例如,当我尝试查看R.z时,输出充满了" \ psi(x,y,z)" (用乳胶编译并显示为图像)表示遵循表达式会很乏味。

有没有办法自定义编译的乳胶字符串(这适用于我正在做的其他计算)。如果无法做到这一点,如何解决这个特殊问题(即每次打印功能时都会显示自变量)。

我正在使用jupyter和qtconsole。

干杯,

1 个答案:

答案 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 )}')。