SciPy, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π°

SciPy, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π°

SciPy (сС ΠΈΠ·Π³ΠΎΠ²Π°Ρ€Π° саи ΠΏΠΈΡ‚Π°) Π΅ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡ΠΊΠΈ апликациски ΠΏΠ°ΠΊΠ΅Ρ‚ Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° наставката Numpy Python. Π‘ΠΎ SciPy, Π²Π°ΡˆΠ°Ρ‚Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π° Python сСсија станува истата ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚Π½Π° Π½Π°ΡƒΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ слоТСна систСмска ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½Π° срСдина ΠΊΠ°ΠΊΠΎ MATLAB, IDL, Octave, R-Lab ΠΈ SciLab. ДСнСс сакам Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π΄Π° Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° користам Π½Π΅ΠΊΠΎΠΈ Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ Π·Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π²ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ scipy.optimize. ΠŸΠΎΠ΄Π΅Ρ‚Π°Π»Π½Π° ΠΈ Π°ΠΆΡƒΡ€ΠΈΡ€Π°Π½Π° помош Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сСкогаш ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π΄ΠΎΠ±ΠΈΠ΅ со помош Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° help() ΠΈΠ»ΠΈ со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Shift+Tab.

Π’ΠΎΠ²Π΅Π΄

Π‘ΠΎ Ρ†Π΅Π» Π΄Π° сС спаситС сСбСси ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ ΠΎΠ΄ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ ΠΈ Ρ‡ΠΈΡ‚Π°ΡšΠ΅ ΠΏΡ€ΠΈΠΌΠ°Ρ€Π½ΠΈ ΠΈΠ·Π²ΠΎΡ€ΠΈ, врскитС Π΄ΠΎ описитС Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ ќС Π±ΠΈΠ΄Π°Ρ‚ Π³Π»Π°Π²Π½ΠΎ Π½Π° Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ˜Π°. Како ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠ²ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ сС Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ Π·Π° Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π°Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π²ΠΎ ΠΎΠΏΡˆΡ‚ΠΈ услови ΠΈ условитС Π·Π° Π½ΠΈΠ²Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π°. Π—Π° Π΄Π° ја Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΡΡƒΡˆΡ‚ΠΈΠ½Π°Ρ‚Π° Π½Π° ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡ΠΊΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, слСдСтС Π³ΠΈ врскитС Π΄ΠΎ повСќС Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Ρ˜Π΄Π°Ρ‚ Π½Π° ΠΊΡ€Π°Ρ˜ΠΎΡ‚ ΠΎΠ΄ сСкоја ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ΠΈΠ»ΠΈ Π²ΠΎ Π²Π°ΡˆΠΈΠΎΡ‚ ΠΎΠΌΠΈΠ»Π΅Π½ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Ρ‡.

Π—Π½Π°Ρ‡ΠΈ, ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚ scipy.optimize Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° слСднивС постапки:

  1. Условно ΠΈ бСзусловно ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° скаларнитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ (ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ) со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ (Nelder-Mead simplex, BFGS, ΠŠΡƒΡ‚Π½ ΠΊΠΎΠ½Ρ˜ΡƒΠ³ΠΈΡ€Π°Π½ΠΈ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΈ, ΠšΠžΠ‘Π˜Π›Π ΠΈ SLSQP)
  2. Π“Π»ΠΎΠ±Π°Π»Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π° (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€: басСнот, diff_evolution)
  3. ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° остатоцитС МНЦ (Π½Π°Ρ˜ΠΌΠ°Π»ΠΊΡƒ_ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈ) ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ Π·Π° Ρ„ΠΈΡ‚ΠΈΠ½Π³ Π½Π° ΠΊΡ€ΠΈΠ²Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π½Π΅Π»ΠΈΠ½Π΅Π°Ρ€Π½ΠΈ најмали ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈ (ΠΊΡ€ΠΈΠ²Π°_Ρ„ΠΈΡ‚)
  4. ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° скаларнитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π΅Π΄Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° (minim_scalar) ΠΈ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΡ€Π΅Π½ΠΈ (root_scalar)
  5. ПовСќСдимСнзионални Ρ€Π΅ΡˆΠ°Π²Π°Ρ‡ΠΈ Π½Π° систСм Π½Π° Ρ€Π°Π²Π΅Π½ΠΊΠΈ (ΠΊΠΎΡ€Π΅Π½) со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ (Ρ…ΠΈΠ±Ρ€ΠΈΠ΄Π΅Π½ ΠŸΠ°ΡƒΠ΅Π», Π›Π΅Π²Π΅Π½Π±Π΅Ρ€Π³-ΠœΠ°Ρ€ΠΊΠ°Ρ€Ρ‚ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΎΠ΄ Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС ΠŠΡƒΡ‚Π½-ΠšΡ€ΠΈΠ»ΠΎΠ²).

Π’ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ќС ја Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ само ΠΏΡ€Π²Π°Ρ‚Π° ставка ΠΎΠ΄ Ρ†Π΅Π»Π°Ρ‚Π° ΠΎΠ²Π°Π° листа.

БСзусловно ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° скаларна Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° ΠΎΠ΄ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ

Π€ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° minim ΠΎΠ΄ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ scipy.optimize ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° ΠΎΠΏΡˆΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со условно ΠΈ бСзусловно ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° скаларнитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. Π—Π° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°, ќС Π½ΠΈ Ρ‚Ρ€Π΅Π±Π° соодвСтна Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° ΠΎΠ΄ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΠΈ ќС Π³ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ.

Π—Π° ΠΎΠ²ΠΈΠ΅ Ρ†Π΅Π»ΠΈ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π ΠΎΠ·Π΅Π½Π±Ρ€ΠΎΠΊ Π½Π° N ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π΅ ΡΠΎΠ²Ρ€ΡˆΠ΅Π½Π°, која ΠΈΠΌΠ° Ρ„ΠΎΡ€ΠΌΠ°:

SciPy, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π°

И ΠΏΠΎΠΊΡ€Π°Ρ˜ Ρ„Π°ΠΊΡ‚ΠΎΡ‚ Π΄Π΅ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Rosenbrock ΠΈ Π½Π΅Ρ˜Π·ΠΈΠ½ΠΈΡ‚Π΅ Jacobi ΠΈ Hessian ΠΌΠ°Ρ‚Ρ€ΠΈΡ†ΠΈ (ΠΏΡ€Π²ΠΈΠΎΡ‚ ΠΈ Π²Ρ‚ΠΎΡ€ΠΈΠΎΡ‚ Π΄Π΅Ρ€ΠΈΠ²Π°Ρ‚, соодвСтно) сС вСќС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π²ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ 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.

НСлдСр-Мид симплСкс ΠΌΠ΅Ρ‚ΠΎΠ΄

НСка ΠΈΠΌΠ° ΠΏΠΎΡ‡Π΅Ρ‚Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° x0 Π²ΠΎ 5-Π΄ΠΈΠΌΠ΅Π½Π·ΠΈΠΎΠ½Π°Π»Π΅Π½ простор. АјдС Π΄Π° ја најдСмС ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π ΠΎΠ·Π΅Π½Π±Ρ€ΠΎΠΊ Π½Π°Ρ˜Π±Π»ΠΈΡΠΊΡƒ Π΄ΠΎ Π½Π΅Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΡ‚ НСлдСр-Мид симплСкс (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΡ‚ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ ΠΊΠ°ΠΊΠΎ врСдност Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚):

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 Π΅ Π΄ΠΎΠ±Π°Ρ€ ΠΈΠ·Π±ΠΎΡ€ Π·Π° Сдноставни ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΡšΠ΅. ΠœΠ΅Ρ“ΡƒΡ‚ΠΎΠ°, бидСјќи Π½Π΅ користи ΠΏΡ€ΠΎΡ†Π΅Π½ΠΊΠΈ Π½Π° Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚, ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ»Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° сС најдС ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠΎΡ‚.

ΠŸΠ°ΡƒΠ΅Π» ΠΌΠ΅Ρ‚ΠΎΠ΄

Π”Ρ€ΡƒΠ³ Π°Π»Π³ΠΎΡ€ΠΈΡ‚Π°ΠΌ Π·Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π²ΠΎ кој сС прСсмСтуваат само врСдноститС Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π΅ ΠŸΠ°ΡƒΠ΅Π»ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄. Π—Π° Π΄Π° Π³ΠΎ користитС, Ρ‚Ρ€Π΅Π±Π° Π΄Π° поставитС ΠΌΠ΅Ρ‚ΠΎΠ΄ = 'powell' Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ.

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, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π°

Π˜Π½Π²Π΅Ρ€Π·Π½ΠΈΠΎΡ‚ Ρ…Π΅ΡΠΈΡ˜Π°Π½ сС прСсмСтува со помош Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚ Π½Π° ΠΊΠΎΠ½Ρ˜ΡƒΠ³ΠΈΡ€Π°Π½ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° овој ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π ΠΎΠ·Π΅Π½Π±Ρ€ΠΎΠΊ Π΅ Π΄Π°Π΄Π΅Π½ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ. Π—Π° Π΄Π° Π³ΠΎ користитС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚ 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]

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ со Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π° Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° Π½Π° Π₯Ссијан ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π²Π΅ΠΊΡ‚ΠΎΡ€

Кај ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ ΠΎΠ΄ Ρ€Π΅Π°Π»Π½ΠΈΠΎΡ‚ свСт, ΠΏΡ€Π΅ΡΠΌΠ΅Ρ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΈ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Ρ†Π΅Π»Π°Ρ‚Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π½Π° Π₯Ссија ΠΌΠΎΠΆΠ΅ Π΄Π° Π±Π°Ρ€Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ рСсурси Π·Π° Π²Ρ€Π΅ΠΌΠ΅ ΠΈ ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°. Π’ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚ Π½Π΅ΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π΄Π° сС спСцифицира самата Π₯Ссијанска ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, бидСјќи постапката Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π±Π°Ρ€Π° само Π²Π΅ΠΊΡ‚ΠΎΡ€ Π΅Π΄Π½Π°ΠΊΠΎΠ² Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΎΡ‚ Π½Π° Π₯Ссијан со Π΄Ρ€ΡƒΠ³ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π²Π΅ΠΊΡ‚ΠΎΡ€. Π’Π°ΠΊΠ°, ΠΎΠ΄ прСсмСтковна Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°, ΠΌΠ½ΠΎΠ³Ρƒ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΎ вСднаш Π΄Π° сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° која Π³ΠΎ Π²Ρ€Π°ΡœΠ° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΎΠ΄ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΎΡ‚ Π½Π° Π₯Ссијан со ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π²Π΅ΠΊΡ‚ΠΎΡ€.

РазмислСтС Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° hess, која Π³ΠΎ Π·Π΅ΠΌΠ° Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΡ‚ Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ ΠΊΠ°ΠΊΠΎ ΠΏΡ€Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΊΠ°ΠΊΠΎ Π²Ρ‚ΠΎΡ€ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ (Π·Π°Π΅Π΄Π½ΠΎ со Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°). Π’ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜, ΠΏΡ€Π΅ΡΠΌΠ΅Ρ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΎΡ‚ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π₯Ссијан ΠΎΠ΄ Π ΠΎΠ·Π΅Π½Π±Ρ€ΠΎΠΊ со ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³Ρƒ Ρ‚Π΅ΡˆΠΊΠΎ. Ако p Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π²Π΅ΠΊΡ‚ΠΎΡ€, ΠΏΠΎΡ‚ΠΎΠ° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΎΡ‚ SciPy, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π° ΠΈΠΌΠ° Ρ„ΠΎΡ€ΠΌΠ°:

SciPy, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π°

Π€ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° ΡˆΡ‚ΠΎ Π³ΠΎ прСсмСтува ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΎΡ‚ Π½Π° Π₯Ссијан ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π²Π΅ΠΊΡ‚ΠΎΡ€ сС прСнСсува ΠΊΠ°ΠΊΠΎ врСдност Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΡ‚ hessp Π΄ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΡšΠ΅:

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

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΡ‚ ΠšΡ€ΠΈΠ»ΠΎΠ²

Како ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚ 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})

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

Алгоритам Π·Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²ΠΎ Ρ€Π΅Π³ΠΈΠΎΠ½ΠΎΡ‚ Π½Π° Π΄ΠΎΠ²Π΅Ρ€Π±Π°

Π‘ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ (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

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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€