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


# Программа 3: Поверхность (цветовая карта), линии уровня, стрелки градиентов, точки минимумов
import numpy as np
import matplotlib.pyplot as plt

# Функция и её градиент
def f(x):
    return x[0]**2 + x[1]**2 + 1.1*x[0]*x[1] + x[0] - x[1] + 1.1

def grad(x):
    return np.array([2*x[0] + 1.1*x[1] + 1,
                     2*x[1] + 1.1*x[0] - 1])

# Точки минимумов (из ваших расчётов)
x_nm = np.array([-1.1111369,  1.11114087])   # из Nelder-Mead
x_gd = np.array([-1.11111044, 1.11111044])   # из градиентного

# Сетка
xx = np.linspace(-2.5, 2.5, 100)
X, Y = np.meshgrid(xx, xx)
Z = f([X, Y])

# --- Рисуем ---
plt.figure(figsize=(12, 5))

# Левый подграфик: "поверхность" в виде цветовой карты (это проекция поверхности)
plt.subplot(1, 2, 1)
plt.pcolormesh(X, Y, Z, shading='auto', cmap='viridis')
plt.colorbar(label='f(x1, x2)')
plt.contour(X, Y, Z, levels=15, colors='white', linewidths=0.5)
plt.plot(x_nm[0], x_nm[1], 'ro', markersize=8, label='Нелдер-Мид')
plt.plot(x_gd[0], x_gd[1], 'b^', markersize=8, label='Градиентный')
plt.xlabel('x1')
plt.ylabel('x2')
plt.title('Цветовая карта функции (поверхность)')
plt.legend()
plt.axis('equal')

# Правый подграфик: линии уровня и стрелки градиентов
plt.subplot(1, 2, 2)
contour = plt.contour(X, Y, Z, levels=20, cmap='viridis')
plt.clabel(contour, inline=True, fontsize=8)
plt.plot(x_nm[0], x_nm[1], 'ro', markersize=8, label='Нелдер-Мид')
plt.plot(x_gd[0], x_gd[1], 'b^', markersize=8, label='Градиентный')

# Стрелки градиентов (редкая сетка)
Xq, Yq = np.meshgrid(np.linspace(-2.5, 2.5, 12), np.linspace(-2.5, 2.5, 12))
U, V = np.zeros_like(Xq), np.zeros_like(Yq)
for i in range(Xq.shape[0]):
    for j in range(Xq.shape[1]):
        g = grad([Xq[i,j], Yq[i,j]])
        U[i,j], V[i,j] = g[0], g[1]
# Нормируем для красоты
norm = np.sqrt(U**2 + V**2) + 1e-8
U /= norm
V /= norm
plt.quiver(Xq, Yq, U, V, alpha=0.6, width=0.004, scale=25)

plt.xlabel('x1')
plt.ylabel('x2')
plt.title('Линии уровня и градиенты')
plt.legend()
plt.axis('equal')
plt.grid(alpha=0.3)

plt.tight_layout()
# Сохраняем в файл на всякий случай
plt.savefig('graphics_variant16.png', dpi=150)
print("График сохранён в файл 'graphics_variant16.png'")
plt.show()