
SciPy (ΠΏΡΠΎΠΈΠ·Π½Π°ΡΡ ΠΊΠ°ΡΠΎ ΡΠ°ΠΉ ΠΏΠ°ΠΉ) β ΡΠΎΠ²Π° Π΅ ΠΏΠ°ΠΊΠ΅Ρ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ½ΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΈ, ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Numpy Π½Π° Python. Π‘ SciPy ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π°ΡΠ° ΡΠ΅ΡΠΈΡ Π½Π° Python ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΡΠ° Π² Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½Π° ΡΡΠ΅Π΄Π° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° MATLAB, IDL, Octave, R-Lab ΠΈ SciLab. ΠΠ½Π΅Ρ ΠΈΡΠΊΠ°ΠΌ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ Π΄Π° ΡΠ°Π·ΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ Π½ΡΠΊΠΎΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π² ΠΏΠ°ΠΊΠ΅ΡΠ° scipy.optimize. ΠΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° ΠΈ Π°ΠΊΡΡΠ°Π»Π½Π° ΡΠΏΡΠ°Π²ΠΊΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π° Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° help() ΠΈΠ»ΠΈ Ρ Shift+Tab.
ΠΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠ° Π΄Π° ΡΠΏΠ΅ΡΡΡ Π½Π° ΡΠ΅Π±Π΅ ΡΠΈ ΠΈ Π½Π° ΡΠΈΡΠ°ΡΠ΅Π»ΠΈΡΠ΅ ΡΡΡΡΠ΅Π½Π΅ΡΠΎ ΠΈ ΡΠ΅ΡΠ΅Π½Π΅ΡΠΎ Π½Π° ΠΏΡΡΠ²ΠΎΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈΡΠ΅, Π»ΠΈΠ½ΠΊΠΎΠ²Π΅ΡΠ΅ ΠΊΡΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΡΠ° Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄ΠΈΠΌΠ½ΠΎ ΠΊΡΠΌ Wikipedia. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ°Π·ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½Π° Π·Π° ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π² ΠΎΠ±ΡΠΈ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡΡΠ° Π·Π° ΡΡΡ Π½ΠΎΡΠΎ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅. ΠΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΡΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ, ΡΠ΅ ΡΠ΅ Π½Π°ΡΠΎΡΠΈΠΌ ΠΊΡΠΌ Π»ΠΈΠ½ΠΊΠΎΠ²Π΅ΡΠ΅ ΠΊΡΠΌ ΠΏΠΎ-Π°Π²ΡΠΎΡΠΈΡΠ΅ΡΠ½ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ Π² ΠΊΡΠ°Ρ Π½Π° Π²ΡΡΠΊΠ° ΡΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ Π² Π»ΡΠ±ΠΈΠΌΠ°ΡΠ° Π½ΠΈ ΡΡΡΡΠ°ΡΠΊΠ°.
Π ΡΠ°ΠΊΠ°, ΠΌΠΎΠ΄ΡΠ»ΡΡ scipy.optimize Π²ΠΊΠ»ΡΡΠ²Π° Π² ΡΠ΅Π±Π΅ ΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΈ:
- Π£ΡΠ»ΠΎΠ²Π½Π° ΠΈ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠΊΠ°Π»ΡΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ (minim) Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ (ΡΠΈΠΌΠΏΠ»Π΅ΠΊΡ Π½Π° ΠΠ΅Π»Π΄Π΅Ρ-ΠΠΈΠ΄, BFGS, ΡΠΎΠΏΡΡΠΆΠ΅Π½ΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠΈ Π½Π° ΠΡΡΠΎΠ½, ΠΈ )
- ΠΠ»ΠΎΠ±Π°Π»Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: , )
- ΠΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΎΡΡΠ°ΡΡΡΠΈ (least_squares) ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ Π·Π° ΠΏΠΎΠ΄Π³ΠΎΠ½Π²Π°Π½Π΅ Π½Π° ΠΊΡΠΈΠ²ΠΈ Ρ Π½Π΅Π»ΠΈΠ½Π΅Π΅Π½ ΠΠΠ (curve_fit)
- ΠΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠΊΠ°Π»ΡΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ Π΅Π΄Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° (minim_scalar) ΠΈ ΡΡΡΡΠ΅Π½Π΅ Π½Π° ΠΊΠΎΡΠ΅Π½ΠΈ (root_scalar)
- ΠΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΠΈ ΡΠ΅ΡΠ°ΡΠ΅Π»ΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΎΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ (root) Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ (Π³ΠΈΠ±ΡΠΈΠ΄Π΅Π½ Π½Π° ΠΠ°ΡΡΠ», ΠΈΠ»ΠΈ ΠΊΡΡΠΏΠ½ΠΎΠΌΠ°ΡΡΡΠ°Π±Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ, ΡΠ°ΠΊΠΈΠ²Π° ΠΊΠ°ΡΠΎ ).
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ°ΠΌΠΎ ΠΏΡΡΠ²ΠΈΡ ΠΏΡΠ½ΠΊΡ ΠΎΡ ΡΠ΅Π»ΠΈΡ ΡΠΎΠ·ΠΈ ΡΠΏΠΈΡΡΠΊ.
ΠΠ΅Π·ΡΡΠ»ΠΎΠ²Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠΊΠ°Π»ΡΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ
Π€ΡΠ½ΠΊΡΠΈΡΡΠ° minim ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠ° scipy.optimize ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΎΠ±Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π·Π°Π΄Π°ΡΠΈ Π·Π° ΡΡΠ»ΠΎΠ²Π½Π° ΠΈ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠΊΠ°Π»ΡΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. ΠΠ° Π΄Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ°ΠΌΠ΅ Π½Π΅ΠΉΠ½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ°, ΡΠ΅ Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ.
ΠΠ° ΡΠ΅Π·ΠΈ ΡΠ΅Π»ΠΈ ΠΈΠ΄Π΅Π°Π»Π½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠΆΠ΄Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π½Π° Π ΠΎΠ·Π΅Π½Π±ΡΠΎΠΊ ΠΎΡ N ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΡΡΠΎ Π΅ Ρ Π²ΠΈΠ΄Π°:

ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π½Π° Π ΠΎΠ·Π΅Π½Π±ΡΠΎΠΊ ΠΈ Π½Π΅ΠΉΠ½ΠΈΡΠ΅ Π―ΠΊΠΎΠ±ΠΈ ΠΈ Π₯Π΅Ρ ΠΌΠ°ΡΡΠΈΡΠΈ (ΠΏΡΡΠ²Π° ΠΈ Π²ΡΠΎΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ) Π²Π΅ΡΠ΅ ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π² ΠΏΠ°ΠΊΠ΅ΡΠ° scipy.optimize, ΡΠ΅ Ρ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΈ.
import numpy as np
def rosen(x):
"""Π€ΡΠ½ΠΊΡΠΈΡΡΠ° Π½Π° Π ΠΎΠ·Π΅Π½Π±ΡΠΎΠΊ"""
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()

ΠΠ½Π°Π΅ΠΉΠΊΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ, ΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΡΡ Π΅ 0 ΠΏΡΠΈ
, Π½Π΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π½Π° Π ΠΎΠ·Π΅Π½Π±ΡΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΈ ΠΎΡ scipy.optimize.
ΠΠ΅ΡΠΎΠ΄ΡΡ Π½Π° ΠΠ΅Π»Π΄Π΅ΡΠ°-ΠΠΈΠ΄Π° (Nelder-Mead)
ΠΠ΅ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅ Π½Π°ΡΠ°Π»Π½Π° ΡΠΎΡΠΊΠ° x0 Π² 5-ΠΌΠ΅ΡΠ½ΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. Π©Π΅ Π½Π°ΠΌΠ΅ΡΠΈΠΌ Π½Π°ΠΉ-Π±Π»ΠΈΠ·ΠΊΠ°ΡΠ° Π΄ΠΎ Π½Π΅Ρ ΡΠΎΡΠΊΠ° Π½Π° ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π½Π° Π ΠΎΠ·Π΅Π½Π±ΡΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π°Π»Π³ΠΎΡΠΈΡΡΠΌΠ° (Π°Π»Π³ΠΎΡΠΈΡΡΠΌΡΡ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ ΠΊΠ°ΡΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° method):
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)ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠΊΠ»ΡΡΠΈ.
Π’Π΅ΠΊΡΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°: 0.000000
ΠΡΠ΅ΡΠ°ΡΠΈΠΈ: 339
ΠΡΠ΅Π½ΠΊΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°: 571
[1. 1. 1. 1. 1.]ΠΠ΅ΡΠΎΠ΄ΡΡ Π½Π° ΡΠΈΠΌΠΏΠ»Π΅ΠΊΡΠ° Π΅ Π½Π°ΠΉ-ΠΏΡΠΎΡΡΠΈΡΡ Π½Π°ΡΠΈΠ½ Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ²Π½ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π° ΠΈ Π΄ΠΎΡΡΠ° Π³Π»Π°Π΄ΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°, Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΡΠ°ΠΌΠΎ Π½Π΅ΠΉΠ½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. ΠΠ΅ΡΠΎΠ΄ΡΡ Π½Π° ΠΠ΅Π»Π΄Π΅Ρ-ΠΠΈΠ΄ Π΅ Π΄ΠΎΠ±ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΏΡΠΎΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡΠ΅Π½ΠΊΠΈ Π½Π° Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°, Π·Π° Π½Π°ΠΌΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅.
ΠΠ΅ΡΠΎΠ΄ΡΡ Π½Π° ΠΠ°ΡΡΠ»
ΠΡΡΠ³ Π°Π»Π³ΠΎΡΠΈΡΡΠΌ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° ΡΠ°ΠΌΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅, Π΅ . ΠΠ° Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅, ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ method = βpowellβ Π²ΡΠ² ΡΡΠ½ΠΊΡΠΈΡΡΠ° minim.
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)ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠΊΠ»ΡΡΠΈ.
Π’Π΅ΠΊΡΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°: 0.000000
ΠΡΠ΅ΡΠ°ΡΠΈΠΈ: 19
ΠΡΠ΅Π½ΠΊΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°: 1622
[1. 1. 1. 1. 1.]ΠΠ»Π³ΠΎΡΠΈΡΡΠΌΡΡ Π½Π° ΠΡΠΎΠΉΠ΄Π΅Π½Π°-Π€Π»Π΅ΡΡΠ΅ΡΠ°-ΠΠΎΠ»Π΄ΡΠ°ΡΠ±Π°-Π¨Π°Π½Π½ΠΎ (BFGS)
ΠΠ° ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° ΠΏΠΎ-Π±ΡΡΠ·Π° ΠΊΠΎΠ½Π²Π΅ΡΠ³Π΅Π½ΡΠΈΡ ΠΊΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΡΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ Π½Π° ΡΠ΅Π»Π΅Π²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ. ΠΡΠ°Π΄ΠΈΠ΅Π½ΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°Π΄Π°Π΄Π΅ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΡΠΈΡΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΠΊΠΈ ΠΎΡ ΠΏΡΡΠ²ΠΈ ΡΠ΅Π΄. ΠΡΠ² Π²ΡΠ΅ΠΊΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΌΠ΅ΡΠΎΠ΄ΡΡ BFGS ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΡΠΈΠΌΠΏΠ»Π΅ΠΊΡ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΠ΅ΠΊΠ° Π½Π°ΠΌΠ΅ΡΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°ΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π½Π° Π ΠΎΠ·Π΅Π½Π±ΡΠΎΠΊ Π² Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅Π½ Π²ΠΈΠ΄:


Π’ΠΎΠ²Π° ΠΈΠ·ΡΠ°Π·Π΅Π½ΠΈΠ΅ Π²Π°ΠΆΠΈ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΎΡΠ²Π΅Π½ Π·Π° ΠΏΡΡΠ²Π°ΡΠ° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΊΠ°ΡΠΎ:


ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Π½Π° Python, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° ΡΠΎΠ·ΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ:
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 Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° minim, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ.
res = minimize(rosen, x0, method='BFGS', jac=rosen_der, options={'disp': True})
print(res.x)ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° ΠΏΡΠΈΠΊΠ»ΡΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
Π’Π΅ΠΊΡΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°: 0.000000
ΠΡΠ΅ΡΠ°ΡΠΈΠΈ: 25
ΠΡΠ΅Π½ΠΊΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°: 30
ΠΡΠ΅Π½ΠΊΠΈ Π½Π° Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°: 30
[1.00000004 1.0000001 1.00000021 1.00000044 1.00000092]ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π½Π° ΡΠΏΡΡΠ³Π°ΡΠ½ΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠΈ (ΠΡΡΠΎΠ½)
ΠΠ»Π³ΠΎΡΠΈΡΡΠΌ Π΅ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° ΠΡΡΠΎΠ½.
ΠΠ΅ΡΠΎΠ΄ΡΡ Π½Π° ΠΡΡΠΎΠ½ Π΅ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° Π°ΠΏΠΎΠΊΡΠΈΠΌΠ°ΡΠΈΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π² Π»ΠΎΠΊΠ°Π»Π½Π° ΠΎΠ±Π»Π°ΡΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌ ΠΎΡ Π²ΡΠΎΡΠΈ ΠΏΠΎΡΡΠ΄ΡΠΊ:

ΠΊΡΠ΄Π΅ΡΠΎ
Π΅ ΠΌΠ°ΡΡΠΈΡΠ° Π½Π° Π²ΡΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈ (ΠΌΠ°ΡΡΠΈΡΠ° Π½Π° Π₯Π΅ΡΡΠ΅, Ρ
Π΅ΡΠΈΠ°Π½).
ΠΠΊΠΎ Ρ
Π΅ΡΠΈΠ°Π½ΡΡ Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½, ΡΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΈΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈ, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΏΡΠΈΡΠ°Π²Π½ΠΈ Π½ΡΠ»Π΅Π²ΠΈΡΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ Π½Π° ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½Π°ΡΠ° ΡΠΎΡΠΌΠ° ΠΊΡΠΌ Π½ΡΠ»Π°. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΠΈΠ·ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅:

ΠΠ±ΡΠ°ΡΠ½ΠΈΡΡ Ρ
Π΅ΡΠΈΠ°Π½ ΡΠ΅ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π° ΡΠΏΡΡΠ³Π°ΡΠ½ΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠΈ. ΠΡΠΈΠΌΠ΅Ρ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π½Π° Π ΠΎΠ·Π΅Π½Π±ΡΠΎΠΊ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΠΎ-Π΄ΠΎΠ»Ρ. ΠΠ° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π° Newton-CG, Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° Ρ
Π΅ΡΠΈΠ°Π½Π°.
Π₯Π΅ΡΠΈΠ°Π½ΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π½Π° Π ΠΎΠ·Π΅Π½Π±ΡΠΎΠΊ Π² Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅Π½ Π²ΠΈΠ΄ Π΅ ΡΠ°Π²Π΅Π½ Π½Π°:


ΠΊΡΠ΄Π΅ΡΠΎ
ΠΈ
, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΌΠ°ΡΡΠΈΡΠ°ΡΠ°
.
ΠΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ Π½Π΅Π½ΡΠ»Π΅Π²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π½Π° ΠΌΠ°ΡΡΠΈΡΠ°ΡΠ° ΡΠ° ΡΠ°Π²Π½ΠΈ Π½Π°:




ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΠ΅ΡΠΈΠ·ΠΌΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ N = 5, ΠΌΠ°ΡΡΠΈΡΠ°ΡΠ° Π½Π° Π₯Π΅ΡΡΠ΅ Π·Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π½Π° Π ΠΎΠ·Π΅Π½Π±ΡΠΎΠΊ ΠΈΠΌΠ° Π»Π΅Π½ΡΠΎΠ² Π²ΠΈΠ΄:

ΠΠΎΠ΄ΡΡ, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° ΡΠΎΠ·ΠΈ Ρ Π΅ΡΠΈΠ°Π½, Π·Π°Π΅Π΄Π½ΠΎ Ρ ΠΊΠΎΠ΄Π° Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π½Π° Π ΠΎΠ·Π΅Π½Π±ΡΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π° ΡΠΏΡΡΠ³Π°ΡΠ½ΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠΈ (ΠΡΡΠΎΠ½):
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)ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
Π’Π΅ΠΊΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ: 0.000000
ΠΡΠ΅ΡΠ°ΡΠΈΠΈ: 24
ΠΡΠ΅Π½ΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΈ: 33
ΠΡΠ΅Π½ΠΊΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°: 56
ΠΡΠ΅Π½ΠΊΠΈ ΠΠ΅ΡΡΠ΅: 24
[1. 1. 1. 0.99999999 0.99999999]ΠΡΠΈΠΌΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π³Π΅ΡΡΠΈΠ°Π½Π° ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ Π²Π΅ΠΊΡΠΎΡΠ°
Π ΡΠ΅Π°Π»ΡΠ½ΡΡ Π·Π°Π΄Π°ΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΈ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΉ ΠΌΠ°ΡΡΠΈΡΡ ΠΠ΅ΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠ°ΠΌΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΠ΅ΡΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½ΡΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π²Π΅ΠΊΡΠΎΡ, ΡΠ°Π²Π½ΡΠΉ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π³Π΅ΡΡΠΈΠ°Π½Π° Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ Π²Π΅ΠΊΡΠΎΡΠΎΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π΅Π΅ ΡΡΠ°Π·Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π³Π΅ΡΡΠΈΠ°Π½Π° Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ Π²Π΅ΠΊΡΠΎΡΠΎΠΌ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ hess, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²Π΅ΠΊΡΠΎΡ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ Π²Π΅ΠΊΡΠΎΡ β Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° (Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ). Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π³Π΅ΡΡΠΈΠ°Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π ΠΎΠ·Π΅Π½Π±ΡΠΎΠΊΠ° Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ Π²Π΅ΠΊΡΠΎΡΠΎΠΌ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΡΠ»ΠΈ p β ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ Π²Π΅ΠΊΡΠΎΡ, ΡΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄:

Π€ΡΠ½ΠΊΡΠΈΡ, Π²ΡΡΠΈΡΠ»ΡΡΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π³Π΅ΡΡΠΈΠ°Π½Π° ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ Π²Π΅ΠΊΡΠΎΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° hessp ΡΡΠ½ΠΊΡΠΈΠΈ minimize:
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})
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
Π’Π΅ΠΊΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ: 0.000000
ΠΡΠ΅ΡΠ°ΡΠΈΠΈ: 24
ΠΡΠ΅Π½ΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΈ: 33
ΠΡΠ΅Π½ΠΊΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°: 56
ΠΡΠ΅Π½ΠΊΠΈ ΠΠ΅ΡΡΠ΅: 66ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π΄ΠΎΠ²Π΅ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ (trust region) ΡΠΎΠΏΡΡΠΆΠ΅Π½Π½ΡΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠΎΠ² (ΠΡΡΡΠΎΠ½Π°)
ΠΠ»ΠΎΡ Π°Ρ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½Π½ΠΎΡΡΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΠ΅ΡΡΠ΅ ΠΈ Π½Π΅Π²Π΅ΡΠ½ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΠΏΡΡΠΆΠ΅Π½Π½ΡΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠΎΠ² ΠΡΡΡΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ. Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ΄Π°Π΅ΡΡΡ (trust-region) ΡΠΎΠΏΡΡΠΆΠ΅Π½Π½ΡΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠΎΠ² ΠΡΡΡΠΎΠ½Π°.
ΠΡΠΈΠΌΠ΅Ρ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΡΡ ΠΠ΅ΡΡΠ΅:
res = minimize(rosen, x0, method='trust-ncg',
jac=rosen_der, hess=rosen_hess,
options={'gtol': 1e-8, 'disp': True})
print(res.x)ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°.
Π’Π΅ΠΊΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ: 0.000000
ΠΡΠ΅ΡΠ°ΡΠΈΠΈ: 20
ΠΡΠ΅Π½ΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ: 21
ΠΡΠ΅Π½ΠΊΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°: 20
ΠΡΠ΅Π½ΠΊΠΈ Π³Π΅ΡΡΠΈΠ°Π½Π°: 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)ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°.
Π’Π΅ΠΊΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ: 0.000000
ΠΡΠ΅ΡΠ°ΡΠΈΠΈ: 20
ΠΡΠ΅Π½ΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ: 21
ΠΡΠ΅Π½ΠΊΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°: 20
ΠΡΠ΅Π½ΠΊΠΈ Π³Π΅ΡΡΠΈΠ°Π½Π°: 0
[1. 1. 1. 1. 1.]ΠΠ΅ΡΠΎΠ΄ΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° Π½Π° ΠΡΠΈΠ»ΠΎΠ²
ΠΠ°ΠΊ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ trust-ncg, ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΡΠΈΠ»ΠΎΠ²Π° ΡΠ° Π΄ΠΎΠ±ΡΠ΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΌΠ°ΡΠ°Π±Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°ΠΌΠΎ ΠΌΠ°ΡΡΠΈΡΠ½ΠΈ-Π²Π΅ΠΊΡΠΎΡΠ½ΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ. Π‘ΡΡΠΈΠ½Π°ΡΠ° ΠΈΠΌ Π΅ Π² ΡΠ΅ΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° Π² Π΄ΠΎΠ²Π΅ΡΠΈΡΠ΅Π»Π½Π° ΠΎΠ±Π»Π°ΡΡ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΠΎΡ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΎΡΠΎ ΠΏΠΎΠ΄ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π½Π° ΠΡΠΈΠ»ΠΎΠ². ΠΠ° Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΎΠ·ΠΈ ΠΌΠ΅ΡΠΎΠ΄, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°ΡΠ°Π΄ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈΡ Π±ΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΠ½ΠΈ-Π²Π΅ΠΊΡΠΎΡΠ½ΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π½Π° Π΅Π΄Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠ°, Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΠΌΠ΅ΡΠΎΠ΄Π° trust-ncg. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½Π°ΡΠ° ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠ° Π΅ ΠΏΠΎ-ΡΠΎΡΠ½ΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° trust-ncg.
ΠΡΠΈΠΌΠ΅Ρ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΡΡ ΠΠ΅ΡΡΠ΅:
res = minimize(rosen, x0, method='trust-krylov',
jac=rosen_der, hess=rosen_hess,
options={'gtol': 1e-8, 'disp': True})
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠΊΠ»ΡΡΠΈΠ»Π°.
Π’Π΅ΠΊΡΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°: 0.000000
ΠΡΠ΅ΡΠ°ΡΠΈΠΈ: 19
ΠΡΠ΅Π½ΠΊΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ: 20
ΠΡΠ΅Π½ΠΊΠΈ Π½Π° Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°: 20
ΠΡΠ΅Π½ΠΊΠΈ Π½Π° Π³Π΅ΡΡΠΈΠ°Π½Π°: 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})
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠΊΠ»ΡΡΠΈΠ»Π°.
Π’Π΅ΠΊΡΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°: 0.000000
ΠΡΠ΅ΡΠ°ΡΠΈΠΈ: 19
ΠΡΠ΅Π½ΠΊΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ: 20
ΠΡΠ΅Π½ΠΊΠΈ Π½Π° Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°: 20
ΠΡΠ΅Π½ΠΊΠΈ Π½Π° Π³Π΅ΡΡΠΈΠ°Π½Π°: 0
print(res.x)
[1. 1. 1. 1. 1.]
ΠΠ»Π³ΠΎΡΠΈΡΡΠΌ Π·Π° ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² Π΄ΠΎΠ²Π΅ΡΠΈΡΠ΅Π»Π½Π° ΠΎΠ±Π»Π°ΡΡ
ΠΡΠΈΡΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ (Newton-CG, trust-ncg ΠΈ trust-krylov) ΡΠ° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΌΠ°ΡΠ°Π±Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ (Ρ Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ). Π’ΠΎΠ²Π° ΡΠ΅ Π΄ΡΠ»ΠΆΠΈ Π½Π° ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΡΠΌΡΡ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° Π½Π° ΡΠ²ΡΡΠ·Π°Π½ΠΈΡΠ΅ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠΆΠ΄Π° ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΎ Π½Π°ΠΌΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°ΡΠ½Π°ΡΠ° ΠΌΠ°ΡΡΠΈΡΠ° Π½Π° Π³Π΅ΡΡΠΈΠ°Π½Π°. Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° ΠΈΡΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ, Π±Π΅Π· ΡΠ²Π½ΠΎΡΠΎ ΡΠ°Π·Π»Π°Π³Π°Π½Π΅ Π½Π° Π³Π΅ΡΡΠΈΠ°Π½Π°. Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈ ΡΠ°ΠΌΠΎ ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π·Π° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π³Π΅ΡΡΠΈΠ°Π½Π° ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈΡ Π²Π΅ΠΊΡΠΎΡ, ΡΠΎΠ·ΠΈ Π°Π»Π³ΠΎΡΠΈΡΡΠΌ Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ°Π·ΡΠ΅Π΄Π΅Π½ΠΈ (Π»Π΅Π½ΡΠΎΠ²ΠΈ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»Π½ΠΈ) ΠΌΠ°ΡΡΠΈΡΠΈ. Π’ΠΎΠ²Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π½ΠΈΡΠΊΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ Π·Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π° ΠΈΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π½Π° Π²ΡΠ΅ΠΌΠ΅.
ΠΡΠΈ Π·Π°Π΄Π°ΡΠ°Ρ ΡΡΡ ΡΡΠ΅Π΄Π΅Π½ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈΡΠ΅ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ°ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π½Π° Π₯Π΅ΡΠΈΠ΅Π²Π°ΡΠ° ΠΌΠ°ΡΡΠΈΡΠ° Π½Π΅ ΠΈΠ³ΡΠ°ΡΡ ΡΠ΅ΡΠ°Π²Π°ΡΠ° ΡΠΎΠ»Ρ. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°ΠΉΠΊΠΈ ΠΏΠΎΠ΄ΡΡΡΠ΅ΡΡΠ²Π°ΡΠ° Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° Π΄ΠΎΠ²Π΅ΡΠΈΠ΅ΡΠΎ ΠΏΠΎΡΡΠΈ ΡΠΎΡΠ½ΠΎ. ΠΠ° ΡΠ΅Π»ΡΠ° Π½ΡΠΊΠΎΠΈ Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½ΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π°Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ Π·Π° Π²ΡΡΠΊΠ° ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠ°. Π’Π°ΠΊΠΎΠ²Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° 3 ΠΈΠ»ΠΈ 4 ΡΠ°Π·Π»Π°Π³Π°Π½ΠΈΡ Π½Π° Π₯ΠΎΠ»Π΅ΡΠΊΠΈΡ ΠΌΠ°ΡΡΠΈΡΠ°ΡΠ° Π½Π° Π₯Π΅Ρ. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄ΡΡ ΠΊΠΎΠ½Π²Π΅ΡΠ³ΠΈΡΠ° Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π° ΡΠ΅Π»Π΅Π²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Π΄ΡΡΠ³ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΠΎΠ±Π»Π°ΡΡ Π½Π° Π΄ΠΎΠ²Π΅ΡΠΈΠ΅. Π’ΠΎΠ·ΠΈ Π°Π»Π³ΠΎΡΠΈΡΡΠΌ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΡΠ°ΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π½Π° ΠΏΡΠ»Π½Π°ΡΠ° Π₯Π΅ΡΠΈΠ΅Π²Π° ΠΌΠ°ΡΡΠΈΡΠ° ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° Π₯Π΅Ρ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π²Π΅ΠΊΡΠΎΡ.
ΠΡΠΈΠΌΠ΅Ρ Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π½Π° Π ΠΎΠ·Π΅Π½Π±ΡΠΎΠΊ:
res = minimize(rosen, x0, method='trust-exact',
jac=rosen_der, hess=rosen_hess,
options={'gtol': 1e-8, 'disp': True})
res.xΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° Π·Π°Π²ΡΡΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
Π’Π΅ΠΊΡΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°: 0.000000
ΠΡΠ΅ΡΠ°ΡΠΈΠΈ: 13
ΠΡΠ΅Π½ΠΊΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°: 14
ΠΡΠ΅Π½ΠΊΠΈ Π½Π° Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°: 13
ΠΡΠ΅Π½ΠΊΠΈ Π½Π° Π₯Π΅Ρ: 14
array([1., 1., 1., 1., 1.])ΠΠ° ΡΠΎΠ²Π° ΡΠ΅ ΡΠΏΡΠ΅ΠΌ. Π ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌ Π΄Π° ΡΠ°Π·ΠΊΠ°ΠΆΠ° Π½Π°ΠΉ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΡΠΎ Π·Π° ΡΡΠ»ΠΎΠ²Π½Π°ΡΠ° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° Π² ΡΠ΅ΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ Π°ΠΏΡΠΎΠΊΡΠΈΠΌΠ°ΡΠΈΡ, ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Ρ Π΅Π΄Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠΈ ΠΈ ΡΡΡΡΠ΅Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΡΠ΅Π½ΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΎΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° scipy.optimize.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ:
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
