如何在SymPy中收集分数?

时间:2018-09-24 12:09:41

标签: python python-3.x sympy

在SymPy 1.3中,我有一些线性组合,例如

N1*(-sqrt(15)/36 + 5/36) - 5*N2/18 + N3*(sqrt(15)/36 + 5/36)

如何强制将分数设为(5-sqrt(15))/36

2 个答案:

答案 0 :(得分:2)

应用together,可以将其称为函数together(expr)或方法expr.together()。如果将其应用于整个表达式,则结果可能是收集过多:

N1, N2, N3 = symbols('N1 N2 N3')
expr = N1*(-sqrt(15)/36 + S(5)/36) - 5*N2/18 + N3*(sqrt(15)/36 + S(5)/36)
print(together(expr))

打印(N1*(-sqrt(15) + 5) - 10*N2 + N3*(sqrt(15) + 5))/36

这里是一个将together应用于每个符号系数的版本。

for sym in expr.free_symbols:
    expr = expr.xreplace({expr.coeff(sym): together(expr.coeff(sym))})
print(expr)

打印N1*(-sqrt(15) + 5)/36 - 5*N2/18 + N3*(sqrt(15) + 5)/36

答案 1 :(得分:0)

这可能就是您想要的。

使用sympy的Rational运算符强制其以分数形式保留5/36。

{{1}}