在没有评估或简化表达的情况下代替

时间:2018-04-15 12:59:45

标签: python latex sympy

考虑下面的例子:

from sympy import *
x = Symbol('x')
f = sqrt(3*x + 2)

现在我想替换一个数字,比如说5代表x并获得一个LaTeX代表,在这种情况下它应该返回

\\sqrt(3\\cdot 5 + 2)

我该怎么做?

我尝试了latex(f.subs(x,2,evaluate=False)),但这只会导致\\sqrt(17)

1 个答案:

答案 0 :(得分:1)

使用UnevaluatedExpr(5)代替5:

>>> latex(f.subs(x, UnevaluatedExpr(5)))
'\\sqrt{2 + 3 \\cdot 5}'

这个包装器可以防止它内部的表达式(" 5")与外部术语交互。参考:Prevent expression evaluation

替换后加数的顺序不同,因为打印机会对3*x + 23*5 + 2进行不同的排序。为了避免这种情况,可以使用order='none'来保持参数所具有的内部顺序,而不是试图将它们置于人性化的安排中。

>>> latex(f, order='none')
'\\sqrt{2 + 3 x}'
>>> latex(f.subs(x, UnevaluatedExpr(5)), order='none')
'\\sqrt{2 + 3 \\cdot 5}'