Как собирать дроби в SymPy? - PullRequest
0 голосов
/ 24 сентября 2018

В SymPy 1.3 у меня есть несколько линейных комбинаций, таких как

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

Как заставить дроби быть (5-sqrt(15))/36?

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

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))

print (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.

0 голосов
/ 24 сентября 2018

Это может быть то, что вы хотите.

Используйте оператор Rational от Simpy, чтобы заставить его сохранять 5/36 в дробной форме.

>>> from sympy import *
>>> N1 = 2
>>> N2 = 5
>>> N3 = 7
>>> (N1*(-sqrt(15)/36 + Rational(5, 36)) - 5*N2/18 + N3*(sqrt(15)/36 + Rational(5,36)))
-0.138888888888889 + 5*sqrt(15)/36
>>> import sympy
>>> sympy.__version__
'1.3'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...