Загрузка данных


u3 = x*y + x^3 + 3*y^3 + x^2*y^2

# Стационарные точки внутри
eq3x = diff(u3, x) == 0
eq3y = diff(u3, y) == 0
crit3 = solve([eq3x, eq3y], [x, y], solution_dict=True)
inside_vals3 = []
for sol in crit3:
    xv, yv = sol[x], sol[y]
    if abs(xv) < 2 and abs(yv) < 2 and xv in RR and yv in RR:
        inside_vals3.append(u3.subs(x=xv, y=yv))
# Исследование границ
u3_y2 = u3.subs(y=2)
u3_ym2 = u3.subs(y=-2)
u3_x2 = u3.subs(x=2)
u3_xm2 = u3.subs(x=-2)
vals3_y2 = find_extrema_on_segment(u3_y2, x, -2, 2)
vals3_ym2 = find_extrema_on_segment(u3_ym2, x, -2, 2)
vals3_x2 = find_extrema_on_segment(u3_x2, y, -2, 2)
vals3_xm2 = find_extrema_on_segment(u3_xm2, y, -2, 2)
vals3_corners = [u3.subs(x=cx, y=cy) for (cx,cy) in corners]
all_vals3 = inside_vals3 + vals3_y2 + vals3_ym2 + vals3_x2 + vals3_xm2 + vals3_corners
min3 = min(all_vals3)
max3 = max(all_vals3)
print(f"Минимум = {min3.n()} (точное: {min3})")
print(f"Максимум = {max3.n()} (точное: {max3})")