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. 结果

posted @ 2024-06-16 21:40  chrisrmas、  阅读(2)  评论(0编辑  收藏  举报