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


import numpy as np
from scipy.optimize import minimize

def f(x):
    """Целевая функция (коэффициент 1.2)"""
    x1, x2 = x
    return (x1 - 1.1)**2 + (1.2 * x2 - 1.1)**2 - 1.2 * x1 * x2

def grad(x):
    """Аналитический градиент"""
    x1, x2 = x
    df_dx1 = 2 * (x1 - 1.1) - 1.2 * x2
    df_dx2 = 2 * 1.2 * (1.2 * x2 - 1.1) - 1.2 * x1
    return np.array([df_dx1, df_dx2])

def gradient_descent(f, grad, x0, h=2.0, eps=1e-6):
    x = np.array(x0, dtype=float)
    fx = f(x)
    it = 0

    while abs(h) >= eps and it < 1000:
        G = grad(x)
        norm_G = np.linalg.norm(G)

        if norm_G == 0:
            break

        V = G / norm_G
        z = x - h * V
        fz = f(z)

        if fz < fx:
            x = z
            fx = fz
        else:
            if h < eps:
                break
            h /= 3.0

        it += 1

    return x, fx, it

x0 = np.array([0.0, 3.0])
x_min, f_min, it = gradient_descent(f, grad, x0)

print("Градиентный метод (собственная реализация)")
print(f"Точка минимума: ({x_min[0]:.8f}, {x_min[1]:.8f})")
print(f"Значение функции: {f_min:.8f}")
print(f"Число итераций: {it}")

res = minimize(f, x0, jac=grad, method='BFGS')
print("\nПроверка (BFGS):")
print(f"x = ({res.x[0]:.8f}, {res.x[1]:.8f})")
print(f"f = {res.fun:.8f}")