【问题标题】:SymPy print only function nameSymPy 仅打印函数名称
【发布时间】:2016-11-19 17:32:28
【问题描述】:

我正在尝试在 SymPy 中进行一些符号计算,但我无法使用乳胶打印并获得我想要的图形输出。这一直困扰着我,并且花了几个小时(可能是几天)试图改进一种自定义对象打印方式的方法(在 LaTeX 中,在 pprint 表示中它有很好的文档记录)。

但是,在这种情况下,我试图对取决于 x、y、z 的未定义函数 psi 进行符号计算。然而,这些计算意味着具有 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.yR.z 是酉笛卡尔向量,已实例化在对 ReferenceFrame 的调用中(来自 sympy.physics 的函数)。

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

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

我正在使用带有 qtconsole 的 jupyter。

干杯,

【问题讨论】:

    标签: python latex sympy


    【解决方案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 )}')。

    【讨论】:

    • 非常感谢。我知道这不会那么难,但是在文档和源代码中经过数小时后我无法做到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    相关资源
    最近更新 更多