SciPy, рдЕрдиреБрдХреВрд▓рди

SciPy (рдЙрдЪреНрдЪрд╛рд░рдг рд╕рд╛рдИ рдкрд╛рдИ) Numpy рдкрд╛рдЗрдерди рд╡рд┐рд╕реНрддрд╛рд░рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдЧрдгрд┐рддреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрдпрд╛рдХреЗрдЬ рд╣реЛред SciPy рдХреЛ рд╕рд╛рде, рддрдкрд╛рдЗрдБрдХреЛ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкрд╛рдЗрдерди рд╕рддреНрд░ MATLAB, IDL, Octave, R-Lab, рд░ SciLab рдЬрд╕реНрддреИ рд╕рдорд╛рди рдкреВрд░реНрдг рдбрд╛рдЯрд╛ рд╡рд┐рдЬреНрдЮрд╛рди рд░ рдЬрдЯрд┐рд▓ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд╛рддрд╛рд╡рд░рдг рдмрдиреНрдЫред рдЖрдЬ рдо scipy.optimize рдкреНрдпрд╛рдХреЗрдЬрдорд╛ рдХреЗрд╣реА рдкреНрд░рдЦреНрдпрд╛рдд рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди рдПрд▓реНрдЧреЛрд░рд┐рджрдорд╣рд░реВ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдмрд╛рд░реЗрдорд╛ рдЫреЛрдЯрдХрд░реАрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБред рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдердк рд╡рд┐рд╕реНрддреГрдд рд░ рдЕрдк-рдЯреБ-рдбреЗрдЯ рдорджреНрджрдд рд╕рдзреИрдВ рдорджреНрджрдд() рдЖрджреЗрд╢ рд╡рд╛ Shift+Tab рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рдкрд░рд┐рдЪрдп

рдЖрдлреВрд▓рд╛рдИ рд░ рдкрд╛рдардХрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рд╛рдердорд┐рдХ рд╕реНрд░реЛрддрд╣рд░реВ рдЦреЛрдЬреНрди рд░ рдкрдвреНрдирдмрд╛рдЯ рдмрдЪрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рд╡рд┐рдзрд┐рд╣рд░реВрдХреЛ рд╡рд┐рд╡рд░рдгрд╣рд░реВрдХреЛ рд▓рд┐рдЩреНрдХрд╣рд░реВ рдореБрдЦреНрдп рд░реВрдкрдорд╛ рд╡рд┐рдХрд┐рдкрд┐рдбрд┐рдпрд╛рдорд╛ рд╣реБрдиреЗрдЫрдиреНред рдПрдХ рдирд┐рдпрдордХреЛ рд░реВрдкрдорд╛, рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдорд╛рдиреНрдп рд╕рд░реНрддрд╣рд░реВрдорд╛ рд╡рд┐рдзрд┐рд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЖрд╡реЗрджрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╕рд░реНрддрд╣рд░реВ рдмреБрдЭреНрди рдкрд░реНрдпрд╛рдкреНрдд рдЫред рдЧрдгрд┐рддреАрдп рд╡рд┐рдзрд┐рд╣рд░реВрдХреЛ рд╕рд╛рд░ рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐, рдердк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рдХрд╛рд╢рдирд╣рд░реВрдХреЛ рд▓рд┐рдЩреНрдХрд╣рд░реВ рдкрдЫреНрдпрд╛рдЙрдиреБрд╣реЛрд╕реН, рдЬреБрди рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦрдХреЛ рдЕрдиреНрддреНрдпрдорд╛ рд╡рд╛ рддрдкрд╛рдИрдВрдХреЛ рдордирдкрд░реНрдиреЗ рдЦреЛрдЬ рдЗрдиреНрдЬрд┐рдирдорд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫред

рддреНрдпрд╕реИрд▓реЗ, scipy.optimize рдореЛрдбреНрдпреБрд▓рд▓реЗ рдирд┐рдореНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ:

  1. рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдорд╣рд░реВ (рдиреЗрд▓реНрдбрд░-рдореАрдб рд╕рд┐рдореНрдкреНрд▓реЗрдХреНрд╕, BFGS, рдиреНрдпреВрдЯрди рдХрдиреНрдЬреБрдЧреЗрдЯ рдЧреНрд░реЗрдбрд┐рдпрдиреНрдЯрд╣рд░реВ) рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдзреЗрд░реИ рдЪрд░рд╣рд░реВ (рдиреНрдпреВрдирддрдо) рдХреЛ рд╕реНрдХреЗрд▓рд░ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╢рд░реНрдд рд░ рдмрд┐рдирд╛ рд╢рд░реНрдд рдиреНрдпреВрдиреАрдХрд░рдг, рдХреЛрдмрд┐рд▓рд╛ ╨╕ SLSQP)
  2. рдЧреНрд▓реЛрдмрд▓ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐: рдмреЗрд╕рд┐рдирд╣рдкрд┐рдЩ, diff_evolution)
  3. рдЕрд╡рд╢рд┐рд╖реНрдЯрд╣рд░реВ рдиреНрдпреВрдиреАрдХрд░рдг рдЧрд░реНрджреИ MNC (least_squares) рд░ рд╡рдХреНрд░ рдлрд┐рдЯрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдорд╣рд░реВ nonlinear рдиреНрдпреВрдирддрдо рд╡рд░реНрдЧрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ (curve_fit)
  4. рдПрдЙрдЯрд╛ рдЪрд░ (minim_scalar) рдХреЛ рд╕реНрдХреЗрд▓рд░ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдиреНрдпреВрдирддрдо рдЧрд░реНрджреИ рд░ рдЬрд░рд╛рд╣рд░реВ рдЦреЛрдЬреНрджреИ (root_scalar)
  5. рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдорд╣рд░реВ (рд╣рд╛рдЗрдмреНрд░рд┐рдб рдкрд╛рд╡реЗрд▓, Levenberg-Marquardt рд╡рд╛ рдареВрд▓рд╛ рд╕реНрддрд░рдХрд╛ рд╡рд┐рдзрд┐рд╣рд░реВ рдЬрд╕реНрддреИ рдиреНрдпреВрдЯрди-рдХреНрд░рд┐рд▓реЛрдн).

рдпрд╕ рд▓реЗрдЦрдорд╛ рд╣рд╛рдореА рдпреЛ рд╕рдореНрдкреВрд░реНрдг рд╕реВрдЪреАрдмрд╛рдЯ рдкрд╣рд┐рд▓реЛ рд╡рд╕реНрддреБрд▓рд╛рдИ рдорд╛рддреНрд░ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВред

рдзреЗрд░реИ рдЪрд░рд╣рд░реВрдХреЛ рд╕реНрдХреЗрд▓рд░ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдмрд┐рдирд╛ рд╢рд░реНрдд рдиреНрдпреВрдиреАрдХрд░рдг

scipy.optimize рдкреНрдпрд╛рдХреЗрдЬрдмрд╛рдЯ рдиреНрдпреВрдирддрдо рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдзреЗрд░реИ рдЪрд░рд╣рд░реВрдХреЛ рд╕реНрдХреЗрд▓рд░ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╢рд░реНрдд рд░ рдмрд┐рдирд╛ рд╢рд░реНрдд рдиреНрдпреВрдиреАрдХрд░рдг рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЗрдиреНрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рдпрд╕рд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓рд╛рдИ рдзреЗрд░реИ рдЪрд░рд╣рд░реВрдХреЛ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рдХрд╛рд░реНрдп рдЪрд╛рд╣рд┐рдиреНрдЫ, рдЬрд╕рд▓рд╛рдИ рд╣рд╛рдореАрд▓реЗ рд╡рд┐рднрд┐рдиреНрди рддрд░рд┐рдХрд╛рдорд╛ рдиреНрдпреВрдирд┐рдХрд░рдг рдЧрд░реНрдиреЗрдЫреМрдВред

рдпреА рдЙрджреНрджреЗрд╢реНрдпрдХрд╛ рд▓рд╛рдЧрд┐, N рдЪрд░рд╣рд░реВрдХреЛ рд░реЛрдЬреЗрдирдмреНрд░реЛрдХ рдкреНрд░рдХрд╛рд░реНрдп рдЙрддреНрддрдо рдЫ, рдЬрд╕рдХреЛ рдлрд╛рд░рдо рдЫ:

SciPy, рдЕрдиреБрдХреВрд▓рди

Rosenbrock рдкреНрд░рдХрд╛рд░реНрдп рд░ рдпрд╕рдХреЛ Jacobi рд░ Hessian matrices (рдХреНрд░рдорд╢рдГ рдкрд╣рд┐рд▓реЛ рд░ рджреЛрд╕реНрд░реЛ рдбреЗрд░рд┐рднреЗрдЯрд┐рднрд╣рд░реВ) рдкрд╣рд┐рд▓реЗ рдиреИ scipy.optimize рдкреНрдпрд╛рдХреЗрдЬрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреНрдиреЗ рддрдереНрдпрдХреЛ рдмрд╛рд╡рдЬреБрдж, рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдЖрдлреИрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреЗрдЫреМрдВред

import numpy as np

def rosen(x):
    """The Rosenbrock function"""
    return np.sum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0, axis=0)

рд╕реНрдкрд╖реНрдЯрддрд╛рдХреЛ рд▓рд╛рдЧрд┐, рджреБрдИ рдЪрд░рд╣рд░реВрдХреЛ рд░реЛрдЬреЗрдирдмреНрд░реЛрдХ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдорд╛рдирд╣рд░реВ 3D рдорд╛ рдХреЛрд░реМрдВред

рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рдХреЛрдб

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter

# ╨Э╨░╤Б╤В╤А╨░╨╕╨▓╨░╨╡╨╝ 3D ╨│╤А╨░╤Д╨╕╨║
fig = plt.figure(figsize=[15, 10])
ax = fig.gca(projection='3d')

# ╨Ч╨░╨┤╨░╨╡╨╝ ╤Г╨│╨╛╨╗ ╨╛╨▒╨╖╨╛╤А╨░
ax.view_init(45, 30)

# ╨б╨╛╨╖╨┤╨░╨╡╨╝ ╨┤╨░╨╜╨╜╤Л╨╡ ╨┤╨╗╤П ╨│╤А╨░╤Д╨╕╨║╨░
X = np.arange(-2, 2, 0.1)
Y = np.arange(-1, 3, 0.1)
X, Y = np.meshgrid(X, Y)
Z = rosen(np.array([X,Y]))

# ╨а╨╕╤Б╤Г╨╡╨╝ ╨┐╨╛╨▓╨╡╤А╤Е╨╜╨╛╤Б╤В╤М
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm)
plt.show()

SciPy, рдЕрдиреБрдХреВрд▓рди

рдиреНрдпреВрдирддрдо реж рдорд╛ рдЫ рднрдиреЗрд░ рдЕрдЧреНрд░рд┐рдо рдерд╛рд╣рд╛ рдЫ SciPy, рдЕрдиреБрдХреВрд▓рди, рд╡рд┐рднрд┐рдиреНрди scipy.optimize рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд░реЛрдЬреЗрдирдмреНрд░реЛрдХ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдиреНрдпреВрдирддрдо рдорд╛рди рдХрд╕рд░реА рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╣реЗрд░реМрдВред

рдиреЗрд▓реНрдбрд░-рдореАрдб рд╕рд┐рдореНрдкреНрд▓реЗрдХреНрд╕ рд╡рд┐рдзрд┐

0-рдЖрдпрд╛рдорд┐рдХ рд╕реНрдкреЗрд╕рдорд╛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдмрд┐рдиреНрджреБ x5 рд╣реБрди рджрд┐рдиреБрд╣реЛрд╕реНред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпрд╕рдХреЛ рдирдЬрд┐рдХрдХреЛ рд░реЛрдЬреЗрдирдмреНрд░реЛрдХ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдиреНрдпреВрдирддрдо рдмрд┐рдиреНрджреБ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреБрд╣реЛрд╕реН рдиреЗрд▓реНрдбрд░-рдореАрдб рд╕рд┐рдореНрдкреНрд▓реЗрдХреНрд╕ (рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╡рд┐рдзрд┐ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рдорд╛рдирдХреЛ рд░реВрдкрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ):

from scipy.optimize import minimize
x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2])
res = minimize(rosen, x0, method='nelder-mead',
    options={'xtol': 1e-8, 'disp': True})
print(res.x)

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 339
         Function evaluations: 571
[1. 1. 1. 1. 1.]

рд╕рд┐рдореНрдкреНрд▓реЗрдХреНрд╕ рд╡рд┐рдзрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд░ рдкрд░реНрдпрд╛рдкреНрдд рдЪрд┐рдХрдиреА рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдХрдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░рд▓ рддрд░рд┐рдХрд╛ рд╣реЛред рдпреЛ рдПрдХ рдкреНрд░рдХрд╛рд░реНрдп рдХреЛ рдбреЗрд░рд┐рднреЗрдЯрд┐рдн рдЧрдгрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрди; рдпреЛ рдХреЗрд╡рд▓ рдпрд╕рдХреЛ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдкрд░реНрдпрд╛рдкреНрдд рдЫред Nelder-Mead рд╡рд┐рдзрд┐ рд╕рд░рд▓ рдиреНрдпреВрдиреАрдХрд░рдг рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд░рд╛рдореНрд░реЛ рд╡рд┐рдХрд▓реНрдк рд╣реЛред рдпрджреНрдпрдкрд┐, рдпрд╕рд▓реЗ рдврд╛рдБрдЪрд╛ рдЕрдиреБрдорд╛рдирд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИрди, рдпрд╕рд▓реЗ рдиреНрдпреВрдирддрдо рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рдзреЗрд░реИ рд╕рдордп рд▓рд┐рди рд╕рдХреНрдЫред

рдкрд╛рд╡реЗрд▓ рд╡рд┐рдзрд┐

рдЕрд░реНрдХреЛ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЬрд╕рдорд╛ рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░реНрдп рдорд╛рдирд╣рд░реВ рдЧрдгрдирд╛ рдЧрд░рд┐рдиреНрдЫ рдкрд╛рд╡реЗрд▓рдХреЛ рд╡рд┐рдзрд┐ред рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рд╡рд┐рдзрд┐ = 'рдкрд╛рд╡реЗрд▓' рдиреНрдпреВрдирддрдо рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рд╕реЗрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2])
res = minimize(rosen, x0, method='powell',
    options={'xtol': 1e-8, 'disp': True})
print(res.x)

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 19
         Function evaluations: 1622
[1. 1. 1. 1. 1.]

Broyden-Fletcher-Goldfarb-Shanno (BFGS) рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо

рд╕рдорд╛рдзрд╛рдирдХреЛ рд▓рд╛рдЧрд┐ рдЫрд┐рдЯреЛ рдЕрднрд┐рд╕рд░рдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди, рдкреНрд░рдХреНрд░рд┐рдпрд╛ BFGS рдЙрджреНрджреЗрд╢реНрдп рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдЧреНрд░реЗрдбрд┐рдпрдиреНрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдврд╛рдБрдЪрд╛рд▓рд╛рдИ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд░реВрдкрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рд╡рд╛ рдкрд╣рд┐рд▓реЛ рдЕрд░реНрдбрд░ рднрд┐рдиреНрдирддрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЧрдгрдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдХреБрдиреИ рдкрдирд┐ рдЕрд╡рд╕реНрдерд╛рдорд╛, BFGS рд╡рд┐рдзрд┐рд▓рд╛рдИ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд╕рд┐рдореНрдкреНрд▓реЗрдХреНрд╕ рд╡рд┐рдзрд┐ рднрдиреНрджрд╛ рдХрдо рдкреНрд░рдХрд╛рд░реНрдп рдХрд▓рд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫред

рд╣рд╛рдореА Rosenbrock рдкреНрд░рдХрд╛рд░реНрдп рдХреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд░реВрдк рдорд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реМрдВ:

SciPy, рдЕрдиреБрдХреВрд▓рди

SciPy, рдЕрдиреБрдХреВрд▓рди

рдпреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд╣рд┐рд▓реЛ рд░ рдЕрдиреНрддрд┐рдо рдмрд╛рд╣реЗрдХ рд╕рдмреИ рдЪрд░рд╣рд░реВрдХреЛ рдбреЗрд░рд┐рднреЗрдЯрд┐рднрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдиреНрдп рдЫ, рдЬрд╕рд▓рд╛рдИ рдирд┐рдореНрди рд░реВрдкрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ:

SciPy, рдЕрдиреБрдХреВрд▓рди

SciPy, рдЕрдиреБрдХреВрд▓рди

рдпреЛ рдврд╛рдБрдЪрд╛ рдЧрдгрдирд╛ рдЧрд░реНрдиреЗ рдкрд╛рдЗрдерди рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рд╣реЗрд░реМрдВ:

def rosen_der (x):
    xm = x [1: -1]
    xm_m1 = x [: - 2]
    xm_p1 = x [2:]
    der = np.zeros_like (x)
    der [1: -1] = 200 * (xm-xm_m1 ** 2) - 400 * (xm_p1 - xm ** 2) * xm - 2 * (1-xm)
    der [0] = -400 * x [0] * (x [1] -x [0] ** 2) - 2 * (1-x [0])
    der [-1] = 200 * (x [-1] -x [-2] ** 2)
    return der

рдЧреНрд░реЗрдбрд┐рдпрдиреНрдЯ рдЧрдгрдирд╛ рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдиреНрдпреВрдирддрдо рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ jac рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рдорд╛рдирдХреЛ рд░реВрдкрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬрд╕реНрддреИ рддрд▓ рджреЗрдЦрд╛рдЗрдПрдХреЛ рдЫред

res = minimize(rosen, x0, method='BFGS', jac=rosen_der, options={'disp': True})
print(res.x)

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 25
         Function evaluations: 30
         Gradient evaluations: 30
[1.00000004 1.0000001  1.00000021 1.00000044 1.00000092]

рдХрдиреНрдЬреБрдЧреЗрдЯ рдЧреНрд░реЗрдбрд┐рдпрдиреНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рдиреНрдпреВрдЯрди)

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдиреНрдпреВрдЯрдирдХреЛ рдХрдиреНрдЬреБрдЧреЗрдЯ рдЧреНрд░реЗрдбрд┐рдпрдиреНрдЯрд╣рд░реВ рдиреНрдпреВрдЯрдирдХреЛ рдкрд░рд┐рдорд╛рд░реНрдЬрд┐рдд рд╡рд┐рдзрд┐ рд╣реЛред
рдиреНрдпреВрдЯрдирдХреЛ рд╡рд┐рдзрд┐ рджреЛрд╕реНрд░реЛ рдбрд┐рдЧреНрд░реАрдХреЛ рдмрд╣реБрдкрджрджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдиреАрдп рдХреНрд╖реЗрддреНрд░рдорд╛ рдХрд╛рд░реНрдп рдЕрдиреБрдорд╛рдирд┐рдд рдЧрд░реНрдирдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫ:

SciPy, рдЕрдиреБрдХреВрд▓рди

рдЬрд╣рд╛рдБ SciPy, рдЕрдиреБрдХреВрд▓рди рджреЛрд╕реНрд░реЛ рдбреЗрд░рд┐рднреЗрдЯрд┐рднрдХреЛ рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕ рд╣реЛ (рд╣реЗрд╕рд┐рдпрди рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕, рд╣реЗрд╕рд┐рдпрди)ред
рдпрджрд┐ рд╣реЗрд╕рд┐рдпрди рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд┐рд╢реНрдЪрд┐рдд рдЫ рднрдиреЗ, рдпрд╕ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд╕реНрдерд╛рдиреАрдп рдиреНрдпреВрдирддрдорд▓рд╛рдИ рджреНрд╡рд┐рдШрд╛рдд рдлрд╛рд░рдордХреЛ рд╢реВрдиреНрдп рдЧреНрд░реЗрдбрд┐рдпрдиреНрдЯрд▓рд╛рдИ рд╢реВрдиреНрдпрдорд╛ рдмрд░рд╛рдмрд░ рдЧрд░реЗрд░ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫред рдкрд░рд┐рдгрд╛рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реБрдиреЗрдЫ:

SciPy, рдЕрдиреБрдХреВрд▓рди

рдЗрдиреНрд╡рд░реНрд╕ рд╣реЗрд╕рд┐рдпрди рдХрдиреНрдЬреБрдЧреЗрдЯ рдЧреНрд░реЗрдбрд┐рдпрдиреНрдЯ рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЧрдгрдирд╛ рдЧрд░рд┐рдиреНрдЫред Rosenbrock рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдХрдо рдЧрд░реНрди рдпреЛ рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдг рддрд▓ рджрд┐рдЗрдПрдХреЛ рдЫред Newton-CG рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рд╣реЗрд╕рд┐рдпрди рдЧрдгрдирд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдХрд╛рд░реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрдкрд░реНрдЫред
рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд░реВрдк рдорд╛ рд░реЛрдЬреЗрдирдмреНрд░реЛрдХ рдкреНрд░рдХрд╛рд░реНрдп рдХреЛ рд╣реЗрд╕рд┐рдпрди рдмрд░рд╛рдмрд░ рдЫ:

SciPy, рдЕрдиреБрдХреВрд▓рди

SciPy, рдЕрдиреБрдХреВрд▓рди

рдЬрд╣рд╛рдБ SciPy, рдЕрдиреБрдХреВрд▓рди ╨╕ SciPy, рдЕрдиреБрдХреВрд▓рди, рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН SciPy, рдЕрдиреБрдХреВрд▓рди.

рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рдХрд╛ рдмрд╛рдБрдХреА рдЧреИрд░-рд╢реВрдиреНрдп рддрддреНрд╡рд╣рд░реВ рдмрд░рд╛рдмрд░ рдЫрдиреН:

SciPy, рдЕрдиреБрдХреВрд▓рди

SciPy, рдЕрдиреБрдХреВрд▓рди

SciPy, рдЕрдиреБрдХреВрд▓рди

SciPy, рдЕрдиреБрдХреВрд▓рди

рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкрд╛рдБрдЪ-рдЖрдпрд╛рдореА рд╕реНрдкреЗрд╕ N = 5 рдорд╛, рд░реЛрдЬреЗрдирдмреНрд░реЛрдХ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЗрд╕рд┐рдпрди рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рдорд╛ рдмреНрдпрд╛рдиреНрдбрдХреЛ рд░реВрдк рд╣реБрдиреНрдЫ:

SciPy, рдЕрдиреБрдХреВрд▓рди

рдХреЛрдб рдЬрд╕рд▓реЗ рдХрдиреНрдЬреБрдЧреЗрдЯ рдЧреНрд░реЗрдбрд┐рдпрдиреНрдЯ (рдиреНрдпреВрдЯрди) рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд░реЛрдЬреЗрдирдмреНрд░реЛрдХ рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдХрдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдХреЛрдб рд╕рд╣рд┐рдд рдпреЛ рд╣реЗрд╕рд┐рдпрди рдЧрдгрдирд╛ рдЧрд░реНрджрдЫ:

def rosen_hess(x):
    x = np.asarray(x)
    H = np.diag(-400*x[:-1],1) - np.diag(400*x[:-1],-1)
    diagonal = np.zeros_like(x)
    diagonal[0] = 1200*x[0]**2-400*x[1]+2
    diagonal[-1] = 200
    diagonal[1:-1] = 202 + 1200*x[1:-1]**2 - 400*x[2:]
    H = H + np.diag(diagonal)
    return H

res = minimize(rosen, x0, method='Newton-CG', 
               jac=rosen_der, hess=rosen_hess,
               options={'xtol': 1e-8, 'disp': True})
print(res.x)

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 24
         Function evaluations: 33
         Gradient evaluations: 56
         Hessian evaluations: 24
[1.         1.         1.         0.99999999 0.99999999]

рд╣реЗрд╕рд┐рдпрди рд░ рдПрдХ рд╕реНрд╡реЗрдЪреНрдЫрд╛рдЪрд╛рд░реА рднреЗрдХреНрдЯрд░ рдХреЛ рдЙрддреНрдкрд╛рджрди рдкреНрд░рдХрд╛рд░реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рдВрдЧ рдПрдХ рдЙрджрд╛рд╣рд░рдг

рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рд╡рд┐рд╢реНрд╡ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдорд╛, рд╕рдореНрдкреВрд░реНрдг рд╣реЗрд╕рд┐рдпрди рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕ рдХрдореНрдкреНрдпреБрдЯрд┐рдЩ рд░ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╕рдордп рд░ рдореЗрдореЛрд░реА рд╕реНрд░реЛрддрд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рддреНрдпрд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡рдорд╛ рд╣реЗрд╕рд┐рдпрди рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕ рдЖрдлреИ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрди, рдХрд┐рдирднрдиреЗ рдорд┐рдирд┐рдорд╛рдЗрдЬреЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓реЗ рдЕрд░реНрдХреЛ рд╕реНрд╡реЗрдЪреНрдЫрд╛рдЪрд╛рд░реА рднреЗрдХреНрдЯрд░рд╕рдБрдЧ рд╣реЗрд╕рд┐рдпрдирдХреЛ рдЧреБрдгрди рдмрд░рд╛рдмрд░ рднреЗрдХреНрдЯрд░ рдорд╛рддреНрд░ рдЪрд╛рд╣рд┐рдиреНрдЫред рддрд╕рд░реНрде, рдХрдореНрдкреНрдпреБрдЯреЗрд╕рдирд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ, рдпреЛ рддреБрд░реБрдиреНрддреИ рдПрдХ рдкреНрд░рдХрд╛рд░реНрдп рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рдзреЗрд░реИ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫ рдЬрд╕рд▓реЗ рд╣реЗрд╕рд┐рдпрдирдХреЛ рдЙрддреНрдкрд╛рджрдирдХреЛ рдирддрд┐рдЬрд╛ рд╕реНрд╡реЗрдЪреНрдЫрд╛рдЪрд╛рд░реА рднреЗрдХреНрдЯрд░рд╕рдБрдЧ рдлрд░реНрдХрд╛рдЙрдБрдЫред

рд╣реЗрд╕ рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЬрд╕рд▓реЗ рдорд┐рдирд┐рдорд╛рдЗрдЬреЗрд╕рди рднреЗрдХреНрдЯрд░рд▓рд╛рдИ рдкрд╣рд┐рд▓реЛ рдЖрд░реНрдЧреБрдореЗрдиреНрдЯрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреНрдЫ, рд░ рджреЛрд╕реНрд░реЛ рдЖрд░реНрдЧреБрдореЗрдиреНрдЯрдХреЛ рд░реВрдкрдорд╛ рдПрдХ рдЖрд░реНрдмрд┐рдЯреНрд░реЗрд░реА рднреЗрдХреНрдЯрд░ (рдиреНрдпреВрдирддрдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рдХрд╛рд░реНрдпрдХрд╛ рдЕрдиреНрдп рддрд░реНрдХрд╣рд░реВрд╕рдБрдЧреИ)ред рд╣рд╛рдореНрд░реЛ рдорд╛рдорд▓рд╛ рдорд╛, рдПрдХ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рднреЗрдХреНрдЯрд░ рд╕рдВрдЧ Rosenbrock рдкреНрд░рдХрд╛рд░реНрдп рдХреЛ Hessian рдХреЛ рдЧреБрдгрди рдЧрдгрдирд╛ рдзреЗрд░реИ рдЧрд╛рд╣реНрд░реЛ рдЫреИрдиред рдпрджрд┐ p рдПрдХ рд╕реНрд╡реЗрдЪреНрдЫрд╛рдЪрд╛рд░реА рднреЗрдХреНрдЯрд░ рд╣реЛ, рддреНрдпрд╕рдкрдЫрд┐ рдЙрддреНрдкрд╛рджрди SciPy, рдЕрдиреБрдХреВрд▓рди рдлрд╛рд░рдо рдЫ:

SciPy, рдЕрдиреБрдХреВрд▓рди

рд╣реЗрд╕рд┐рдпрди рд░ рдПрдХ рд╕реНрд╡реЗрдЪреНрдЫрд╛рдЪрд╛рд░реА рднреЗрдХреНрдЯрд░рдХреЛ рдЧреБрдгрди рдЧрдгрдирд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдорд┐рдирд┐рдорд╛рдЗрдЬ рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рд╣реЗрд╕реНрдк рдЖрд░реНрдЧреБрдореЗрдиреНрдЯрдХреЛ рдорд╛рдирдХреЛ рд░реВрдкрдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдиреНрдЫ:

def rosen_hess_p(x, p):
    x = np.asarray(x)
    Hp = np.zeros_like(x)
    Hp[0] = (1200*x[0]**2 - 400*x[1] + 2)*p[0] - 400*x[0]*p[1]
    Hp[1:-1] = -400*x[:-2]*p[:-2]+(202+1200*x[1:-1]**2-400*x[2:])*p[1:-1] 
    -400*x[1:-1]*p[2:]
    Hp[-1] = -400*x[-2]*p[-2] + 200*p[-1]
    return Hp

res = minimize(rosen, x0, method='Newton-CG',
               jac=rosen_der, hessp=rosen_hess_p,
               options={'xtol': 1e-8, 'disp': True})

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 24
         Function evaluations: 33
         Gradient evaluations: 56
         Hessian evaluations: 66

рдХрдиреНрдЬреБрдЧреЗрдЯ рдЧреНрд░реЗрдбрд┐рдпрдиреНрдЯ рдЯреНрд░рд╕реНрдЯ рдХреНрд╖реЗрддреНрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рдиреНрдпреВрдЯрди)

рд╣реЗрд╕рд┐рдпрди рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рдХреЛ рдЦрд░рд╛рдм рдХрдиреНрдбрд┐рд╕рдирд┐рдЩ рд░ рдЧрд▓рдд рдЦреЛрдЬ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрд▓реЗ рдиреНрдпреВрдЯрдирдХреЛ рдХрдиреНрдЬреБрдЧреЗрдЯ рдЧреНрд░реЗрдбрд┐рдпрдиреНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рднрд╛рд╡рд╣реАрди рд╣реБрди рд╕рдХреНрдЫред рдпрд╕реНрддреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджрд┐рдЗрдиреНрдЫ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреНрд╖реЗрддреНрд░ рд╡рд┐рдзрд┐ (рдЯреНрд░рд╕реНрдЯ-рдХреНрд╖реЗрддреНрд░) рдХрдиреНрдЬреБрдЧреЗрдЯ рдиреНрдпреВрдЯрди рдЧреНрд░реЗрдбрд┐рдпрдиреНрдЯред

рд╣реЗрд╕рд┐рдпрди рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рдВрдЧ рдЙрджрд╛рд╣рд░рдг:

res = minimize(rosen, x0, method='trust-ncg',
               jac=rosen_der, hess=rosen_hess,
               options={'gtol': 1e-8, 'disp': True})
print(res.x)

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 20
         Function evaluations: 21
         Gradient evaluations: 20
         Hessian evaluations: 19
[1. 1. 1. 1. 1.]

рд╣реЗрд╕рд┐рдпрди рд░ рдПрдХ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рднреЗрдХреНрдЯрд░рдХреЛ рдЙрддреНрдкрд╛рджрди рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг:

res = minimize(rosen, x0, method='trust-ncg', 
                jac=rosen_der, hessp=rosen_hess_p, 
                options={'gtol': 1e-8, 'disp': True})
print(res.x)

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 20
         Function evaluations: 21
         Gradient evaluations: 20
         Hessian evaluations: 0
[1. 1. 1. 1. 1.]

Krylov рдкреНрд░рдХрд╛рд░ рд╡рд┐рдзрд┐рд╣рд░реВ

рдЯреНрд░рд╕реНрдЯ-рдПрдирд╕реАрдЬреА рд╡рд┐рдзрд┐ рдЬрд╕реНрддреИ, рдХреНрд░рд╛рдЗрд▓реЛрдн-рдкреНрд░рдХрд╛рд░рдХрд╛ рд╡рд┐рдзрд┐рд╣рд░реВ рдареВрд▓рд╛-рдареВрд▓рд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рдЫрдиреН рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕-рднреЗрдХреНрдЯрд░ рдЙрддреНрдкрд╛рджрдирд╣рд░реВ рдорд╛рддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреНред рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рд╛рд░ рдПрдХ рдЯреНрд░рдВрдХреЗрдЯреЗрдб Krylov рд╕рдмрд╕реНрдкреЗрд╕ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреНрд╖реЗрддреНрд░ рдорд╛ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдЫред рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐, рдпреЛ рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫ, рдХрд┐рдирдХрд┐ рдпрд╕рд▓реЗ рдЯреНрд░рд╕реНрдЯ-рдПрдирд╕реАрдЬреА рд╡рд┐рдзрд┐рдХреЛ рддреБрд▓рдирд╛рдорд╛, рдкреНрд░рддрд┐ рд╕рдмрд╕рдорд╕реНрдпрд╛ рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕-рднреЗрдХреНрдЯрд░ рдЙрддреНрдкрд╛рджрдирд╣рд░реВрдХреЛ рд╕рд╛рдиреЛ рд╕рдВрдЦреНрдпрд╛рдХреЛ рдХрд╛рд░рдгрд▓реЗ рдЧрд░реНрджрд╛ рдпреЛ рдирдирд▓рд╛рдЗрдирд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рд╣рд░реВрдХреЛ рд╕рд╛рдиреЛ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдердк рд░реВрдкрдорд╛, рдЯреНрд░рд╕реНрдЯ-рдПрдирд╕реАрдЬреА рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рднрдиреНрджрд╛ рдЪрддреБрд░реНрднреБрдЬ рдЙрдкрд╕рдорд╕реНрдпрд╛рдХреЛ рд╕рдорд╛рдзрд╛рди рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдкрдорд╛ рдкрд╛рдЗрдиреНрдЫред
рд╣реЗрд╕рд┐рдпрди рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рдВрдЧ рдЙрджрд╛рд╣рд░рдг:

res = minimize(rosen, x0, method='trust-krylov',
               jac=rosen_der, hess=rosen_hess,
               options={'gtol': 1e-8, 'disp': True})

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 19
         Function evaluations: 20
         Gradient evaluations: 20
         Hessian evaluations: 18

print(res.x)

    [1. 1. 1. 1. 1.]

рд╣реЗрд╕рд┐рдпрди рд░ рдПрдХ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рднреЗрдХреНрдЯрд░рдХреЛ рдЙрддреНрдкрд╛рджрди рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг:

res = minimize(rosen, x0, method='trust-krylov',
               jac=rosen_der, hessp=rosen_hess_p,
               options={'gtol': 1e-8, 'disp': True})

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 19
         Function evaluations: 20
         Gradient evaluations: 20
         Hessian evaluations: 0

print(res.x)

    [1. 1. 1. 1. 1.]

рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреНрд╖реЗрддреНрд░ рдорд╛ рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо

рд╕рдмреИ рд╡рд┐рдзрд┐рд╣рд░реВ (рдиреНрдпреВрдЯрди-рд╕реАрдЬреА, рдЯреНрд░рд╕реНрдЯ-рдПрдирд╕реАрдЬреА рд░ рдЯреНрд░рд╕реНрдЯ-рдХреНрд░рд┐рд▓реЛрдн) рдареВрд▓рд╛-рдареВрд▓рд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рдЫрдиреН (рд╣рдЬрд╛рд░реМрдВ рдЪрд░рд╣рд░реВрд╕рдБрдЧ)ред рдпреЛ рддрдереНрдпрдХреЛ рдХрд╛рд░рдг рд╣реЛ рдХрд┐ рдЕрдиреНрддрд░реНрдирд┐рд╣рд┐рдд рдХрдиреНрдЬреБрдЧреЗрдЯ рдЧреНрд░реЗрдбрд┐рдпрдиреНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдорд▓реЗ рд╡реНрдпреБрддреНрдХреНрд░рдо рд╣реЗрд╕рд┐рдпрди рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рдХреЛ рдЕрдиреБрдорд╛рдирд┐рдд рдирд┐рд░реНрдзрд╛рд░рдгрд▓рд╛рдИ рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫред рд╕рдорд╛рдзрд╛рди рд╣реЗрд╕рд┐рдпрдирдХреЛ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдирд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдлреЗрд▓рд╛ рдкрд░реНрдпреЛред рддрдкрд╛рдИрдВрд▓реЗ рд╣реЗрд╕рд┐рдпрди рд░ рдПрдХ рд╕реНрд╡реЗрдЪреНрдЫрд╛рдЪрд╛рд░реА рднреЗрдХреНрдЯрд░рдХреЛ рдЙрддреНрдкрд╛рджрдирдХрд╛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдкреНрд░рдХрд╛рд░реНрдп рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рднрдПрдХреЛрд▓реЗ, рдпреЛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реНрдкреНрдпрд╛рд░реНрд╕ (рдмреНрдпрд╛рдиреНрдб рд╡рд┐рдХрд░реНрдг) рдореНрдпрд╛рдЯреНрд░рд┐рдХрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рд░рд╛рдореНрд░реЛ рдЫред рдпрд╕рд▓реЗ рдХрдо рдореЗрдореЛрд░реА рд▓рд╛рдЧрдд рд░ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╕рдордп рдмрдЪрдд рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред

рдордзреНрдпрдо рдЖрдХрд╛рд░рдХреЛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рд╣реЗрд╕рд┐рдпрди рднрдгреНрдбрд╛рд░рдг рд░ рдлреНрдпрд╛рдХреНрдЯрд░рд┐рдЩрдХреЛ рд▓рд╛рдЧрдд рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫреИрдиред рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рд╣реЛ рдХрд┐ рдпреЛ рдХрдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдорд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫ, рд▓рдЧрднрдЧ рдареНрдпрд╛рдХреНрдХреИ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЙрдкрд╕рдорд╕реНрдпрд╛рд╣рд░реБ рдХреЛ рд╕рдорд╛рдзрд╛рдиред рдпреЛ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рдкреНрд░рддреНрдпреЗрдХ рджреНрд╡рд┐рдШрд╛рддреА рдЙрдкрд╕рдорд╕реНрдпрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рдХреЗрд╣реА рдирдирд▓рд╛рдЗрдирд░ рд╕рдореАрдХрд░рдгрд╣рд░реВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд░реВрдкрдорд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░рд┐рдиреНрдЫред рдпрд╕реНрддреЛ рд╕рдорд╛рдзрд╛рдирд▓рд╛рдИ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд╣реЗрд╕рд┐рдпрди рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рдХреЛ 3 рд╡рд╛ 4 Cholesky рд╡рд┐рдШрдЯрди рдЪрд╛рд╣рд┐рдиреНрдЫред рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рд╡рд┐рдзрд┐рд▓реЗ рдХрдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рд╣рд░реВрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрджрдЫ рд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдПрдХрд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреНрд╖реЗрддреНрд░ рд╡рд┐рдзрд┐рд╣рд░реВ рднрдиреНрджрд╛ рдХрдо рд╡рд╕реНрддреБрдЧрдд рдкреНрд░рдХрд╛рд░реНрдп рдЧрдгрдирд╛рд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫред рдпреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдорд▓реЗ рдкреВрд░реНрдг рд╣реЗрд╕рд┐рдпрди рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕ рдирд┐рд░реНрдзрд╛рд░рдг рдорд╛рддреНрд░ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рд░ рд╣реЗрд╕рд┐рдпрдирдХреЛ рдЙрддреНрдкрд╛рджрди рдкреНрд░рдХрд╛рд░реНрдп рд░ рдПрдХ рд╕реНрд╡реЗрдЪреНрдЫрд╛рдЪрд╛рд░реА рднреЗрдХреНрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджреИрдиред

Rosenbrock рдкреНрд░рдХрд╛рд░реНрдп рдХреЛ рдиреНрдпреВрдирддрдо рд╕рдВрдЧ рдЙрджрд╛рд╣рд░рдг:

res = minimize(rosen, x0, method='trust-exact',
               jac=rosen_der, hess=rosen_hess,
               options={'gtol': 1e-8, 'disp': True})
res.x

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 13
         Function evaluations: 14
         Gradient evaluations: 13
         Hessian evaluations: 14

array([1., 1., 1., 1., 1.])

рд╣рд╛рдореА рд╕рд╛рдпрдж рддреНрдпрд╣рд╛рдБ рд░реЛрдХрд┐рдиреЗрдЫреМрдВред рдЕрд░реНрдХреЛ рд▓реЗрдЦрдорд╛ рдо рд╕рд╢рд░реНрдд рдиреНрдпреВрдиреАрдХрд░рдгрдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕рдмреИрднрдиреНрджрд╛ рд░реЛрдЪрдХ рдХреБрд░рд╛рд╣рд░реВ рдмрддрд╛рдЙрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреБ, рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдорд┐рдирд┐рдорд╛рдЗрдЬреЗрд╕рдирдХреЛ рдкреНрд░рдпреЛрдЧ, рдПрдЙрдЯрд╛ рдЪрд░рдХреЛ рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдиреНрдпреВрдиреАрдХрд░рдг рдЧрд░реНрдиреЗ, рд╕реНрд╡реЗрдЪреНрдЫрд╛рдЪрд╛рд░реА рдорд┐рдирд┐рдорд╛рдЗрдЬрд░рд╣рд░реВ, рд░ scipy.optimize рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдореАрдХрд░рдгрд╣рд░реВрдХреЛ рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдЬрд░рд╛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреЗред рдкреНрдпрд╛рдХреЗрдЬред

рд╕реНрд░реЛрдд: https://docs.scipy.org/doc/scipy/reference/

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди