如何解决保留分数作为因子
在很多情况下,我希望分数的分子和分母中的符号严格分组在该分数内。例如,我可能想要这个:
16 1
--*-----*(a + b)
37 4*a*b
而不是更简单的
4(a + b)
--------
37*a*b
经过大量的蛮力实验后,我希望这样:
from sympy import Mul,Rational,pretty
from sympy.abc import a,b
left = Rational(16,37)
center = 1 / (4*a*b)
right = a + b
expr = Mul(left,center,right,evaluate=False)
print(pretty(expr))
产生我上面给出的第一个例子。
相反,我得到了这个邪恶的可憎:
1
16*-----*(a + b)
4*a*b
----------------
37
这看起来应该很容易做到,而我只是遗漏了一些东西。
我在写这篇文章时确实找到了一些有用的东西(在下面我自己的答案中给出),但这似乎是一个hacky的解决方法,并且不是很令人满意......这让我觉得这可能是一个错误,但我不确定。
解决方法
感谢 this answer,我发现使用 UnevaluatedExpr
可以满足我的需求。此修改后的代码段:
from sympy import Mul,pretty
from sympy import UnevaluatedExpr
from sympy.abc import a,b
left = UnevaluatedExpr(16) / 37
center = 1 / (4*a*b)
right = a + b
expr = Mul(left,center,right,evaluate=False)
print(pretty(expr))
给出:
16 1
--*-----*(a + b)
37 4*a*b
然而,这感觉真的 hacky。 sympy docs 中的所有内容似乎都表明使用 Rational
是从数字文字创建分数的正确方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。