2

我想得到p__s_alpha = 1/k * Product(a_0,(i,1,O))乳胶的表达。我用:

print sympy.latex(p__s_alpha)

当我对结果运行乳胶时,我得到以下等式:

不正确

但是,我想打印这个等式:

正确的

有没有办法让表达式的表示保持原样?

4

1 回答 1

2

我开始写一个关于如何制作自己的自定义打印机来执行此操作的答案,但是我意识到已经有一个选项可以满足您的latex需求,即long_frac_ratio选项。如果该比率足够小,则任何足够小的分数都将打印为1/b*a而不是a/b.

In [31]: latex(p__s_alpha, long_frac_ratio=1)
Out[31]: '\\frac{1}{k} \\prod_{i=1}^{O} a_{0}'

如果您有兴趣,以下是我将要写的关于编写自定义打印机的一些内容:

在内部,SymPy 不区分a/ba*1/b。它们都由完全相同的对象表示(参见http://docs.sympy.org/latest/tutorial/manipulation.html)。

但是,打印系统不同。正如您从该页面中看到的那样,a/b表示为Mul(a, Pow(b, -1)),即 ,a*b**-1但它是将其转换为分数格式的打印机(这适用于任何打印机,而不仅仅是 LaTeX 打印机)。

对您来说好消息是 SymPy 中的打印系统非常可扩展(另一个好消息是 SymPy 是 BSD 开源的,因此您可以自由地重用在扩展它时已经存在的打印逻辑)。要创建一个自定义的 LaTeX 打印机来满足您的需求,您需要继承LatexPrintersympy.printing.latex覆盖该_print_Mul函数(因为如上所述,a/b是 a Mul)。此函数中的逻辑并没有真正模块化拆分,因此您确实需要复制整个源代码并更改它的相关部分[正如我上面提到的,对于这个,已经有一个选项可以满足您的需求,但在其他情况下,可能没有]。

最后一点,如果您进行的修改可能需要更广泛的受众,我们希望您将其作为拉取请求提交给 SymPy。

于 2013-10-01T22:06:50.203 回答