防止Sympy重新排列等式

时间:2013-01-31 11:20:15

标签: python sympy

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

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

例如,灰体辐射的公式是其温度的函数:

enter image description here

Sympy自动将温度组件放在前面,这给出了一个非常不寻常的公式表示。反正有没有阻止这个?

2 个答案:

答案 0 :(得分:7)

目前,SymPy无法完全按照输入的内容进行打印,因为这些信息甚至无法保存在任何地方。

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

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

如果您希望在笔记本中打印得非常漂亮,则必须编写自定义版本的打印扩展程序,将symbol_names dict传递给latex。请参阅https://github.com/sympy/sympy/blob/master/sympy/interactive/printing.py(理想情况下,可以将latex选项传递给init_printing,我将在SymPy错误跟踪器中打开一个问题。

答案 1 :(得分:0)

如果您希望产品的参数以给定的顺序显示,则可以根据这些参数创建一个Mul,然后告诉打印机您不希望对它们进行重新排序,如here所示。因此,对于您的示例,您可以这样做

>>> 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