每天一个小算法(matlab armijo)
来源:互联网 发布:淘宝店铺扣分在哪里看 编辑:程序博客网 时间:2024/05/22 06:10
下面是 armijo线搜索+最速下降法的小程序,matlab用的很不熟,费了不少劲。
函数:
function g=fun_obj(x)syms a bf = 1/2*a^2+b^2-a*b-2*a;a=x(1);b=x(2);g=eval(f);
求梯度:
function g=fun_grad(x)syms a bf = 1/2*a^2+b^2-a*b-2*a;gradient = jacobian(f,[a,b]);a = x(1);b = x(2);g = eval(gradient);
armijo线搜索:
function mk = armijo( xk, rho, sigma, d )assert( rho > 0 && rho < 1 );assert( sigma > 0 && sigma < 0.5 );mk = 0; max_mk = 100;while mk <= max_mk x = xk + rho^mk * d; if fun_obj( x ) <= fun_obj( xk ) + sigma * rho^mk *fun_grad(xk)*d'; break; end mk = mk + 1;endreturn;
主程序:
function result = armijograd(x0)max_iter = 5000; % max number of iterationsEPS = 1e-6; % threshold of gradient norm rho = 0.45; sigma = 0.2; % Armijo parametersk = 0; xk = x0; % initializationwhile k < max_iter k = k + 1; dk = fun_grad( xk ); % gradient vector d = -1 * dk; % search direction if norm( dk ) < EPS %precision break; end mk = armijo( xk, rho, sigma, d); %armijo line search xk = xk + rho^mk * d; %updateend result = xk; return;
最终结果是:[4,2]';程序正确。
0 0
- 每天一个小算法(matlab armijo)
- 每天一个小算法(matlab armijo)
- 每天一个小算法(insertion sort3)
- 每天一个小算法(Shell Sort1)
- 每天一个小算法(Shell Sort2)
- 每天一个小算法(Shell Sort3)
- 每天一个小算法(Shell Sort4)
- 每天一个小算法(Shell sort5)
- 每天一个小算法(Heapsort)
- 每天一个小算法(Heapsort)
- 每天一个小算法(Heapsort)
- 每天一个小算法(Heapsort)
- 每天一个小算法(Heapsort)
- 使用非精确线搜索Armijo算法确定步长的最速下降法(MATLAB)
- 每天一个小算法 --- 排序
- 每天一个小算法之Shell排序(希尔排序)
- 每天一个面向对象陷阱,一个算法,一个小看法
- 每天一个小算法之 选择排序算法
- Android系统移植必读教程。快速移植系统
- 详解Linux内核红黑树算法的实现
- 图像分割
- python中限制进程实例个数实现
- 取Oracle中实现TOP N,选取前几条记录
- 每天一个小算法(matlab armijo)
- Android中的Handler, Looper, MessageQueue和Thread
- 题目1069:查找学生信息 题目18
- 摄氏温度换算为华氏温度
- Parameter 2 to mysqli_stmt::bind_param() expected to be a reference
- 关于linux下使用动态库
- 【BZOJ】【P1468】【Tree】【题解】【点分治】
- 《深入理解计算机网络》学习笔记
- SAE中使用TmpFS功能