6.12
1. 算法步骤
确定无约束优化问题:
给定目标函数$f(x)$,要求最小化或最大化该函数,即求解$\min f(x)$或$\max f(x)$。
选择终止准则:
确定终止准则,通常是设置一个收敛精度,当两次迭代之间目标函数值的差小于该精度时,认为算法已经收敛,可以终止迭代。
实现FR共轭梯度法的MATLAB编程:
编写MATLAB代码实现FR共轭梯度法,包括计算搜索方向、确定步长、更新迭代点等步骤。
选取初始点:
在实验二和实验三中选取的初始点作为起始点,用于FR共轭梯度法的初始迭代点。
执行共轭梯度法迭代:
使用FR共轭梯度法进行迭代优化,直到满足终止准则。
比较实验结果:
比较FR共轭梯度法与实验二和实验三中其他优化算法的实验结果,包括最优解、最优值和收敛速度等方面。
2. 代码
function [xk]=FR_Wolfe(e,x)
%step 1
g0=shuzhiweifenfa(x);
pk=-g0;
%没用到k,只存储当前迭代的值。
xk=x;
while 1
%step 2
%一维搜索求ak
a=Wolfe_Powell(xk,pk);
%step 3
xk=xk+a*pk;
g1=shuzhiweifenfa(xk);
%step 4
%范数用的是平方和开根号
if sqrt(sum(g1.^2))<=e
return;
end
%step 5
b=(g1*g1')/(g0*g0');
pk=-g1+b*pk;
%step 6
%没用到k,只存储当前迭代的值。
g0=g1;
function g=shuzhiweifenfa(x)
for i = 1:length(x)
m=zeros(1,length(x));
m(i)=(10^-6)/2;
g(i)=f(x+m)-f(x-m);
end
g=g/10^-6;
function a=Wolfe_Powell(x,pk)
%step 1
u=0.1;
b=0.5;
a=1;
n=0;
m=10^100;
%step 2
fx=f(x);
g=shuzhiweifenfa(x);
while 1
xk=x+a*pk;
fxk=f(xk);
gk=shuzhiweifenfa(xk);
if (fx-fxk)>=(-u*a*g*pk.')%(3-1)
if (gk*pk.')>=(b*g*pk.')%(3-2)
return;
else
%step 4
n=a;
a=min(2*a,(a+m)/2);
end
else
%step 3
m=a;
a=(a+n)/2;
end
end
3. 结果