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


import numpy as np  # добавлен импорт

def simplex(f, x, eps=1e-5, alpha=1, beta=0.5, gamma=2, sigma=0.5):
    x = np.stack((x + [0., 0.5], x + [-0.5, -0.5], x + [0.5, -0.5]), axis=-1)
    fx = f(x)
    it = 0
    while np.var(fx) > eps:  # исправлено: np_var -> np.var
        ix = np.argsort(fx)
        fx = fx[ix]
        x = x[:, ix]
        xo = np.mean(x[:, :-1], axis=1)
        xr = xo + alpha * (xo - x[:, -1])
        fxr = f(xr)
        if fx[0] <= fxr < fx[-2]:
            xr = xo + alpha * (xo - x[:, -1])
            x[:, -1] = xr
            fx = f(x)  # пересчёт значений после изменения симплекса
        elif fxr < fx[0]:
            xe = xo + gamma * (xr - xo)
            x[:, -1] = xe if f(xe) < fxr else xr
            fx = f(x)
        elif fxr >= fx[-2]:
            xc = xo + beta * (x[:, -1] - xo)
            if f(xc) < fx[-1]:
                x[:, -1] = xc
            fx = f(x)
        else:
            x = x[:, 0] + sigma * (x - x[:, 0])
            fx = f(x)
        it = it + 1
    ix = np.argmin(fx)
    return x[:, ix], fx[ix], it

def f(x):
    return x[0]**4 + 2*x[1]**2 - x[0]*x[1]

x = np.array([3, 3])
x_min, f_min, it = simplex(f, x, eps=1e-20)  # исправлено: три переменные
print(x, x_min, f_min, it)  # начальная точка, найденный минимум, значение, итерации

import scipy.optimize as optim
def f(x):
    return x[0]**4 + 2*x[1]**2 - x[0]*x[1]
res = optim.minimize(f, x0=[0.3, 0.3], method='Nelder-Mead')
print('сумненький метод', '\n', res)
print('минуум', res.x, res.fun, res.nit)