SciPy (ืืืืื sai pie) ืืื ืืืืืช ืืคืืืงืฆืืืช ืืชืืืืช ืืืืืกืกืช ืขื ืืจืืื Numpy Python. ืขื SciPy, ืืคืขืืช Python ืืืื ืืจืืงืืืืืช ืฉืื ืืืคืืช ืืืืชื ืกืืืืช ืืืขื ื ืชืื ืื ืืืื ืืกืืืืช ืื-ืืืคืืก ืืืจืืืช ืืื MATLAB, IDL, Octave, R-Lab ื-SciLab. ืืืื ืื ื ืจืืฆื ืืืืจ ืืงืฆืจื ืขื ืืื ืืืฉืชืืฉ ืืืื ืืืืืจืืชืื ืืืคืืืืืืฆืื ืืืืขืื ืืืืืืช scipy.optimize. ืขืืจื ืืคืืจืืช ืืขืืื ืืช ืืืชืจ ืขื ืฉืืืืฉ ืืคืื ืงืฆืืืช ืชืืื ืืคืฉืจ ืืงืื ืืืืฆืขืืช ืืคืงืืื help() ืื ืืืืฆืขืืช Shift+Tab.
ืืืื
ืขื ืื ืช ืืืฆืื ืืช ืขืฆืื ืืืช ืืงืืจืืื ืืืืคืืฉ ืืงืจืืืช ืืงืืจืืช ืจืืฉืื ืืื, ืงืืฉืืจืื ืืชืืืืจื ืฉืืืืช ืืืื ืืขืืงืจ ืืืืืงืืคืืื. ืืืื, ืืืืข ืื ืืกืคืืง ืืื ืืืืื ืืช ืืฉืืืืช ืืืื ืืื ืืืืืื ืืืช ืืชื ืืื ืืืืฉืืื. ืืื ืืืืื ืืช ืืืืช ืืฉืืืืช ืืืชืืืืืช, ืขืงืื ืืืจ ืืงืืฉืืจืื ืืคืจืกืืืื ืืืกืืืื ืืืชืจ, ืืืชื ื ืืชื ืืืฆืื ืืกืืฃ ืื ืืืืจ ืื ืืื ืืข ืืืืคืืฉ ืืืืขืืฃ ืขืืื.
ืื, ืืืืื scipy.optimize ืืืื ืืืฉืื ืฉื ืืืืืืื ืืืืื:
- ืืืขืืจ ืืืชื ื ืืืืชื ืืืชื ื ืฉื ืคืื ืงืฆืืืช ืกืงืืจืืืช ืฉื ืืกืคืจ ืืฉืชื ืื (ืืื ืืืื) ืืืืฆืขืืช ืืืืืจืืชืืื ืฉืื ืื (Nelder-Mead simplex, BFGS, ื ืืืืื ืืฆืืื ืืจืืืื ืืื,
ืงืืืืื ะธSLSQP ) - ืืืคืืืืืืฆืื ืืืืืืืช (ืืืืืื:
ืืื ืฉืืคืื ื ,diff_evolution ) - ืืืขืืจ ืฉืืจืืืช
MNC (ืืคืืืช_ืจืืืืขืื) ืืืืืืจืืชืืื ืฉื ืืชืืืช ืขืงืืื ืืืืฆืขืืช ืจืืืืขืื ืงืื ืื ืื ืืื ืืืจืืื (Curve_fit) - ืืืขืืจ ืคืื ืงืฆืืืช ืกืงืืจืืืช ืฉื ืืฉืชื ื ืืื (minim_scalar) ืืืืคืืฉ ืฉืืจืฉืื (root_scalar)
- ืคืืชืจืื ืจื ืืืืืืื ืฉื ืืขืจืืช ืืฉืืืืืช (ืฉืืจืฉ) ืืืืฆืขืืช ืืืืืจืืชืืื ืฉืื ืื (ืคืืืื ืืืืจืืื,
ืืื ืืจื-ืืจืงืืจืื ืื ืฉืืืืช ืืงื ื ืืืื ืืืื ืืืืื ืืืืื ืงืจืืืื ).
ืืืืืจ ืื ื ืฉืงืื ืจืง ืืช ืืคืจืื ืืจืืฉืื ืืื ืจืฉืืื ืื.
ืืืขืืจ ืืืชื ืืืชื ื ืฉื ืคืื ืงืฆืื ืกืงืืจืืช ืฉื ืืกืคืจ ืืฉืชื ืื
ืคืื ืงืฆืืืช ืืืื ืืืื ืืืืืืช scipy.optimize ืืกืคืงืช ืืืฉืง ืืืื ืืคืชืจืื ืืขืืืช ืืืขืืจ ืืืชื ืืช ืืืืชื ืืืชื ืืช ืฉื ืคืื ืงืฆืืืช ืกืงืืจืืืช ืฉื ืืกืคืจ ืืฉืชื ืื. ืืื ืืืืืื ืืื ืื ืขืืื, ื ืฆืืจื ืคืื ืงืฆืื ืืชืืืื ืฉื ืืื ืืฉืชื ืื, ืืืชื ื ืืืขืจ ืืืจืืื ืฉืื ืืช.
ืืืืจืืช ืืื, ืคืื ืงืฆืืืช Rosenbrock ืฉื N ืืฉืชื ืื ืืืฉืืืช, ืฉืืฉ ืื ืืช ืืฆืืจื:
ืืืจืืช ืืขืืืื ืฉืคืื ืงืฆืืืช Rosenbrock ืืืืืจืืฆืืช Jacobi ืื-Hssian ืฉืื (ืื ืืืจืช ืืจืืฉืื ื ืืืฉื ืืื, ืืืชืืื) ืืืจ ืืืืืจืืช ืืืืืืช 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)
ืืืขื ืืืืืจืืช, ืืืื ื ืฆืืืจ ืืชืืช ืืืื ืืช ืืขืจืืื ืฉื ืคืื ืงืฆืืืช ืจืืื ืืจืืง ืฉื ืฉื ื ืืฉืชื ืื.
ืงืื ืฆืืืจ
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 ื , ืืืื ื ืกืชืื ืขื ืืืืืืืช ืืืฆื ืืงืืืข ืืช ืืขืจื ืืืื ืืืื ืฉื ืคืื ืงืฆืืืช Rosenbrock ืืืืฆืขืืช ื ืืืื ืฉืื ืื ืฉื scipy.optimize.
ืฉืืืช Nelder-Mead Simplex
ืชืืื ื ืงืืื ืืชืืืชืืช x0 ืืืจืื 5 ืืืืื. ืืืื ื ืืฆื ืืช ื ืงืืืช ืืืื ืืืื ืฉื ืคืื ืงืฆืืืช Rosenbrock ืืงืจืืื ืืืื ืืืืฆืขืืช ืืืืืืจืืชื
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 ืืื ืืืืจื ืืืื ืืืขืืืช ืืืขืืจ ืคืฉืืืืช. ืขื ืืืช, ืืืืืื ืฉืืื ืืื ื ืืฉืชืืฉ ืืืขืจืืืช ืฉืืคืืข, ืืืชืื ืฉืืืงื ืืื ืจื ืืืชืจ ืืืฆืื ืืช ืืืื ืืืื.
ืฉืืืช ืคืืืื
ืืืืืจืืชื ืืืคืืืืืืฆืื ื ืืกืฃ ืฉืื ืจืง ืขืจืื ืืคืื ืงืฆืืืช ืืืืฉืืื ืืื
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).
ืืื ืืืฉืื ืืชืื ืกืืช ืืืืจื ืืืชืจ ืืคืชืจืื, ืืืืื
ืืื ื ืืฆื ืืช ืื ืืืจืช ืฉื ืคืื ืงืฆืืืช ืจืืื ืืจืืง ืืฆืืจื ืื ืืืืืช:
ืืืืื ืื ืชืงืฃ ืขืืืจ ืื ืืืจืืช ืฉื ืื ืืืฉืชื ืื ืืืขื ืืจืืฉืื ืืืืืจืื, ืืืืืืจืื ื:
ืืืื ื ืกืชืื ืขื ืคืื ืงืฆืืืช 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]
ืืืืืจืืชื ืืจืืืื ื ืืฆืืื (ื ืืืืื)
ืืืืืจืืชื
ืืฉืืื ืฉื โโื ืืืืื ืืืืกืกืช ืขื ืงืืจืื ืคืื ืงืฆืื ืืืืืจ ืืงืืื ืขื ืืื ืคืืืื ืื ืืืืขืื ืืฉื ืืื:
ืืืคื ืืื ืืืืจืืฆื โโืฉื ื ืืืจืืช ืฉื ืืืช (ืืกืืื ืืช, ืืกืืื ืืช).
ืื ืืืกืืื ืืืืืจ ืืืืื, ืืื ื ืืชื ืืืฆืื ืืช ืืืื ืืืื ืืืงืืื ืฉื ืคืื ืงืฆืื ืื ืขื ืืื ืืฉืืืืช ืฉืืคืืข ืืืคืก ืฉื ืืฆืืจื ืืจืืืืขืืช ืืืคืก. ืืชืืฆืื ืชืืื ืืืืืื:
ืืืกืืื ืืืืคืื ืืืืฉื ืืฉืืืช ืฉืืคืืข ืืฆืืื. ืืืืื ืืฉืืืืฉ ืืฉืืื ืื ืืื ืืืืขืจ ืืช ืคืื ืงืฆืืืช Rosenbrock ื ืืชื ืช ืืืื. ืืื ืืืฉืชืืฉ ืืฉืืืช ื ืืืืื-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)
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 ืืื ืืงืืืจ ืฉืจืืจืืชื, ืืื ืืืืฆืจ ืืฉ ืืช ืืฆืืจื:
ืืคืื ืงืฆืื ืฉืืืฉืืช ืืช ืืืืคืื ืฉื ื-Hssian ืืืงืืืจ ืฉืจืืจืืชื ืืืขืืจืช ืืขืจื ืฉื ืืืจืืืื ื 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, ืฉืืืืช ืืกืื Krylov ืืชืืืืืช ืืืื ืืคืชืจืื ืืขืืืช ืืงื ื ืืืื ืืืื ืืืืืื ืฉืื ืืฉืชืืฉืืช ืจืง ืืืืฆืจื ืืงืืืจ ืืืจืืงืก. ืืืืืช ืฉืืื ืืื ืืคืชืืจ ืืขืื ืืืืืจ ืืืืืื ืืืืื ืขื ืืื ืชืช ืืจืื ืงืจืืืื ืงืืื. ืืืขืืืช ืื ืืืืืช, ืขืืืฃ ืืืฉืชืืฉ ืืฉืืื ืื, ืืืืืื ืฉืืื ืืฉืชืืฉืช ืืืกืคืจ ืงืื ืืืชืจ ืฉื ืืืืจืฆืืืช ืื ืืื ืืืจืืืช ืืืื ืืืกืคืจ ืืงืื ืืืชืจ ืฉื ืืืฆืจื ืืืจืืงืก-ืืงืืืจ ืืื ืชืช-ืืขืื, ืืืฉืืืื ืืฉืืืช 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 ืคืืจืืงืื Cholesky ืฉื ืืืืจืืฆื โโืืืกืืื ืืช. ืืชืืฆืื ืืื, ืืฉืืื ืืชืื ืกืช ืืคืืืช ืืืืจืฆืืืช ืืืืจืฉืช ืคืืืช ืืืฉืืื ืคืื ืงืฆืืืช ืืืืืืงืืืืืืช ืืืฉืจ ืฉืืืืช ืืืืจื ืืืืืื ืืืืฉืืืช ืืืจืืช. ืืืืืจืืชื ืื ืืจืื ืจืง ืขื ืงืืืขืช ืืืืจืืฆื โโืืืกืืื ืืช ืืฉืืื ืืืื ื ืชืืื ืืืืืืช ืืืฉืชืืฉ ืืคืื ืงืฆืืืช ืืืืคืื ืฉื ืืืกืืื ืืืืงืืืจ ืฉืจืืจืืชื.
ืืืืื ืขื ืืืขืืจ ืฉื ืคืื ืงืฆืืืช ืจืืื ืืจืืง:
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 ืึฒืึดืืึธื.
ืืงืืจ:
ืืงืืจ: www.habr.com