12

也许我忽略了显而易见的事情,但你如何防止 sympy 重新排列方程?

我在 iPython 笔记本中使用 Sympy,因此我可以轻松地将 Latex 代码复制粘贴到 Lyx,但我希望方程的顺序与我定义它们的顺序相同。

例如,灰体辐射随温度变化的公式:

在此处输入图像描述

Sympy 自动将温度组件放在前面,这给出了一个非常不寻常的公式表示。有没有办法防止这种情况发生?

4

2 回答 2

9

目前,在 SymPy 中无法完全按照输入的内容打印内容,因为该信息甚至没有保存在任何地方。

我相信在乘法中,符号是按字母顺序排列的,大写字母在小写字母之前(基本上是从 开始的顺序ord)。我能想出的最佳技巧是使用 tosymbol_names选项latex,它可以让您更改用于在 LaTeX 表示中的符号的名称。排序仍将基于原始符号的名称,因此您可以欺骗它:

>>> from sympy.abc import epsilon, omega, t
>>> latex(epsilon*sigma*t**4, symbol_names={t:"T"})
\epsilon \sigma T^{4}

如果你想让它在笔记本中很好地打印出来,你必须编写一个自定义版本的打印扩展,将你的symbol_namesdict 传递给latex. 请参阅https://github.com/sympy/sympy/blob/master/sympy/interactive/printing.py(理想情况下,可以将latex选项传递给init_printing,我将在 SymPy 错误跟踪器中为此打开一个问题)。

于 2013-02-02T23:59:11.690 回答
3

如果您希望产品的参数以给定的顺序出现,您可以从这些参数创建一个 Mul,然后告诉打印机您不希望它们重新排序,如此处所示添加。所以对于你的例子,你可以做

>>> var('epsilon, sigma, T')
(epsilon, sigma, T)
>>> this = Mul(epsilon, sigma, T**4, evaluate=False)
>>> StrPrinter({'order':'none'})._print_Mul(this)
epsilon*sigma*T**4
于 2019-10-24T12:45:02.693 回答