Как в 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