import scipy.optimize as optim
import numpy as np
# Целевая функция
def f(x):
x1, x2 = x
return 1.2 * (2 * x2 - x1**2)**2 + 10 * (1.1 - x1)**2
# Градиент
def grad(x):
x1, x2 = x
df_dx1 = -4.8 * x1 * (2 * x2 - x1**2) - 20 * (1.1 - x1)
df_dx2 = 4.8 * (2 * x2 - x1**2)
return np.array([df_dx1, df_dx2])
# Начальное приближение
x0 = [2.0, 1.0]
# Симплекс-метод (Nelder-Mead)
res_simplex = optim.minimize(f, x0, method='Nelder-Mead')
print('Симплексный метод\n', res_simplex)
print('Минимум:', res_simplex.x, 'Значение функции:', res_simplex.fun, '\n')
# Градиентный метод (BFGS)
res_bfgs = optim.minimize(f, x0, jac=grad, method='BFGS')
print('Градиентный метод\n', res_bfgs)
print('Минимум:', res_bfgs.x, 'Значение функции:', res_bfgs.fun)