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