Я хочу знать, существует ли общий метод приведения экземпляра sympy.set
к его «простейшей» форме, например, с минимальным количеством объектов набора и минимальным повторением элементов набора, в идеале вложенных линейно. Например:
>>> from sympy.abc import x,y
>>> from sympy import S
>>> from sympy.calculus.util import continuous_domain
>>>
>>>
>>> f = (1-x)/(2+x) - 3*(x-y)/(1+x+y)
>>>
>>> continuous_domain(f, x, S.Reals)
Union(Complement(Interval.open(-oo, -2), Union(Complement(Intersection(FiniteSet(-2, -y - 1), Reals), FiniteSet((y - 3)/4 - sqrt(y**2 + 22*y + 13)/4, (y - 3)/4 + sqrt(y**2 + 22*y + 13)/4)), Intersection(FiniteSet(-y - 1), Reals))), Complement(Interval.open(-2, oo), Union(Complement(Intersection(FiniteSet(-2, -y - 1), Reals), FiniteSet((y - 3)/4 - sqrt(y**2 + 22*y + 13)/4, (y - 3)/4 + sqrt(y**2 + 22*y + 13)/4)), Intersection(FiniteSet(-y - 1), Reals))))
>>>
>>> # Display the answer with pretty printing
>>> from sympy import init_printing
>>> init_printing()
>>>
>>> continuous_domain(f, x, S.Reals)
⎛ ⎛ ⎛ ⎧ ________________ ________________ ⎫⎞⎞⎞ ⎛ ⎛ ⎛ ⎧ ________________ ________________ ⎫⎞⎞⎞
⎜ ⎜ ⎜ ⎪ ╱ 2 ╱ 2 ⎪⎟⎟⎟ ⎜ ⎜ ⎜ ⎪ ╱ 2 ╱ 2 ⎪⎟⎟⎟
⎜ ⎜ ⎜ ⎨ y - 3 ╲╱ y + 22⋅y + 13 y - 3 ╲╱ y + 22⋅y + 13 ⎬⎟⎟⎟ ⎜ ⎜ ⎜ ⎨ y - 3 ╲╱ y + 22⋅y + 13 y - 3 ╲╱ y + 22⋅y + 13 ⎬⎟⎟⎟
⎜(-∞, -2) \ ⎜(ℝ ∩ {-y - 1}) ∪ ⎜(ℝ ∩ {-2, -y - 1}) \ ⎪ ───── - ───────────────────, ───── + ─────────────────── ⎪⎟⎟⎟ ∪ ⎜(-2, ∞) \ ⎜(ℝ ∩ {-y - 1}) ∪ ⎜(ℝ ∩ {-2, -y - 1}) \ ⎪ ───── - ───────────────────, ───── + ─────────────────── ⎪⎟⎟⎟
⎝ ⎝ ⎝ ⎩ 4 4 4 4 ⎭⎠⎠⎠ ⎝ ⎝ ⎝ ⎩ 4 4 4 4 ⎭⎠⎠⎠
Это выглядит как чрезвычайно сложное выражение для решения, которое также можно записать в виде последовательности дополнений и союзов:
>>> Reals - FiniteSet(-y-1) - FiniteSet(-2) + FiniteSet((y - 3)/4 - sqrt(y**2 + 22*y + 13)/4, (y - 3)/4 + sqrt(y**2 + 22*y + 13)/4)
⎧ ________________ ________________ ⎫
⎪ ╱ 2 ╱ 2 ⎪
⎨ y ╲╱ y + 22⋅y + 13 3 y ╲╱ y + 22⋅y + 13 3 ⎬
(ℝ \ {-2, -y - 1}) ∪ ⎪ ─ - ─────────────────── - ─, ─ + ─────────────────── - ─ ⎪
⎩ 4 4 4 4 4 4 ⎭
Я искал документацию, но не нашел никаких методов для sh упрощения выражений сложных множеств, таких как это. Существуют ли такие методы? Если нет, то как я могу написать функцию, которая позволит мне выполнить 1013 * это? 1011 *