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

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

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

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

рддреЛ, scipy.optimize рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИ:

  1. рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо (рдиреЗрд▓реНрдбрд░-рдореАрдб рд╕рд┐рдореНрдкреНрд▓реЗрдХреНрд╕, рдмреАрдПрдлрдЬреАрдПрд╕, рдиреНрдпреВрдЯрди рд╕рдВрдпреБрдЧреНрдо рдЧреНрд░реЗрдбрд┐рдПрдВрдЯреНрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдЪрд░ (рдиреНрдпреВрдирддрдо) рдХреЗ рд╕реНрдХреЗрд▓рд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рд╢рд░реНрдд рдФрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд рдиреНрдпреВрдирддрдордХрд░рдг, рдХреЛрдмрд╛рдЗрд▓рд╛ ╨╕ рдПрд╕рдПрд▓рдПрд╕рдХреНрдпреВрдкреА)
  2. рд╡реИрд╢реНрд╡рд┐рдХ рдЕрдиреБрдХреВрд▓рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдмреЗрд╕рд┐рдирд╣реЛрдкрд┐рдВрдЧ, diff_evolution)
  3. рдЕрд╡рд╢реЗрд╖реЛрдВ рдХреЛ рдиреНрдпреВрдирддрдо рдХрд░рдирд╛ рдмрд╣реБрд░рд╛рд╖реНрдЯреНрд░реАрдп рдХрдВрдкрдиреА (рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрдЧ) рдФрд░ рдЧреИрд░-рд░реЗрдЦреАрдп рдиреНрдпреВрдирддрдо рд╡рд░реНрдЧ (рд╡рдХреНрд░_рдлрд┐рдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рдХреНрд░ рдлрд┐рдЯрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо
  4. рдПрдХ рдЪрд░ (рдорд┐рдирд┐рдо_рд╕реНрдХреЗрд▓рд░) рдХреЗ рдЕрджрд┐рд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдиреНрдпреВрдирддрдо рдХрд░рдирд╛ рдФрд░ рдЬрдбрд╝реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ (рд░реВрдЯ_рд╕реНрдХреЗрд▓рд░)
  5. рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо (рд╣рд╛рдЗрдмреНрд░рд┐рдб рдкреЙрд╡реЗрд▓) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдкреНрд░рдгрд╛рд▓реА (рд░реВрдЯ) рдХреЗ рдмрд╣реБрдЖрдпрд╛рдореА рд╕реЙрд▓реНрд╡рд░ Levenberg-Marquardt рдпрд╛ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рддрд░реАрдХреЗ рдЬреИрд╕реЗ рдиреНрдпреВрдЯрди-рдХреНрд░рд╛рдпрд▓реЛрд╡).

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдЗрд╕ рдкреВрд░реА рд╕реВрдЪреА рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдЖрдЗрдЯрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдХрдИ рдЪрд░реЛрдВ рдХреЗ рдПрдХ рдЕрджрд┐рд╢ рдлрд▓рди рдХрд╛ рдмрд┐рдирд╛ рд╢рд░реНрдд рдиреНрдпреВрдиреАрдХрд░рдг

Scipy.optimize рдкреИрдХреЗрдЬ рд╕реЗ рдиреНрдпреВрдирддрдо рдлрд╝рдВрдХреНрд╢рди рдХрдИ рдЪрд░ рдХреЗ рд╕реНрдХреЗрд▓рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рд╢рд░реНрдд рдФрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд рдиреНрдпреВрдирддрдордХрд░рдг рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдХрдИ рдЪрд░реЛрдВ рдХреЗ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕реЗ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдХрд░реЗрдВрдЧреЗред

рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдПрди рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рд░реЛрд╕реЗрдирдмреНрд░реЙрдХ рдлрд╝рдВрдХреНрд╢рди рдПрдХрджрдо рд╕рд╣реА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд░реВрдк рд╣реИ:

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

рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд░реЛрд╕реЗрдирдмреНрд░реЙрдХ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЗрд╕рдХреЗ рдЬреИрдХреЛрдмреА рдФрд░ рд╣реЗрд╕рд┐рдпрди рдореИрдЯреНрд░рд┐рдХреНрд╕ (рдХреНрд░рдорд╢рдГ рдкрд╣рд▓рд╛ рдФрд░ рджреВрд╕рд░рд╛ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 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)

рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЛ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЗ рд░реЛрд╕реЗрдирдмреНрд░реЙрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ 3рдбреА рдореЗрдВ рдмрдирд╛рдПрдВред

рдбреНрд░рд╛рдЗрдВрдЧ рдХреЛрдб

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, рдЕрдиреБрдХреВрд▓рди

рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирдирд╛ рдХрд┐ рдиреНрдпреВрдирддрдо 0 рд╣реИ 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.]

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

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

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

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.]

рдмреНрд░реЛрдпрдбреЗрди-рдлреНрд▓реЗрдЪрд░-рдЧреЛрд▓реНрдбрдлрд╛рд░реНрдм-рд╢рдиреНрдиреЛ (рдмреАрдПрдлрдЬреАрдПрд╕) рдПрд▓реНрдЧреЛрд░рд┐рджрдо

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

рдЖрдЗрдП рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд░реВрдк рдореЗрдВ рд░реЛрд╕реЗрдирдмреНрд░реЙрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рдЦреЛрдЬреЗрдВ:

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

рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдЧрдгрдирд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдиреНрдпреВрдирддрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЬреЗрдПрд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

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, рдЕрдиреБрдХреВрд▓рди

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

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]

рд╣реЗрд╕рд┐рдпрди рдФрд░ рдПрдХ рдордирдорд╛рдирд╛ рд╡реЗрдХреНрдЯрд░ рдХреЗ рдЙрддреНрдкрд╛рдж рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг

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

рд╣реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬреЛ рдиреНрдпреВрдирддрдордХрд░рдг рд╡реЗрдХреНрдЯрд░ рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдордирдорд╛рдирд╛ рд╡реЗрдХреНрдЯрд░ рдХреЛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ (рдиреНрдпреВрдирддрдо рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдиреНрдп рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде)ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдордирдорд╛рдирд╛ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рд░реЛрд╕реЗрдирдмреНрд░реЙрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╣реЗрд╕рд┐рдпрди рдХреЗ рдЙрддреНрдкрд╛рдж рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ 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.]

рдХреНрд░рд╛рдпрд▓реЛрд╡ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ

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

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 рдЪреЛрд▓реНрд╕реНрдХреА рдЕрдкрдШрдЯрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╡рд┐рдзрд┐ рдХрдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреА рд╣реИ рдФрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреНрд╖реЗрддреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдЙрджреНрджреЗрд╢реНрдп рдлрд╝рдВрдХреНрд╢рди рдЧрдгрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдВрдкреВрд░реНрдг рд╣реЗрд╕рд┐рдпрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдпрд╣ рд╣реЗрд╕рд┐рдпрди рдХреЗ рдЙрддреНрдкрд╛рдж рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдПрдХ рдордирдорд╛рдирд╛ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд░реЛрд╕реЗрдирдмреНрд░реЙрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдиреНрдпреВрдирддрдо рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ