最速下降算法
- 格式:doc
- 大小:30.00 KB
- 文档页数:3
重庆科技学院学生实验报告
课程名称 最优化方法 实验项目名称 最速下降法解多维无约束极值问题
开课学院及实验室 数理学院 I217 实验日期 2014.10.22
学生姓名 杜晗 学号 2012444087 专业班级 应数普12-2
指导教师 陈照辉 实验成绩
一、实验目的和要求
目的.熟悉最速下降算法的思想和步骤;
要求.掌握最速下降法求解多维无约束极值问题。
二、实验内容和原理
内容:对所给多维无约束极值问题用matlab编程进行求解;
原理:负梯度的方向使目标函数f(x)下降最快。它是无约束极值的最早数值方法。
三、主要仪器设备
操作系统为Windows 2000及以上的电脑,并装有matlab,1stopt软件。
四、实验操作方法和步骤
根据最速下降法的步骤,设计运算程序,并用该程序求解多维函数极值。
五、实验记录与处理(数据、图表、计算等)
1.以Tx)0,0(0为初始点进行计算
[R,n]=steel(0,0,0.00001)
R =2.0000 0.0000
n = 2
2.以Tx)1,0(0为初始点进行计算
[R,n]=steel(0,1,0.00001)
R = 2.0000 0.0000
n =12 R为取极值条件,n为迭代次数
六、实验结果及分析
x1=2 x2=0
max f(x) =0
不同的初始点,得到最终结果的迭代次数不相同;
程序运算结果与手算结果相同,结果正确,即极大值为0。
附页 源代码(M文件):
function [R,n]=steel(x0,y0,eps)
syms x;
syms y;
f=(x-2)^2+2*y^2;%目标函数
v=[x,y];
j=jacobian(f,v); %梯度
T=[subs(j(1),x,x0),subs(j(2),y,y0)]; %梯度在初始点处的取值
temp=sqrt((T(1))^2+(T(2))^2); %长度
x1=x0;y1=y0;
n=0;
syms kk;
while (temp>eps) %迭代
d=-T; %负梯度方向
f1=x1+kk*d(1);f2=y1+kk*d(2);
fT=[subs(j(1),x,f1),subs(j(2),y,f2)];
fun=sqrt((fT(1))^2+(fT(2))^2);
Mini=minHJ(fun,0,1,0.00001); %用到上次实验中的黄金分割法求最优步长
x0=x1+Mini*d(1);y0=y1+Mini*d(2);
T=[subs(j(1),x,x0),subs(j(2),y,y0)];
temp=sqrt((T(1))^2+(T(2))^2);
x1=x0;y1=y0;
n=n+1;
end
R=[x0,y0]
function [x,minf] = minHJ (f,a,b,eps)
% f为目标函数
%[a,b]为区间
%eps为精度
l = a + 0.382*(b-a); %分割点
u = a + 0.618*(b-a); %分割点
k=1;
tol = b-a; %区间长度
while tol>eps && k<100000 %停止准则
fl = subs (f , findsym (f), l); % findsym (f) 给出f所有变量 fu = subs (f , findsym (f), u); % subs是一个符号函数,返回一个符号变量
if fl > fu
a = l;
l = u;
u = a + 0.618*(b - a);
else
b = u;
u = l;
l = a + 0.382*(b-a);
end
k = k+1;
tol = abs (b - a);
end
if k == 100000
disp ('找不到最小值!');
x = NaN;
minf = NaN;
return;
end
x = (a+b)/2;
minf = subs (f, findsym (f),x);