小能豆

SymPy 仅打印函数名称

py

我正在尝试在 SymPy 中做一些符号计算,但无法使用 Latex 打印并获得我想要的图形输出。这一直困扰着我,我花了几个小时(也许几天)试图找到一种方法来自定义对象的打印方式(在 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是单位笛卡尔向量,在对 ReferenceFrame(来自 sympy.physics 的函数)的调用中实例化。R.y``R.z

例如,当我尝试查看时curl(curl(rpsi, R), R),输出中充满了“\psi(x, y, z)”(在乳胶中编译并显示为图像),以至于理解表达式变得很乏味。

有没有办法自定义编译后的 latex 字符串(这将适用于我正在做的其他计算)。如果不可能,如何解决这个特定问题(即每次打印函数时显示独立变量)。

我正在使用带有 qtconsole 的 jupyter。


阅读 25

收藏
2024-11-19

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

2024-11-19