最速下降法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最速下降法

%% 最速下降法图示

% 设置步长为0.1,f_change为改变前后的y值变化,仅设置了一个退出条件。syms x;f=x^2;

step=0.1;x=2;k=0; %设置步长,初始值,迭代记录数

f_change=x^2; %初始化差值

f_current=x^2; %计算当前函数值

ezplot(@(x,f)f-x.^2) %画出函数图像

axis([-2,2,-0.2,3]) %固定坐标轴

hold on

while f_change>0.000000001 %设置条件,两次计算的值之差小于某个数,跳出循环

x=x-step*2*x;

%-2*x为梯度反方向,step为步长,!最速下降法!

f_change = f_current - x^2; %计算两次函数值之差

f_current = x^2 ;

%重新计算当前的函数值

plot(x,f_current,'ro','markersize',7) %标记当前的位置

drawnow;pause(0.2);

k=k+1;

end

hold off

fprintf('在迭代%d次后找到函数最小值为%e,对应的x值为%e\n',k,x^2,x)

wolfe准则

unction [alpha, newxk, fk, newfk] = wolfe(xk, dk)

rho = 0.25; sigma = 0.75;

alpha = 1; a = 0; b = Inf;

while (1)

if ~(fun(xk+alpha*dk)<=fun(xk)+rho*alpha*gfun(xk)'*dk) b = alpha;

alpha = (alpha+a)/2;

continue;

end

if ~(gfun(xk+alpha*dk)'*dk>= sigma*gfun(xk)'*dk)

a = alpha;

alpha = min([2*alpha, (b+alpha)/2]); continue;

end

break;

end

newxk = xk+alpha*dk;

fk = fun(xk);

newfk = fun(newxk);

Armijo准则

function mk = armijo(xk, dk)

beta = 0.5; sigma = 0.2;

m = 0; mmax = 200;

while (m<=mmax)

if(fun(xk+beta^m*dk) <= fun(xk) + sigma*beta^m*gfun(xk)'*dk) mk = m; break;

end

m = m+1;

end

alpha = beta^mk

newxk = xk + alpha*dk

fk = fun(xk)

newfk = fun(newxk)

相关文档
最新文档