SciPy, рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди

SciPy, рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди

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

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

рд╕реНрд╡рддрдГрд▓рд╛ рдЖрдгрд┐ рд╡рд╛рдЪрдХрд╛рдВрдирд╛ рдкреНрд░рд╛рдердорд┐рдХ рд╕реНрд░реЛрдд рд╢реЛрдзрдгреНрдпрд╛рдкрд╛рд╕реВрди рдЖрдгрд┐ рд╡рд╛рдЪрдгреНрдпрд╛рдкрд╛рд╕реВрди рд╡рд╛рдЪрд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдкрджреНрдзрддреАрдВрдЪреНрдпрд╛ рд╡рд░реНрдгрдирд╛рдЪреНрдпрд╛ рд▓рд┐рдВрдХреНрд╕ рдкреНрд░рд╛рдореБрдЦреНрдпрд╛рдиреЗ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛рд╡рд░ рдЕрд╕рддреАрд▓. рдирд┐рдпрдорд╛рдиреБрд╕рд╛рд░, рд╣реА рдорд╛рд╣рд┐рддреА рд╕рд╛рдорд╛рдиреНрдп рдЕрдЯреАрдВрдордзреНрдпреЗ рдкрджреНрдзрддреА рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЕрд░реНрдЬрд╛рдЪреНрдпрд╛ рдЕрдЯреА рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдкреБрд░реЗрд╢реА рдЖрд╣реЗ. рдЧрдгрд┐рддреАрдп рдкрджреНрдзрддреАрдВрдЪреЗ рд╕рд╛рд░ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рдЕрдзрд┐рдХ рдЕрдзрд┐рдХреГрдд рдкреНрд░рдХрд╛рд╢рдирд╛рдВрдЪреНрдпрд╛ рджреБрд╡реНрдпрд╛рдВрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рд╛, рдЬреЗ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдХрд┐рдВрд╡рд╛ рдЖрдкрд▓реНрдпрд╛ рдЖрд╡рдбрддреНрдпрд╛ рд╢реЛрдз рдЗрдВрдЬрд┐рдирдордзреНрдпреЗ рдЖрдврд│реВ рд╢рдХрддрд╛рдд.

рддрд░, scipy.optimize рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ:

  1. рд╡рд┐рд╡рд┐рдз рдЕрд▓реНрдЧреЛрд░рд┐рджрдо (рдиреЗрд▓реНрдбрд░-рдореАрдб рд╕рд┐рдореНрдкреНрд▓реЗрдХреНрд╕, рдмреАрдПрдлрдЬреАрдПрд╕, рдиреНрдпреВрдЯрди рдХрдВрдЬреБрдЧреЗрдЯ рдЧреНрд░реЗрдбрд┐рдпрдВрдЯреНрд╕, COBYLA ╨╕ SLSQP)
  2. рдЧреНрд▓реЛрдмрд▓ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде: рдмреЗрд╕рд┐рдирд╣реЙрдкрд┐рдВрдЧ, diff_evolution)
  3. рдЕрд╡рд╢реЗрд╖ рдХрдореА рдХрд░рдгреЗ MNC (рдХрдореАрддрдХрдореА_рдЪреМрд░рд╕) рдЖрдгрд┐ рд╡рдХреНрд░ рдлрд┐рдЯрд┐рдВрдЧ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдиреЙрдирд▓рд╛рдЗрдирд░ рдХрд┐рдорд╛рди рдЪреМрд░рд╕ (рд╡рдХреНрд░_рдлрд┐рдЯ) рд╡рд╛рдкрд░реВрди
  4. рдПрдХрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдЪреА рд╕реНрдХреЗрд▓рд░ рдлрдВрдХреНрд╢рдиреНрд╕ рдХрдореА рдХрд░рдгреЗ (рдорд┐рдирд┐рдо_рд╕реНрдХреЗрд▓рд░) рдЖрдгрд┐ рд░реВрдЯреНрд╕ рд╢реЛрдзрдгреЗ (рд░реВрдЯ_рд╕реНрдХреЗрд▓рд░)
  5. рд╡рд┐рд╡рд┐рдз рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд╡рд╛рдкрд░реВрди рд╕рдореАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реАрдЪреЗ рдмрд╣реБрдЖрдпрд╛рдореА рдирд┐рд░рд╛рдХрд░рдг (рд░реВрдЯ) рд▓реЗрд╡реНрд╣рдирдмрд░реНрдЧ-рдорд╛рд░реНрдХреНрд╡рд╛рд░реНрдб рдХрд┐рдВрд╡рд╛ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рд╡рд░ рдкрджреНрдзрддреА рдЬрд╕реЗ рдХреА рдиреНрдпреВрдЯрди-рдХреНрд░рд┐рд▓реЛрд╡реНрд╣).

рдпрд╛ рд▓реЗрдЦрд╛рдд рдЖрдореНрд╣реА рдпрд╛ рд╕рдВрдкреВрд░реНрдг рдпрд╛рджреАрддреАрд▓ рдлрдХреНрдд рдкрд╣рд┐рд▓реНрдпрд╛ рдЖрдпрдЯрдордЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ.

рдЕрдиреЗрдХ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдЪреНрдпрд╛ рд╕реНрдХреЗрд▓рд░ рдлрдВрдХреНрд╢рдирдЪреЗ рдмрд┐рдирд╢рд░реНрдд рдХрдореА рдХрд░рдгреЗ

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)

рд╕реНрдкрд╖реНрдЯрддреЗрд╕рд╛рдареА, рджреЛрди рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдЪреНрдпрд╛ рд░реЛрдЭреЗрдирдмреНрд░реЙрдХ рдлрдВрдХреНрд╢рдирдЪреА рдореВрд▓реНрдпреЗ 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, рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди

рдХрд┐рдорд╛рди 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.]

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

рд╕рдорд╛рдзрд╛рдирд╛рд╕рд╛рдареА рдЬрд▓рдж рдЕрднрд┐рд╕рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдкреНрд░рдХреНрд░рд┐рдпрд╛ BFGS рд╡рд╕реНрддреБрдирд┐рд╖реНрда рдХрд╛рд░реНрдпрд╛рдЪрд╛ рдЧреНрд░реЗрдбрд┐рдпрдВрдЯ рд╡рд╛рдкрд░рддреЛ. рдЧреНрд░реЗрдбрд┐рдпрдВрдЯ рдлрдВрдХреНрд╢рди рдореНрд╣рдгреВрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ рдХрд┐рдВрд╡рд╛ рдкреНрд░рдердо рдСрд░реНрдбрд░ рдлрд░рдХ рд╡рд╛рдкрд░реВрди рдЧрдгрдирд╛ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рдХреЛрдгрддреНрдпрд╛рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, BFGS рдкрджреНрдзрддреАрд▓рд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рд╕рд┐рдореНрдкреНрд▓реЗрдХреНрд╕ рдкрджреНрдзрддреАрдкреЗрдХреНрд╖рд╛ рдХрдореА рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддрд╛рдд.

рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд╕реНрд╡рд░реВрдкрд╛рдд рд░реЛрдЭреЗрдирдмреНрд░реЙрдХ рдлрдВрдХреНрд╢рдирдЪреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╢реЛрдзреВрдпрд╛:

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 рдлрдВрдХреНрд╢рди рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реА рдкрджреНрдзрдд рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг рдЦрд╛рд▓реА рджрд┐рд▓реЗ рдЖрд╣реЗ. рдиреНрдпреВрдЯрди-рд╕реАрдЬреА рдкрджреНрдзрдд рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рд╣реЗрд╕рд┐рдпрдирдЪреА рдЧрдгрдирд╛ рдХрд░рдгрд╛рд░реЗ рдлрдВрдХреНрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд╕реНрд╡рд░реВрдкрд╛рдд рд░реЛрд╕реЗрдирдмреНрд░реЙрдХ рдлрдВрдХреНрд╢рдирдЪреЗ рд╣реЗрд╕рд┐рдпрди рд╕рдорд╛рди рдЖрд╣реЗ:

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

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

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛