SciPy (pronounced sai pie) เปเบกเปเบเบเบธเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฒเบเบเบฐเบเบดเบเบชเบฒเบเปเบเบเบญเบตเบเปเบชเปเบเบฒเบเบเบฐเบซเบเบฒเบ Numpy Python. เบเปเบงเบ SciPy, เปเบเบเบเบฑเบ Python เปเบเบเปเบเปเบเบญเบเบเบญเบเปเบเบปเปเบฒเบเบฒเบเปเบเบฑเบเบงเบดเบเบฐเบเบฒเบชเบฒเบเบเปเปเบกเบนเบเบเบตเปเบชเบปเบกเบเบนเบเปเบเบเบเบฝเบงเบเบฑเบ เปเบฅเบฐเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฒเบเบชเปเบฒเบเบเบปเบงเปเบเบเบฅเบฐเบเบปเบเบเบตเปเบเบฑเบเบเปเบญเบเปเบเบฑเปเบ MATLAB, IDL, Octave, R-Lab, เปเบฅเบฐ SciLab. เบกเบทเปเบเบตเปเบเปเบญเบเบขเบฒเบเปเบงเบปเปเบฒเบชเบฑเปเบเปเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเปเบเปเบงเบดเบเบตเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบตเปเบฎเบนเปเบเบฑเบเปเบเบเบธเบ scipy.optimize. เบเบฒเบเบเปเบงเบเปเบซเบผเบทเบญเบเบตเปเบฅเบฐเบญเบฝเบเบเบงเปเบฒ เปเบฅเบฐเบเบฑเบเบชเบฐเปเปเบเบงเปเบฒเปเบเบเบฒเบเบเบณเปเบเปเบเบฑเบเบเบฑเบเบเปเบฒเบเปเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเปเบเปเบชเบฐเปเปเบตเปเบเบเปเบเปเบเบณเบชเบฑเปเบ help() เบซเบผเบทเปเบเป Shift+Tab.
เบเบฒเบเบเปเบฒเบชเบฐเปเบซเบเบต
เปเบเบทเปเบญเบเปเบงเบเบเบฐเบขเบฑเบเบเบปเบงเบเปเบฒเบเปเบญเบเปเบฅเบฐเบเบนเปเบญเปเบฒเบเบเบฒเบเบเบฒเบเบเบปเปเบเบซเบฒเปเบฅเบฐเบเบฒเบเบญเปเบฒเบเปเบซเบผเปเบเบเบปเปเบเบเป, เบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบเปเบฒเบญเบฐเบเบดเบเบฒเบเบงเบดเบเบตเบเบฒเบเบชเปเบงเบเปเบซเบเปเปเบกเปเบเบขเบนเปเปเบ Wikipedia. เบเบฒเบกเบเบปเบเบฅเบฐเบเบฝเบ, เบเปเปเบกเบนเบเบเบตเปเปเบกเปเบเบเบฝเบเบเปเบเบตเปเบเบฐเปเบเบปเปเบฒเปเบเบงเบดเบเบตเบเบฒเบเปเบเบเปเปเบเปเบฒเบเบปเบเบเบปเปเบงเปเบเปเบฅเบฐเปเบเบทเปเบญเบเปเบเบชเปเบฒเบฅเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบญเบเบเบงเบเปเบเบปเบฒ. เปเบเบทเปเบญเปเบเบปเปเบฒเปเบเบเบงเบฒเบกเบชเปเบฒเบเบฑเบเบเบญเบเบงเบดเบเบตเบเบฒเบเบเบฒเบเบเบฐเบเบดเบเบชเบฒเบ, เบเบฐเบเบดเบเบฑเบเบเบฒเบกเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบชเบดเปเบเบเบดเบกเบเบตเปเบกเบตเบญเปเบฒเบเบฒเบเบซเบผเบฒเบ, เปเบเบดเปเบเบชเบฒเบกเบฒเบเบเบปเบเปเบเปเปเบเบเบญเบเบเปเบฒเบเบเบญเบเปเบเปเบฅเบฐเบเบปเบเบเบงเบฒเบกเบซเบผเบทเปเบเปเบเบทเปเบญเบเบเบฑเบเบเบญเบเบซเบฒเบเบตเปเบเปเบฒเบเบกเบฑเบ.
เบเบฑเปเบเบเบฑเปเบ, เปเบกเบเบนเบ scipy.optimize เบเบฐเบเบญเบเบกเบตเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฑเปเบเบเบญเบเบเปเปเปเบเบเบตเป:
- เบเบฒเบเบซเบผเบธเบเบซเบเปเบญเบเบฅเบปเบเปเบเบเบกเบตเปเบเบทเปเบญเบเปเบ เปเบฅเบฐเบเปเปเบกเบตเปเบเบทเปเบญเบเปเบเบเบญเบเบเบฑเบเบเบฑเบ scalar เบเบญเบเบเบปเบงเปเบเบซเบผเบฒเบเบเบปเบงเปเบ (เปเปเบญเบเบชเบธเบ) เปเบเบเปเบเปเบชเบนเบเบเบฒเบเบเบดเบเปเบฅเปเบเปเบฒเบเป (Nelder-Mead simplex, BFGS, Newton conjugate gradients,
เปเบเบเบตเบฅเบฒ ะธSLSQP ) - เบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบปเปเบงเปเบฅเบ (เบเบปเบงเบขเปเบฒเบ:
basinhopping ,diff_evolution ) - เบซเบผเบธเบเบเปเบญเบเบเบฒเบเบเบปเบเบเปเบฒเบ
MNC (least_squares) เปเบฅเบฐโเบชเบนเบโเบเบฒเบโเบเบฑเบโเปเบชเบฑเปเบโเปเบเปเบโเปเบเบโเบเบฒเบโเบเปเบฒโเปเบเปโเบชเบตเปโเบซเบผเปเบฝเบกโเบกเบปเบโเบเปเบญเบโเบเบตเปโเบเปเปโเปเบกเปเบโเปเบชเบฑเปเบ (curve_fitโ) - เบเบฒเบเบซเบผเบธเบเบเปเบญเบเบเบฒเบเบเปเบฒเบเบฒเบเบเบญเบ scalar เบเบญเบเบเบปเบงเปเบเบซเบเบถเปเบ (minim_scalar) เปเบฅเบฐเบเบฒเบเบเบญเบเบซเบฒเบฎเบฒเบ (root_scalar)
- เบเบปเบงเปเบเปเปเบเบซเบผเบฒเบเบกเบดเบเบดเบเบญเบเบฅเบฐเบเบปเบเบชเบปเบกเบเบปเบ (เบฎเบฒเบ) เปเบเบเปเบเปเบชเบนเบเบเบฒเบเบเบดเบเปเบฅเปเบเปเบฒเบเป (เบเบฐเบชเบปเบก Powell,
Levenberg-Marquardt เบซเบผเบทเบงเบดเบเบตเบเบฒเบเบเบฐเบซเบเบฒเบเปเบซเบเปเปเบเบฑเปเบ:Newton-Krylov ).
เปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบดเบเบฒเบฅเบฐเบเบฒเบเบฝเบเปเบเปเบฅเบฒเบเบเบฒเบเบเปเบฒเบญเบดเบเบเบฒเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบฑเบเบซเบกเบปเบเบเบตเป.
เบเบฒเบเบซเบผเบธเบเบซเบเปเบญเบเบฅเบปเบเปเบเบเบเปเปเบกเบตเปเบเบทเปเบญเบเปเบเบเบญเบเบเบฑเบเบเบฑเบ scalar เบเบญเบเบเบปเบงเปเบเบซเบผเบฒเบเบญเบฑเบ
เบเบฑเบเบเบฑเบเบเปเบญเบเบชเบธเบเบเบฒเบเบเบธเบ scipy.optimize เบชเบฐเบซเบเบญเบเบเบฒเบเปเบเปเบเบญเบเบเบปเปเบงเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบฒเบเบซเบผเบธเบเบเปเบญเบเปเบเบทเปเบญเบเปเบเปเบฅเบฐเบเปเปเบกเบตเปเบเบทเปเบญเบเปเบเบเบญเบเบเบฑเบเบเบฑเบ scalar เบเบญเบเบซเบผเบฒเบเบเบปเบงเปเบ. เปเบเบทเปเบญเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบงเบดเบเบตเบเบฒเบเปเบฎเบฑเบเบงเบฝเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบญเบเบเบฒเบเบเบฑเบเบเบฑเบเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบกเบเบญเบเบเบปเบงเปเบเบซเบผเบฒเบ, เปเบเบดเปเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบซเบผเบธเบเบฅเบปเบเปเบเบงเบดเบเบตเบเปเบฒเบเป.
เบชเปเบฒเบฅเบฑเบเบเบธเบเบเบฐเบชเบปเบเปเบซเบผเบปเปเบฒเบเบตเป, เบซเบเปเบฒเบเบตเป Rosenbrock เบเบญเบ N variables เปเบกเปเบเบชเบปเบกเบเบนเบเปเบเบ, เปเบเบดเปเบเบกเบตเบฎเบนเบเปเบเบ:
เปเบเบดเบเบงเปเบฒเบเบฐเบกเบตเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเบฑเบเบเบฑเบ Rosenbrock เปเบฅเบฐ Jacobi เปเบฅเบฐ Hessian matrices เบเบญเบเบกเบฑเบ (เบญเบฐเบเบธเบเบฑเบเบเปเบฒเบญเบดเบเปเบฅเบฐเบเบตเบชเบญเบ, เบเบฒเบกเบฅเปเบฒเบเบฑเบ) เบเบทเบเบเปเบฒเบเบปเบเปเบงเปเปเบเบเบธเบ 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 เบเปเบฒเบเบญเบเบเบฑเบเบเบฑเบ Rosenbrock เบเบญเบเบชเบญเบเบเบปเบงเปเบ.
เบฅเบฐเบซเบฑเบเปเบเปเบก
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 เบเบตเปเปเบเปเบเบตเปเบชเบธเบเบเบฑเบเบกเบฑเบเปเบเบเปเบเป algorithm
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.]
เบงเบดเบเบตเบเบฒเบ simplex เปเบกเปเบเบงเบดเบเบตเบเบตเปเบเปเบฒเบเบเบตเปเบชเบธเบเบเบตเปเบเบฐเบซเบผเบธเบเบเปเบญเบเบเบฒเบเบเปเบฒเบเบฒเบเบเบตเปเบเบทเบเบเปเบฒเบเบปเบเบขเปเบฒเบเบเบฑเบเปเบเบเปเบฅเบฐเบฅเบฝเบเบเปเบฒเบ. เบกเบฑเบเบเปเปเปเบเปเบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบฒเบเบเบดเบเปเบฅเปเบญเบฐเบเบธเบเบฑเบเบเบญเบเบเบฑเบเบเบฑเบ; เบกเบฑเบเบเบฝเบเบเปเบเบตเปเบเบฐเบฅเบฐเบเบธเบเปเบฒเบเบญเบเบกเบฑเบเปเบเบปเปเบฒเบเบฑเปเบ. เบงเบดเบเบตเบเบฒเบ 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) algorithm
เปเบเบทเปเบญโเปเบซเปโเปเบเปโเบฎเบฑเบ convergence เปเบงโเบเบถเปเบโเบเบฑเบโเบเบฒเบโเปเบเปโเปเบโ, เบเบฑเปเบโเบเบญเบโเบเบฒเบโ
เปเบซเปเบเบงเบเปเบฎเบปเบฒเบเบญเบเบซเบฒเบเบปเบงเบเบฑเบเบเบญเบเบเบฑเบเบเบฑเบ Rosenbrock เปเบเบฎเบนเบเปเบเบเบเบฒเบเบงเบดเปเบเบฒเบฐ:
เบเบฒเบเบชเบฐเปเบเบเบญเบญเบเบเบตเปเปเบกเปเบเบเบทเบเบเปเบญเบเบชเปเบฒเบฅเบฑเบเบเบปเบงเปเบเบเบญเบเบเบปเบงเปเบเบเบฑเบเบซเบกเบปเบเบเบปเบเปเบงเบฑเปเบเบเบปเบงเบเปเบฒเบญเบดเบเปเบฅเบฐเบชเบธเบเบเปเบฒเบ, เปเบเบดเปเบเบเบทเบเบเปเบฒเบเบปเบเปเบเบฑเบ:
เบฅเบญเบเปเบเบดเปเบเบเบฑเบเบเบฑเบ Python เบเบตเปเบเบดเบเปเบฅเป gradient เบเบตเป:
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
เบเบฑเบเบเบฑเบเบเบฒเบเบเบดเบเปเบฅเป gradient เปเบกเปเบเบฅเบฐเบเบธเปเบเบฑเบเบเปเบฒเบเบญเบ 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]
Conjugate gradient algorithm (เบเบดเบงเบเบฑเบ)
เบฅเบฐเบเบปเบเบงเบดเปเบเบฒเบฐ
เบงเบดเบเบตเบเบฒเบเบเบญเบ Newton เปเบกเปเบเบญเบตเบเปเบชเปเบเบฒเบเบเบฐเบกเบฒเบเบเบฒเบเบเปเบฒเบเบฒเบเปเบเบเบทเปเบเบเบตเปเบเปเบญเบเบเบดเปเบเปเบเบ polynomial เบเบญเบเบฅเบฐเบเบฑเบเบเบตเบชเบญเบ:
เบเปเบญเบเบเบตเป เปเบกเปเบเปเบกเบเบฃเบดเบเบเบญเบเบญเบฐเบเบธเบเบฑเบเบเบตเบชเบญเบ (Hessian matrix, Hessian).
เบเปเบฒ Hessian เบกเบตเบเบงเบฒเบกเปเบเปเบเบญเบเบเปเบฒเบเบเบงเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเปเบชเบธเบเบเบตเปเปเบเบเปเบญเบเบเบดเปเบเบเบญเบเบเบฑเบเบเบฑเบเบเบตเปเบชเบฒเบกเบฒเบเบเบปเบเปเบเปเปเบเบเบเบฒเบเบชเบปเบกเบเบปเบเบเบญเบ gradient เบชเบนเบเบเบญเบเบฎเบนเบเปเบเบเบชเบตเปเบซเบฅเปเบฝเบกเปเบเบฑเบเบชเบนเบ. เบเบปเบเปเบเปเบฎเบฑเบเบเบฐเปเบเบฑเบเบเบฒเบเบชเบฐเปเบเบเบญเบญเบ:
เบเบฒเบเบเบตเปเบ Hessian เบเบทเบเบเบดเบเปเบฅเปเปเบเบเปเบเปเบงเบดเบเบตเบเบฒเบ gradient conjugate. เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเปเบเปเบงเบดเบเบตเบเบตเปเปเบเบทเปเบญเบซเบผเบธเบเบเปเบญเบเบเบฒเบเบเปเบฒเบเบฒเบ Rosenbrock เปเบกเปเบเปเบซเปเบเปเบฒเบเบฅเบธเปเบกเบเบตเป. เปเบเบทเปเบญเปเบเปเบงเบดเบเบตเบเบฒเบ Newton-CG, เบเปเบฒเบเบเปเบญเบเบฅเบฐเบเบธเบเบฑเบเบเบฑเบเบเบตเปเบเบดเบเปเบฅเป Hessian.
เบเบฑเบเบเบฑเบ Hessian เบเบญเบ Rosenbrock เปเบเบฎเบนเบเปเบเบเบเบฒเบเบงเบดเปเบเบฒเบฐเปเบกเปเบเปเบเบปเปเบฒเบเบฑเบ:
เบเปเบญเบเบเบตเป ะธ , เบเปเบฒเบเบปเบ matrix เปเบเป .
เบญเบปเบเบเบฐเบเบญเบเบเบตเปเบเปเปเปเบกเปเบเบชเบนเบเบเบตเปเบเบฑเบเปเบซเบผเบทเบญเบเบญเบ matrix เปเบกเปเบเปเบเบปเปเบฒเบเบฑเบ:
เบเบปเบงเบขเปเบฒเบ, เปเบเบเปเบญเบเบซเปเบฒเบกเบดเบเบด N = 5, Hessian matrix เบชเปเบฒเบฅเบฑเบเบเบฑเบเบเบฑเบ Rosenbrock เบกเบตเบฎเบนเบเปเบเบเบเบญเบเปเบเบ:
เบฅเบฐเบซเบฑเบเบเบตเปเบเบดเบเปเบฅเป Hessian เบเบตเปเบเปเบญเบกเบเบฑเบเบฅเบฐเบซเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบซเบผเบธเบเบเปเบญเบเบเบฒเบเบเปเบฒเบเบฒเบเบเบญเบ Rosenbrock เปเบเบเปเบเปเบงเบดเบเบตเบเบฒเบ conjugate gradient (Newton):
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]
เบเบปเบงเบขเปเบฒเบเบเบตเปเบกเบตเบเปเบฒเบเบดเบเบฒเบกเบเบญเบเบซเบเปเบฒเบเบตเปเบเบฐเบฅเบดเบเบเบฐเบเบฑเบเบเบญเบ Hessian เปเบฅเบฐ vector arbitrary
เปเบเบเบฑเบเบซเบฒเบเบตเปเปเบเปเบเบดเบ, เบเบญเบกเบเบดเบงเปเบเบตเปเปเบฅเบฐเปเบเบฑเบเบฎเบฑเบเบชเบฒ Hessian matrix เบเบฑเบเบซเบกเบปเบเบชเบฒเบกเบฒเบเบเปเบญเบเบเบฒเบเปเบงเบฅเบฒเปเบฅเบฐเบเบงเบฒเบกเบเบปเบเบเปเบฒเบเบตเปเบชเปเบฒเบเบฑเบ. เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเบปเบงเบเบดเบเปเบฅเปเบงเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบฅเบฐเบเบธ Matrix Hessian เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบ, เปเบเบฒเบฐเบงเปเบฒ เบเบฑเปเบโเบเบญเบโเบเบฒเบโเบซเบผเบธเบโเบเปเบญเบโเบฎเบฝเบโเบฎเปเบญเบโเปเบซเปโเบกเบตโเบเบฝเบโเปเบเป vector เปเบเบปเปเบฒโเบเบฑเบโเบเบฐโเบฅเบดเบโเบเบฐโเบเบฑเบโเบเบญเบ Hessian เบเบตเปโเบกเบต vector เบเบตเปโเบเบปเบโเปเบญเบโเบญเบทเปเบโ. เบเบฑเปเบเบเบฑเปเบ, เบเบฒเบเบกเบธเบกเปเบเบดเปเบเบเบฒเบเบเบดเบเปเบฅเป, เบกเบฑเบเบเบตเบเบงเปเบฒเบเบตเปเบเบฐเบเปเบฒเบเบปเบเบเบฑเบเบเบฑเบเบเบตเปเบชเบปเปเบเบเบทเบเบเบปเบเปเบเปเบฎเบฑเบเบเบญเบเบเบฐเบฅเบดเบเบเบฐเบเบฑเบเบเบญเบ Hessian เบเปเบงเบ vector arbitrary.
เบเบดเบเบฒเบฅเบฐเบเบฒเบเบฑเบเบเบฑเบ hess, เปเบเบดเปเบเปเบเปเปเบงเบฅเบฒ vector เบเบฒเบเบซเบผเบธเบเบเปเบญเบเปเบเบฑเบ argument เบเปเบฒเบญเบดเบ, เปเบฅเบฐ vector arbitrary เปเบเบฑเบ argument เบเบตเบชเบญเบ (เบเบฝเบเบเบนเปเบเบฑเบเบเบฒเบ argument เบญเบทเปเบเปเบเบญเบเบเบฑเบเบเบฑเบเบเบตเปเบเบฐ minimized). เปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเบฒเบเบเบดเบเปเบฅเปเบเบฐเบฅเบดเบเบเบฐเบเบฑเบเบเบญเบ Hessian เบเบญเบเบเบฑเบเบเบฑเบ Rosenbrock เบเปเบงเบ vector arbitrary เบเปเปเปเบกเปเบเปเบฅเบทเปเบญเบเบเบฒเบเบซเบผเบฒเบ. เบเปเบฒ p เปเบเบฑเบ vector arbitrary, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฐเบฅเบดเบเบเบฐเบเบฑเบ เปเบเบดเปเบโเบเบท:
เบเบฑเบเบเบฑเบเบเบตเปเบเบณเบเบงเบเบเบฐเบฅเบดเบเบเบฐเบเบฑเบเบเบญเบ Hessian เปเบฅเบฐ vector arbitrary เบเบทเบเบชเบปเปเบเบเปเบฒเบเปเบเบฑเบเบเปเบฒเบเบญเบ hessp argument เปเบเบซเบฒเบเบฑเบเบเบฑเบ 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})
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 24
Function evaluations: 33
Gradient evaluations: 56
Hessian evaluations: 66
conjugate gradient trust region algorithm (Newton)
เบเบฒเบเบเบฑเบเบชเบฐเบเบฒเบเบเบตเปเบเปเปเบเบตเบเบญเบเบกเบฒเบเบฃเบดเบเปเบเบทเปเบญเบ Hessian เปเบฅเบฐเบเบดเบเบเบฒเบเบเบฒเบเบเบปเปเบเบซเบฒเบเบตเปเบเปเปเบเบทเบเบเปเบญเบเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบซเปเบฅเบฐเบเบปเบ gradient algorithm เบเบญเบ Newton เบเปเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบ. เปเบเบเปเบฅเบฐเบเบตเบเบฑเปเบเบเปเบฒเบง, เบเบงเบฒเบกเบเปเบญเบเบเบฒเบเปเบกเปเบเปเบซเป
เบเบปเบงเบขเปเบฒเบเบเบฑเบเบเปเบฒเบเบดเบเบฒเบกเบเบญเบ Hessian matrix:
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.]
เบเบปเบงเบขเปเบฒเบเบเบฑเบเบซเบเปเบฒเบเบตเปเบเบฐเบฅเบดเบเบเบฐเบเบฑเบเบเบญเบ Hessian เปเบฅเบฐ vector arbitrary:
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
เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบงเบดเบเบตเบเบฒเบ trust-ncg, เบงเบดเบเบตเบเบฒเบเบเบฐเปเบเบ Krylov เปเบกเปเบเปเบซเบกเบฒเบฐเบชเบปเบกเบเบตเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบฐเบซเบเบฒเบเปเบซเบเปเปเบเบฒเบฐเบงเปเบฒเบเบงเบเปเบเบปเบฒเปเบเปเบเบฝเบเปเบเปเบเบฐเบฅเบดเบเบเบฐเบเบฑเบ matrix-vector. เปเบเบเปเบเบทเปเบญเปเบเปเปเบฅเปเบงเบเบญเบเบเบงเบเบกเบฑเบเปเบกเปเบเปเบเบทเปเบญเปเบเปเปเบเบเบฑเบเบซเบฒเปเบเบเบฒเบเบเบทเปเบเบเบตเปเบกเบตเบเบงเบฒเบกเปเบเบทเปเบญเบซเบกเบฑเปเบเบเบตเปเบเปเบฒเบเบฑเบเปเบเบเบเบทเปเบเบเบตเปเบเปเบญเบ Krylov เบเบตเปเบเบทเบเบเบฑเบเบญเบญเบ. เบชเปเบฒเบฅเบฑเบเบเบฑเบเบซเบฒเบเบตเปเบเปเปเปเบเปเบเบญเบ, เบกเบฑเบเบเปเปเบเบตเบเบงเปเบฒเบเบตเปเบเบฐเปเบเปเบงเบดเบเบตเบเบตเป, เปเบเบฒเบฐเบงเปเบฒเบกเบฑเบเปเบเปเบเปเบฒเบเบงเบเบซเบเปเบญเบเบเบญเบ nonlinear iterations เปเบเบทเปเบญเบเบเบฒเบเบเปเบฒเบเบงเบเบเบฐเบฅเบดเบเบเบฐเบเบฑเบ matrix-vector เบซเบเปเบญเบเบฅเบปเบเบเปเปเบเบฑเบเบซเบฒเบเปเบญเบ, เปเบกเบทเปเบญเบเบฝเบเบเบฑเบเบงเบดเบเบตเบเบฒเบ trust-ncg. เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเปเบญเบ quadratic เปเบกเปเบเบเบปเบเปเบซเบฑเบเบขเปเบฒเบเบเบทเบเบเปเบญเบเบเบงเปเบฒเบเบฒเบเปเบเปเบงเบดเบเบตเบเบฒเบ trust-ncg.
เบเบปเบงเบขเปเบฒเบเบเบฑเบเบเปเบฒเบเบดเบเบฒเบกเบเบญเบ Hessian matrix:
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.]
เบเบปเบงเบขเปเบฒเบเบเบฑเบเบซเบเปเบฒเบเบตเปเบเบฐเบฅเบดเบเบเบฐเบเบฑเบเบเบญเบ Hessian เปเบฅเบฐ vector arbitrary:
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) เปเบกเปเบเปเบซเบกเบฒเบฐเบชเบปเบกเบเบตเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบฐเบซเบเบฒเบเปเบซเบเป (เบกเบตเบเบปเบงเปเบเบซเบผเบฒเบเบเบฑเบเบเบปเบง). เบเบตเปเปเบกเปเบเปเบเบทเปเบญเบเบกเบฒเบเบฒเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒ algorithm gradient conjugate เบเบตเปเบขเบนเปเปเบเบทเปเบญเบเบเบปเปเบเบซเบกเบฒเบเปเบเบดเบเบเบฒเบเบเปเบฒเบเบปเบเปเบเบเบเบฐเบกเบฒเบเบเบญเบ matrix Hessian inverse. เบเบฒเบโเปเบเปโเปเบโเปเบกเปเบโเปเบเปโเบเบปเบโเปเบซเบฑเบโเบโเปโเปเบฒโ, เปเบเบโเบเปเปโเบกเบตโเบเบฒเบโเบเบฐโเบซเบเบฒเบโเบเบปเบงโเบขเปเบฒเบโเบเบฑเบโเปเบเบโเบเบญเบ Hessian เปเบเปโ. เปเบเบทเปเบญเบเบเบฒเบเบเปเบฒเบเบเบฝเบเปเบเปเบเปเบญเบเบเบฒเบเบเปเบฒเบเบปเบเบซเบเปเบฒเบเบตเปเบชเปเบฒเบฅเบฑเบเบเบฐเบฅเบดเบเบเบฐเบเบฑเบเบเบญเบ Hessian เปเบฅเบฐ vector arbitrary, เบชเบนเบเบเบฒเบเบเบดเบเปเบฅเปเบเบตเปเปเบกเปเบเบเบตเปเบเบเบชเบฐเปเบเบฒเบฐเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ matrices sparse (เปเบเบเปเบชเบฑเปเบเบเบงเบฒเบ). เบเบตเปเบชเบฐเบซเบเบญเบเบเปเบฒเปเบเปเบเปเบฒเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเปเปเบฒเปเบฅเบฐเบเบฒเบเบเบฐเบซเบเบฑเบเปเบงเบฅเบฒเบเบตเปเบชเปเบฒเบเบฑเบ.
เบชเปเบฒเบฅเบฑเบเบเบฑเบเบซเบฒเบเบฐเบซเบเบฒเบเบเบฒเบ, เบเปเบฒเปเบเปเบเปเบฒเบเปเบเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเปเบฅเบฐเบเบฑเบเปเบ Hessian เปเบกเปเบเบเปเปเบชเปเบฒเบเบฑเบ. เบเบตเปเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบกเบฑเบเปเบเบฑเบเปเบเปเบเปเบเบตเปเบเบฐเปเบเปเบฎเบฑเบเบเบฒเบเปเบเปเปเบเปเบเบเบฒเบเปเบเปเปเบเบซเบเปเบญเบเบฅเบปเบ, เปเบเปเปเบเบเบฑเบเบซเบฒเบเปเบญเบเบเบญเบเบเบฒเบเบเบทเปเบเบเบตเปเปเบเบทเปเบญเบเบทเปเบเปเปเบเบทเบญเบเปเบเปเบเบญเบ. เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เบเบฒเบเบชเบปเบกเบเบปเบเบเบตเปเบเปเปเปเบกเปเบเปเบชเบฑเปเบเบเบทเบเปเบเปเปเบเบเปเปเบฒเบเบทเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบเบฑเบเบซเบฒเบเปเบญเบเบชเบตเปเบซเบฅเปเบฝเบก. เบเบฒเบเปเบเปเปเบเบเบฑเปเบเบเปเบฒเบงเบเบปเบเบเบฐเบเบดเปเบฅเปเบงเบเปเบญเบเบเบฒเบ 3 เบซเบผเบท 4 เบเบฒเบ decompositions Cholesky เบเบญเบ Hessian matrix. เบเบฑเปเบเบเบฑเปเบ, เบงเบดเบเบตเบเบฒเบ converges เปเบ iterations เบซเบเปเบญเบเบฅเบปเบเปเบฅเบฐเบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบฒเบเบเบดเบเปเบฅเปเบซเบเปเบฒเบเบตเปเบเบธเบเบเบฐเบชเบปเบเบซเบเปเบญเบเบเปเบงเบฒเบงเบดเบเบตเบเบฒเบเบเบฒเบเบเบทเปเบเบเบงเบฒเบกเบซเบกเบฑเปเบเปเบเบญเบทเปเบเปเบเบฐเบเบดเบเบฑเบ. เบชเบนเบเบเบฒเบเบเบดเบเปเบฅเปเบเบตเปเบเบฝเบเปเบเปเบซเบกเบฒเบเปเบเบดเบเบเบฒเบเบเปเบฒเบเบปเบเบเบญเบ Hessian matrix เบเบปเบเบเปเบงเบเบชเบปเบกเบเบนเบเปเบฅเบฐเบเปเปเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเบเปเบฒเปเบเปเบซเบเปเบฒเบเบตเปเบเบฐเบฅเบดเบเบเบฐเบเบฑเบเบเบญเบ Hessian เปเบฅเบฐ vector arbitrary.
เบเบปเบงเบขเปเบฒเบเบเบตเปเบกเบตเบเบฒเบเบซเบผเบธเบเบเปเบญเบเบเบฒเบเบเปเบฒเบเบฒเบ Rosenbrock:
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