import matplotlib.pyplot as plt
import numpy as np
# Определение функции
def f(x1, x2):
return 1.2 * (2 * x2 - x1**2)**2 + 10 * (1.1 - x1)**2
# Создание сетки
x1 = np.linspace(-2, 3, 30) # подобран диапазон, чтобы видеть область минимума (x1 ~ 1.1, x2 ~ 0.6)
x2 = np.linspace(-1, 2, 30)
X, Y = np.meshgrid(x1, x2)
Z = f(X, Y)
# Построение контуров
plt.figure(figsize=(8, 6))
contour = plt.contour(X, Y, Z, levels=30, cmap='plasma')
plt.colorbar(contour, label='f(x1, x2)')
plt.xlabel('x1')
plt.ylabel('x2')
plt.title('Контуры и градиент функции f(x1,x2) = 1.2*(2*x2 - x1^2)^2 + 10*(1.1 - x1)^2')
# Вычисление градиента (численное)
py, px = np.gradient(Z)
# Визуализация поля градиента
plt.quiver(X, Y, px, py, alpha=0.6)
plt.grid(True)
plt.show()