Как в Python упрощать математические выражения с неизвестными переменными?

Пример:

1,75 * x / 1,2 - math.sqrt(x) + (1 - 0,43 * x)

Как упрощать выражения такого типа в Python?


Ответы (1 шт):

Автор решения: insolor

Можно использовать модуль sympy (pip install sympy).

При создании выражения он автоматически частично его упрощает:

from sympy import sqrt, Rational
from sympy.abc import x

f = 1.75 * x / 1.2 - sqrt(x) + (1 - 0.43 * x)
print(f)

Вывод: -sqrt(x) + 1.02833333333333*x + 1

Чтобы избавиться от периодической десятичной дроби, можно преобразовать все значения с плавающей точкой в объекты Rational (рациональные дроби, т.е. например Rational("1.75") превратится в дробь 7/4):

f = Rational("1.75") * x / Rational("1.2") - sqrt(x) + (1 - Rational("0.43") * x)
print(f)

Вывод: -sqrt(x) + 617*x/600 + 1

Для упрощения более сложных выражений можно использовать функцию symplify. Пример из документации:

from sympy import simplify, cos, sin
from sympy.abc import x, y

a = (x + x**2)/(x*sin(y)**2 + x*cos(y)**2)
print(a)  # (x**2 + x)/(x*sin(y)**2 + x*cos(y)**2)
print(simplify(a))  # x + 1
→ Ссылка