首页 > 解决方案 > 如何在 SymPy 中收集分数?

问题描述

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

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

我如何强制分数是(5-sqrt(15))/36

标签: pythonpython-3.xsympy

解决方案


Apply 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


推荐阅读