博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每天一个小算法(matlab armijo)
阅读量:6248 次
发布时间:2019-06-22

本文共 1187 字,大约阅读时间需要 3 分钟。

下面是 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]';程序正确。

 

转载于:https://www.cnblogs.com/batteryhp/p/5020507.html

你可能感兴趣的文章
Windows下python3生成UTF8的CSV文件和sha256sum踩坑记录
查看>>
SPIHT 编码原理,代码,应用,专利问题
查看>>
JBPM4 读书笔记点滴
查看>>
Ext.net 动态生成控件
查看>>
10个强大的Javascript表单验证插件推荐
查看>>
神奇HVXC的MOS 分
查看>>
用SQL游标将1列中的数据分解成3列
查看>>
free 与 delete
查看>>
Qt之对话框设计——可扩展对话框
查看>>
【dotnetfx】Microsoft .NET Framework 3.5 sp1离线安装解决方案
查看>>
<===最困难的时候,就是距离成功不远了===>
查看>>
在图片上显示左右箭头的翻页代码
查看>>
eclipse插件开发--获取当前项目路径
查看>>
Oracle多行数据的合并
查看>>
从零开始编写自己的C#框架(3)——开发规范
查看>>
ZigBee绑定细节
查看>>
Objective-c中定义成员变量
查看>>
【Github教程】史上最全github用法:github入门到精通
查看>>
text-align:justify_内容居中对齐
查看>>
POJ 3320 (尺取法+Hash)
查看>>