optimization method
常用优化算法的cpp和python实现
https://github.com/taifyang/optimization-method
给算法爸爸上香
爱学习的图像算法工程师一枚
展开
-
高斯牛顿法
Python实现:import sympyimport numpy as np#f为要求极值的函数,x0为初始位置,max_iter为最大迭代次数,epsilon为相邻两次迭代的x改变量def gauss_newton_x(f, x0, max_iter, epsilon): i = 0 # 记录迭代次数的变量 x0 = float(x0) # 浮点数计算更快 df = sympy.diff(f, x) # 定义一阶导数 beta = 0.5 #beta 0~1原创 2022-05-26 00:19:11 · 266 阅读 · 0 评论 -
Broyden算法
Python实现:import sympyimport numpy as npfrom numpy import matlib as mb#f为要求极值的函数,x0为初始位置,max_iter为最大迭代次数,epsilon为相邻两次迭代的x改变量def Broyden_x(f, x0, max_iter, epsilon): i = 0 # 记录迭代次数的变量 x0 = float(x0) # 浮点数计算更快 df = sympy.diff(f, x) # 定义一阶导数.原创 2022-05-25 00:09:14 · 2065 阅读 · 0 评论 -
L-BFGS算法
Python实现:import sympyimport numpy as npdef twoloop(s, y, rho, gk): n = len(s) #向量序列的长度 if n >= 1 and type(gk)==np.matrix: #h0是标量,而非矩阵 h0 = float((s[-1].T*y[-1])/(y[-1].T*y[-1])) elif n >=1: h0 = (s[-1]*y[-...原创 2022-05-24 00:17:13 · 989 阅读 · 0 评论 -
BFGS算法
python实现:import sympyimport numpy as npfrom numpy import matlib as mb#f为要求极值的函数,x0为初始位置,max_iter为最大迭代次数,epsilon为相邻两次迭代的x改变量def BFGS_x(f, x0, max_iter, epsilon): i = 0 # 记录迭代次数的变量 x0 = float(x0) # 浮点数计算更快 df = sympy.diff(f, x) # 定义一阶导数 .原创 2022-05-23 09:44:00 · 413 阅读 · 0 评论 -
DFP算法
python实现:import sympyimport numpy as npfrom numpy import matlib as mb#func为要求极值的函数,x0为初始位置,max_iter为最大迭代次数,epsilon为相邻两次迭代的x改变量def DFP_x(func, x0, max_iter, epsilon): i = 0 # 记录迭代次数的变量 x0 = float(x0) # 浮点数计算更快 d_func = sympy.diff(func, x..原创 2022-05-22 12:06:22 · 519 阅读 · 0 评论 -
修正牛顿法
python实现:import sympyimport numpy as np#f为要求极值的函数,x0为初始位置,max_iter为最大迭代次数,epsilon为相邻两次迭代的x改变量def revise_newton_x(f, x0, max_iter, epsilon): i = 0 # 记录迭代次数的变量 x0 = float(x0) #浮点数计算更快 df = sympy.diff(f, x) #定义一阶导数 d2f = sympy.diff(f, x,.原创 2022-05-21 15:35:26 · 308 阅读 · 0 评论 -
阻尼牛顿法
python实现:import sympyimport numpy as np#f为要求极值的函数,x0为初始位置,max_iter为最大迭代次数,epsilon为相邻两次迭代的x改变量def damp_newton_x(f, x0, max_iter, epsilon): i = 0 # 记录迭代次数的变量 x0 = float(x0) # 浮点数计算更快 df = sympy.diff(f, x) # 定义一阶导数 d2f = sympy.diff(f, x,.原创 2022-05-20 14:33:47 · 368 阅读 · 0 评论 -
牛 顿 法
python实现:import sympyimport numpy as np#f为要求极值的函数,x0为初始位置,max_iter为最大迭代次数,epsilon为相邻两次迭代的x改变量def newton_x(f, x0, max_iter, epsilon): i = 0 #记录迭代次数的变量 x0 = float(x0) #浮点数计算更快 df = sympy.diff(f, x) #定义一阶导数 d2f = sympy.diff(f, x, 2) #定义二.原创 2022-05-19 17:55:30 · 163 阅读 · 0 评论 -
共轭梯度法
其中共轭方向的确定方法如下:python实现:import sympyimport numpy as np#f为要求极值的函数,x0为初始位置,max_iter为最大迭代次数,epsilon为相邻两次迭代的x改变量def conjugate_gradient_x(f, x0, max_iter, epsilon): i = 0 #记录迭代次数的变量 x0 = float(x0) #浮点数计算更快 df = sympy.diff(f, x) #定义一阶导数 al.原创 2022-05-18 12:14:16 · 407 阅读 · 0 评论 -
梯度下降法
原理参考:梯度-牛顿-拟牛顿优化算法和实现python实现:import sympyimport numpy as np#f为要求极值的函数,x0为初始位置,max_iter为最大迭代次数,epsilon为相邻两次迭代的x改变量def gradient_x(f, x0, max_iter, epsilon): i = 0 #记录迭代次数的变量 x0 = float(x0) #浮点数计算更快 df = sympy.diff(f, x) #定义一阶导数 #alpha原创 2022-05-17 18:54:55 · 284 阅读 · 0 评论