最速下降算法

  • 格式: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);