Armijo算法的实现:
functionMK=armijo(fun,xk,rho,sigma,gk ) )。
assert(rho0rho1);
assert(sigma0sigma0.5;
mk=0; max_mk=100;
while mk=max_mk
x=xk - rho^mk * gk;
ifeval(fun,x ) ifeval(fun,xk )- sigma * rho^mk *欢呼承诺(gk ) ) 2
黑;
结束
mk=mk 1;
结束
返回; 实现最速下降法:
function [opt_x,opt_f,k]=grad_descent(fun_obj,fun_grad,x0 ) ]
max_iter=5000; % max number of iterations
% Armijo parameters
rho=0.5; sigma=0.2;
% initialization
k=0; xk=x0;
while k max_iter
k=k 1;
GK=feval(fun_grad,xk ); % gradient vector
dk=-1 * gk; % search direction
if欢喜的约定(dk )大方的裙子/p break;
结束
yk=feval(fun_obj,xk );
frintf('#ITER=)、xk=%.5f、f=%.5f(n )、k、xk、yk );
MK=armijo(fun_obj,xk,rho,sigma,gk );
xk=xk rho^mk * dk;
结束
fprintf--------n ';
if k==max_iter
fprintf (可编程的! n ';
else
可编程解决方案! n ';
结束
% record results
opt_x=xk;
opt_f=feval(fun_obj,xk );
返回;