SciPy, เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ

SciPy, เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ

SciPy (เช‰เชšเซเชšเชพเชฐ เชธเชพเชˆ เชชเชพเชˆ) เช Numpy Python เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช—เชพเชฃเชฟเชคเชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชชเซ‡เช•เซ‡เชœ เช›เซ‡. SciPy เชธเชพเชฅเซ‡, เชคเชฎเชพเชฐเซเช‚ เช‡เชจเซเชŸเชฐเซ‡เช•เซเชŸเชฟเชต เชชเชพเชฏเชฅเซ‹เชจ เชธเชคเซเชฐ MATLAB, IDL, Octave, R-Lab เช…เชจเซ‡ SciLab เชœเซ‡เชตเซเช‚ เชœ เชธเช‚เชชเซ‚เชฐเซเชฃ เชกเซ‡เชŸเชพ เชตเชฟเชœเซเชžเชพเชจ เช…เชจเซ‡ เชœเชŸเชฟเชฒ เชธเชฟเชธเซเชŸเชฎ เชชเซเชฐเซ‹เชŸเซ‹เชŸเชพเช‡เชชเชฟเช‚เช— เชตเชพเชคเชพเชตเชฐเชฃ เชฌเชจเซ€ เชœเชพเชฏ เช›เซ‡. เช†เชœเซ‡ เชนเซเช‚ scipy.optimize เชชเซ‡เช•เซ‡เชœเชฎเชพเช‚ เช•เซ‡เชŸเชฒเชพเช• เชœเชพเชฃเซ€เชคเชพ เช“เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชเชฒเซเช—เซ‹เชฐเชฟเชงเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ‹ เชคเซ‡ เชตเชฟเชถเซ‡ เชŸเซ‚เช‚เช•เชฎเชพเช‚ เชตเชพเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚. เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชชเชฐ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เช…เชจเซ‡ เช…เชฆเซเชฏเชคเชจ เชฎเชฆเชฆ เชนเช‚เชฎเซ‡เชถเชพ help() เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชฅเชตเชพ Shift+Tab เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฎเซ‡เชณเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชชเชฐเชฟเชšเชฏ

เชชเซ‹เชคเชพเชจเซ‡ เช…เชจเซ‡ เชตเชพเชšเช•เซ‹เชจเซ‡ เชชเซเชฐเชพเชฅเชฎเชฟเช• เชธเซเชคเซเชฐเซ‹เชคเซ‹ เชถเซ‹เชงเชตเชพ เช…เชจเซ‡ เชตเชพเช‚เชšเชตเชพเชฅเซ€ เชฌเชšเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชชเชฆเซเชงเชคเชฟเช“เชจเชพ เชตเชฐเซเชฃเชจเชจเซ€ เชฒเชฟเช‚เช•เซเชธ เชฎเซเช–เซเชฏเชคเซเชตเซ‡ เชตเชฟเช•เชฟเชชเซ€เชกเชฟเชฏเชพ เชชเชฐ เชนเชถเซ‡. เชเช• เชจเชฟเชฏเชฎ เชคเชฐเซ€เช•เซ‡, เช† เชฎเชพเชนเชฟเชคเซ€ เชธเชพเชฎเชพเชจเซเชฏ เชถเชฐเชคเซ‹เชฎเชพเช‚ เชชเชฆเซเชงเชคเชฟเช“ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เช…เชฐเชœเซ€ เชฎเชพเชŸเซ‡เชจเซ€ เชถเชฐเชคเซ‹เชจเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเซ€ เช›เซ‡. เช—เชพเชฃเชฟเชคเชฟเช• เชชเชฆเซเชงเชคเชฟเช“เชจเชพ เชธเชพเชฐเชจเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡, เชตเชงเซ เช…เชงเชฟเช•เซƒเชค เชชเซเชฐเช•เชพเชถเชจเซ‹เชจเซ€ เชฒเชฟเช‚เช•เซเชธเชจเซ‡ เช…เชจเซเชธเชฐเซ‹, เชœเซ‡ เชฆเชฐเซ‡เช• เชฒเซ‡เช–เชจเชพ เช…เช‚เชคเซ‡ เช…เชฅเชตเชพ เชคเชฎเชพเชฐเชพ เชฎเชจเชชเชธเช‚เชฆ เชถเซ‹เชง เชเชจเซเชœเชฟเชจเชฎเชพเช‚ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡.

เชคเซ‡เชฅเซ€, scipy.optimize เชฎเซ‹เชกเซเชฏเซเชฒเชฎเชพเช‚ เชจเซ€เชšเซ‡เชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเชพ เช…เชฎเชฒเซ€เช•เชฐเชฃเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡:

  1. เชตเชฟเชตเชฟเชง เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎเซเชธ (เชจเซ‡เชฒเซเชกเชฐ-เชฎเซ€เชก เชธเชฟเชฎเซเชชเซเชฒเซ‡เช•เซเชธ, BFGS, เชจเซเชฏเซ‚เชŸเชจ เช•เชจเซเชœเซเช—เซ‡เชŸ เช—เซเชฐเซ‡เชกเชฟเชฏเชจเซเชŸเซเชธ, เช•เซ‹เชฌเซ€เชฒเชพ ะธ SLSQP)
  2. เชตเซˆเชถเซเชตเชฟเช• เช“เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡: เชฌเซ‡เชธเชฟเชจเชนเซ‹เชชเชฟเช‚เช—, เชคเชซเชพเชตเชค_เชตเชฟเช•เชพเชธ)
  3. เช…เชตเชถเซ‡เชทเซ‹ เช˜เชŸเชพเชกเชตเชพ MNC (เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ_เชšเซ‹เชฐเชธ) เช…เชจเซ‡ เชตเช•เซเชฐ เชซเชฟเชŸเชฟเช‚เช— เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎเซเชธ เชจเซ‹เชจเชฒเชพเช‡เชจเชฐ เชจเซเชฏเซ‚เชจเชคเชฎ เชšเซ‹เชฐเชธ (เชตเชณเชพเช‚เช•_เชซเชฟเชŸ) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡
  4. เชเช• เชšเชฒ (เชฎเชฟเชจเชฟเชฎ_เชธเซเช•เซ‡เชฒเชฐ) เชจเชพ เชธเซเช•เซ‡เชฒเชฐ เชซเช‚เช•เซเชถเชจเชจเซ‡ เชจเซเชฏเซ‚เชจเชคเชฎ เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เชฎเซ‚เชณ (เชฐเซเชŸ_เชธเซเช•เซ‡เชฒเชฐ) เชฎเชพเชŸเซ‡ เชถเซ‹เชงเชตเซเช‚
  5. เชตเชฟเชตเชฟเชง เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎเซเชธ (เชธเช‚เช•เชฐ เชชเซ‹เชตเซ‡เชฒ, เชฒเซ‡เชตเซ‡เชจเชฌเชฐเซเช—-เชฎเชพเชฐเซเช•เชตเชพเชฐเซเชŸ เช…เชฅเชตเชพ เชฎเซ‹เชŸเชพ เชชเชพเชฏเซ‡ เชชเชฆเซเชงเชคเชฟเช“ เชœเซ‡เชฎ เช•เซ‡ เชจเซเชฏเซเชŸเชจ-เช•เซเชฐเชฟเชฒเซ‹เชต).

เช† เชฒเซ‡เช–เชฎเชพเช‚ เช†เชชเชฃเซ‡ เช† เชธเชฎเช—เซเชฐ เชธเซ‚เชšเชฟเชฎเชพเช‚เชฅเซ€ เชซเช•เซเชค เชชเซเชฐเชฅเชฎ เช†เช‡เชŸเชฎ เชชเชฐ เชตเชฟเชšเชพเชฐ เช•เชฐเซ€เชถเซเช‚.

เช…เชจเซ‡เช• เชšเชฒเซ‹เชจเชพ เชธเซเช•เซ‡เชฒเชฐ เชซเช‚เช•เซเชถเชจเชจเซเช‚ เชฌเชฟเชจเชถเชฐเชคเซ€ เชฒเช˜เซเชคเซเชคเชฎเซ€เช•เชฐเชฃ

scipy.optimize เชชเซ‡เช•เซ‡เชœเชฎเชพเช‚เชฅเซ€ เชฒเช˜เซเชคเซเชคเชฎ เช•เชพเชฐเซเชฏ เช˜เชฃเชพ เชšเชฒเซ‹เชจเชพ เชธเซเช•เซ‡เชฒเชฐ เช•เชพเชฐเซเชฏเซ‹เชจเซ€ เชถเชฐเชคเซ€ เช…เชจเซ‡ เชฌเชฟเชจเชถเชฐเชคเซ€ เชฒเช˜เซเชคเซเชคเชฎ เชธเชฎเชธเซเชฏเชพเช“ เชนเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชธเชพเชฎเชพเชจเซเชฏ เช‡เชจเซเชŸเชฐเชซเซ‡เชธ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชฆเชฐเซเชถเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเชจเซ‡ เช˜เชฃเชพ เชšเชฒเซ‹เชจเชพ เชฏเซ‹เช—เซเชฏ เช•เชพเชฐเซเชฏเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡, เชœเซ‡เชจเซ‡ เช…เชฎเซ‡ เช…เชฒเช— เช…เชฒเช— เชฐเซ€เชคเซ‡ เช˜เชŸเชพเชกเซ€เชถเซเช‚.

เช† เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡, N เชšเชฒเซ‹เชจเซเช‚ เชฐเซ‹เชเชจเชฌเซเชฐเซ‹เช• เช•เชพเชฐเซเชฏ เชธเช‚เชชเซ‚เชฐเซเชฃ เช›เซ‡, เชœเซ‡เชจเซเช‚ เชธเซเชตเชฐเซ‚เชช เช›เซ‡:

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, เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ

เชšเชพเชฒเซ‹ 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 เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเชจเชพ เชฎเซ‚เชฒเซเชฏ เชคเชฐเซ€เช•เซ‡ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡, เชจเซ€เชšเซ‡ เชฌเชคเชพเชตเซเชฏเชพ เชชเซเชฐเชฎเชพเชฃเซ‡.

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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹