- 4
- 0
- 约2.19千字
- 约 6页
- 2016-11-30 发布于湖北
- 举报
数学与计算科学学院
实 验 报 告
实验项目名称 非精确搜索+CD
所属课程名称 最优化方法
实 验 类 型 算法编程
实 验 日 期
班 级
学 号
姓 名
成 绩
一、实验概述: 【实验目的】
掌握Matlab数值计算的基本方法;
掌握共轭下降法即CD法并进行MATLAB编程实现;
进行数值实验并对数值结果进行分析。
【实验原理】
CD方法是Fletcher在1987年引入的共轭下降法。CD法的一个重要性质为:只有强Wolfe条件中的参数,CD方法在每次迭代便产生一个下降搜索方向,这与FR方法和PRP方法不同,因为FR方法和PRP方法在这时对一致凸函数都有可能产生一个上升搜索方向。采取强Wolfe非精确线性搜索的共轭梯度法,只要每个搜索方向下降,即可保证收敛性。所以这一结论为CD方法的收敛性分析提供了一个非常有力的工具,不过采取强Wolfe非精确线性搜索的CD方法,无法保证其全局收敛性。
CD方法中, 的选取按照如下公式:
对于推广的Wolfe线性搜索,若参数满足,可得到,当参数满足上述式子时,CD法必定全局收敛。相反的,若参数满足,可构造出例子,使得CD方法收敛于一个非稳定点,表明是必要的。若参数满足,这时可能以指数级数增长。由此,给出一般性证明,表面对任意正常数,满足推广的Wolfe线性搜索的CD方法不必收敛,且是必要的。
【实验环境】
Microsoft Windows 7
Matlab
二、实验内容: 【实验方案】
1.选定题目,解的极小点,取初始点。
2.在强Wolfe非精确线性搜索下,使用CD方法,利用Matlab编写程序解决问题。
3.运行程序并调拭,得出结果。
4.分析结果。
【实验过程】(实验步骤、记录、数据、分析)
1.编写出强Wolfe搜索的主程序:
clc,clear;
syms x;
for i=1:2
transX(i)=sym(strcat(xnum2str(i)));
end
X_sym=transX;
X_sym=(x1,x2);
X=[-1,2,1];
d=[1,1];
WolfeSearh(X_sym,X,d);
2.编写出使用共轭梯度法中的CD方法来求解的Matlab程序(详细程序见附录源程序)。
3.运行程序,得出结果如图所示:
从上述运行结果可以得出:最优解为x=1.0000,最小值约为f=0。
【实验结论(结果)小结结论clc;
clear;
n=2;
x=[2,0];
max_k=100;
count_k=1;
trace(1,1)=x(1);
trace(2,1)=x(2);
trace(3,1)=f_fun(x);
k=0;
g1=f_dfun(x);
s=-g1;
while count_k=max_k
if k==n
g0=f_dfun(x);
s=-g0;
k=0;
else
r_min=fminbnd(@(t)f_fun(x+t*s),-100,100);
x=x+r_min*s;
g0=g1;
g1=f_dfun(x);
if norm(g1)10^(-6)
break;
end
m=(norm(g1)^2)/(norm(g0)^2);
s=-g1+m*s;
count_k=count_k+1;
trace(1,count_k)=x(1);
trace(2,count_k)=x(2);
trace(3,count_k)=f_fun(x);
k=k+1;
end
end
count_k=x;
f=f_fun(x);
Function g=f_dfun(x)
g(1,1)=20*x(1)^3-20*x(1)*x(2)+2*x(1)-2;
g(2,1)=10*x(2)-10*x(1)^2;
Function f=f_fun(x)
f=5*x(1)^4-10*x(1)^2*x(2)+x(1)^2-2*x(1)+1+5*x(2)^2;
附录2:实验报告填写说明
1.实验名称实验目的目的要明确,要抓住重点,
4.实验环境实验用的软硬件环境。
原创力文档

文档评论(0)