最速下降法求最优解西安电子科技大学matlab结课大作业 联系客服

发布时间 : 星期日 文章最速下降法求最优解西安电子科技大学matlab结课大作业更新完毕开始阅读b577756cfc4ffe473368ab95

07112016、最速下降法求最优解

六、 结果评价

本次测试分别从两组不同的初始搜索位置,两组不同 a,b,c,d 值出发, 两两比较可得结论:测试用例 abcd 为某些特定值时,不同初始搜索位置可 以得到相同的最优解;测试用例当初搜索位置相同时,abcd 分别取两组数时 得到的最优解是不同的。从结果上来看本例函数始终取到相同最优值,达到 了题目要求,只是在最优点位置有略微差异,这个问题产生原因是与最优值 点间的误差阈值自定义值有关,精度越高最优值越准确。

七、 程序评价

1. 最速下降法算法简单,初始点可以任意选,每次迭代计算量小,即使从

一个不好的初始点出发,往往也能收敛到局部极小点。

2. 由于在远离极小点的地方每次迭代可以使目标函数值有较大的下降,但

是在接近极小点的地方,由于锯齿现象,会导致每次行进距离缩短,从 而使收敛速度不快。即全局收敛,线性收敛,易产生扭摆现象而造成早 停。

3. 最速下降法是一种理想的极小化方法。必须指出的是,某点的负梯度方

向,通常只是在该店附近才具有这种最速下降的性质。

4. 在实用中常将最速下降法和其他方法联合应用,在前期使用最速下降法,

而在接近极小点时,可改用收敛较快的其他方法,这样能使计算速度更 快,结果更准确。

八、 心得体会

通过这次结课大作业,加深了我对 MATLAB 记忆和理解,真正做到了理论 和实践相结合,锻炼了自己分析,处理实际问题的能力,也认识到了自己的 不足。编程存在问题很大,主要细节错误找不出,M 文件的编写后调用运用 的不好,也让我认识到编写好 M 文件的重要性。在以后的学习中,要注重细 节和改错,多上机操作,切实提高编程能力。

九、 附录

fun.m 文件

function [xo,fo]=fun(f,grad,x0)%f:函数名; %grad:梯度函数; %x0:搜索初始值;

%TolX:最优值点间的误差阈值; %TolFun:函数的误差阈值; %dist0:初始步长;

%MaxIter:最大的迭代次数; %xo:最优化点值; %fo:函数在点 xo 处的函数值。

%%%%%% 判断输入的变量数,设定一些变量为默认值 TolX=1e-4; TolFun=1e-9;

第 8 页

07112016、最速下降法求最优解

MaxIter=100; dist0=1; if nargin<7

MaxIter=100; %最大的迭代次数默认为 10 end

if nargin<6

dist0=10; %初始步长默认为 10 end

if nargin<5 TolFun=1e-8; %函数值误差为 1e-8

end

if nargin<4

TolX=1e-6; %自变量距离误差 end x=x0; fx0=feval(f,x0); fx=fx0; dist=dist0; kmax1=25; %线性搜索法确定步长的最大搜索次数 warning=0;

%%%%%迭代计算求最优解 for k=1:MaxIter g=feval(grad,x);

g=g/norm(g); %求点 x 处的梯度 %%线性搜索方法确定步长 dist=dist*2;

fx1=feval(f,x-dist*2*g); for k1=1:kmax1 fx2=fx1; fx1=feval(f,x-dist*g);

if fx0>fx1+TolFun && fx1fx1

dist=dist/2; end end

if k1>=kmax1 warning=warning+1;%无法确定最优步长 else

warning=0; end

第 9 页

%确定下一点

07112016、最速下降法求最优解

if warning>=2||(norm(x-x0)

break; end x0=x; fx0=fx; end

xo=x;fo=fx; if k==MaxIter

fprintf('Just best in %d iteration',MaxIter); end

命令窗口输入:以测试结果一为例 >> syms x y

>> x0=[2,4];%初始搜索位置

>> f=inline('[(x(1)-4).^2+3*(x(2)-3).^2+2*x(1)*x(2)+1]','x'); >> %位置(x,y)用一元二维 x=(x(1),x(2))来表示 >> grad= inline('[2*x(1)+3*x(2)-2,3*x(1)+6*x(2)-12]','x'); >> %函数 f 在位置 x 的梯度 >> [xo,fo]=fun(f,grad,x0)

第 10