失效链接处理 |
最优化理论与算法 PDF 下载
本站整理下载:
相关截图:
主要内容:
1、算法原理
2、算法步骤
3、代码实现
%理查德外推法求偏导数
function gx=compute_grad(fun,x0,h)
%功能: 理查德外推法求解导数
%输入: fun是目标函数;n是自变量的个数;x0是初始点,
% 取h =1.0e-3
%输出: gx是导数
temp=x0;
grad=x0;
for i=1:size(x0)
temp(i)=temp(i)+0.5*h;
grad(i)=4*feval(fun,temp)/(3*h);
temp(i)=temp(i)-h;
grad(i)=grad(i)-4*feval(fun,temp)/(3*h);
temp(i)=temp(i)+3*h/2;
grad(i)=grad(i)-feval(fun,temp)/(6*h);
temp(i)=temp(i)-2*h;
grad(i)=grad(i)+feval(fun,temp)/(6*h);
temp(i)=x0(i);
end
gx=grad;
%求梯度
function gf=gfun(x)
gf=compute_grad('fun',x,1.0e-3);
%梯度法程序
function [k,x,val]=grad(fun,gfun,x0,epsilon)
%功能: 梯度法求解无约束优化问题: min f(x)
%输入: fun, gfun分别是目标函数及其梯度, x0是初始点,
% epsilon为容许误差
%输出: k是迭代次数, x, val分别是近似最优点和最优值
maxk=5000; %最大迭代次数
beta=0.5; sigma=0.4;
k=0;
while(k<maxk)
gk=feval(gfun,x0); %计算梯度
dk=-gk; %计算搜索方向
if(norm(gk)<epsilon), break; end %检验终止准则
m=0; mk=0;
while(m<20) %用Armijo搜索求步长
if(feval(fun,x0+beta^m*dk)<=feval(fun,x0)+sigma*beta^m*gk'*dk)
mk=m; break;
end
m=m+1;
end
x0=x0+beta^mk*dk;
k=k+1;
end
x=x0;
val=feval(fun,x0);
|