在SymPy 1.3中,我有一些线性组合,例如
N1*(-sqrt(15)/36 + 5/36) - 5*N2/18 + N3*(sqrt(15)/36 + 5/36)
如何强制将分数设为(5-sqrt(15))/36
?
答案 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}}