如何在SymPy输出中将分数放在括号前?

5

我有一个SymPy表达式,以字符串格式看起来像这样:

-t*(a+b+c)/2

当以LaTeX格式(包括笔记本的LaTeX输出)美观地打印时,它太高并且不太容易阅读。

我该如何将分数合并并放在括号前面?像这样:

(-t/2)*(a+b+c)

代码示例:
from sympy import symbols, Function, Derivative, var, init_printing, pprint, latex

init_printing()
def T(y):
    var('mu')
    return -1 / (2 * mu) * Derivative(y, x, x)

def V(y):
    var('x')
    V = Function('V', commutative=True)(x)
    return V * y

def K(y):
    var('x')
    K = Function('K', commutative=True)(x)
    return K * y

def a1(y):
    var('tau', positive=True)
    return tau * (T(y) + V(y))

def c(A, B):
    def comm(y):
        return A(B(y)) - B(A(y))
    return comm

var('x')
var('t')
f = Function('psi', commutative=False)

c1k = c(a1, K)
print(latex(c1k(f(x,t)).doit().simplify()))

打印和显示

- \frac{\tau \left(2 \frac{d}{d x} K{\left (x \right )} \frac{\partial}{\partial x} \psi{\left (x,t \right )} + \frac{d^{2}}{d x^{2}} K{\left (x \right )} \psi{\left (x,t \right )}\right)}{2 \mu}

我希望在LaTeX()和Jupyter笔记本中都能看到。

-\frac{\tau}{2}\left(...\right)

1
你能否提供一些代码示例来展示如何使用这个表达式?(包括导入sympy等) - Basj
@user4412195 已更新。 - homocomputeris
1
我复制粘贴了你的代码,在 SymPy 1.1.1 中得到了“- \frac{\tau}{2 \mu} \left( ...”,也许需要更新? - user6655984
@user4412195 我使用今天的主分支,其中修复了非交换函数。也许是一个回归问题? - homocomputeris
1个回答

3
SymPy 1.1.1默认会分解长分数。这导致了一些投诉, 并且有PR禁用了当前主干分支的此行为。
要重新启用以前的默认设置,请使用long_frac_ratio=2:

在我们开始分解长分数之前,允许分子宽度与分母宽度的比率。- SymPy文档

>>> print(latex(c1k(f(x,t)).doit().simplify(), long_frac_ratio=2))
- \frac{\tau}{2 \mu} \left(2 \frac{d}{d x} K{\left (x \right )} \frac{\partial}{\partial x} \psi{\left (x,t \right )} + \frac{d^{2}}{d x^{2}} K{\left (x \right )} \psi{\left (x,t \right )}\right)

设置可以包含在init_printing中:

init_printing(long_frac_ratio=2)

有没有一个简单的参数列表可以传递给 init_printing()?我觉得文档有点混乱。 - homocomputeris
@homocomputeris 如果在init_printing文档字符串中未包含的任何参数都将传递给打印机,此处为“latex”。因此,如果您查看“latex”的帮助(链接在答案中),它会列出您可以传递的选项。 - asmeurer
从SymPy 1.3开始,“'long_frac_ratio'是print()的无效关键字参数”。 - homocomputeris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接