实验二 无约束最优化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二、 无约束最优化
【实验目的】
1.了解无约束最优化方法的一些基本概念。
2.熟悉掌握用相关的命令来求解无约束最优化问题。
【实验内容】
把题目和相应的完整命令写在实验报告上。
1:无约束最优化问题实际上是什么问题?求这类问题的最优解的基本思路是什么?
2:求()5x f x e x =-在区间[1,2]内的极小值点和极小值。
3:已知2221231212
3(,,)3sin f x x x x x x x x =+-。 (1) 求123(,,)f x x x 在点(1,1,0)-附近的极小值;
(2) 求123(,,)f x x x 在点(1,1,0)-附近的极小值点和极小值,要求优化算法用大范围优化算法,搜索方向用拟牛顿法的DFP 公式。
【相关知识说明】
无约束最优化是指在没有约束条件下,求多变量实值函数极值。
无约束最优化问题的数学表达式为
12min (),(,,,)n n f x x x x x R =∈ 。
一般f 为非线性函数,x 是n 维实变量,实际上这是一个多元函数无条件极值问题。
由于求极大值问题,可以用添加负号的方式转化为求极
小值问题,因此通常只讨论求极小值问题。应该注意的是,极值问题的解,即极值点,都是局部最优解,全局最优解只能从局部最优解的比较中得到。
如何求解无约束最优化问题的最优解呢?一般是采用迭代法,即先选择一个初始点,再寻找该点处的下降方向(我们称为搜索方向),在该方向上求极小点,得到一个新的点,然后在新点处再寻找下降方向和在该方向上的求极小点,……,如此下去,最终得到最优解。
我们先来看求一元函数y=f(x)在[x1,x2]内的极小值的命令:
说明:其中'fun'是函数f(x)的表达式,当然也可以是关于f(x)的函数M-文件名。返回值x 是极小值点。
现在我们来回答问题1。
问题1:求()2sin x f x e x -=在区间[0,6]内的极小值点和极小值.
命令如下
f='2*exp(-x)*sin(x)';
x=fminbnd(f,0,6) %极小值点
fval=2*exp(-x)*sin(x) %对应x 的极小值
大家得到的结果是什么呢?
这些是一元函数求极值,那么怎么求多元函数的极值
呢?可以用下面的最简形式的命令:
如果还必须满足更苛刻的要求,可以用下面的命令
说明:(1) 返回值中,x 是极小值点。如果需要相应的极小值,可以用fval=fun(x)即可。
(2) 这里'fun'必须是事先定义的函数M-文件,M-文件的定义方式看下面的例子。
(3) x0是迭代初值。
问题2:已知2231212
12(,)4f x x x x x x =+-。 (1) 12(,)f x x 在点(1,2)附近的极小值;
(2) 求12(,)f x x 在点(1,2)附近的极小值点和极小值,要求要求用大型优化算法,搜索方向用拟牛顿法的DFP 公式,精度为610-,并给出迭代次数.
首先,建立M-文件,文件名取函数名 myfun.m 。 function f=myfun(x)
f=4*x(1)^2+x(2)^2-x(1)^3*x(2)
对于第一问,比较简单,直接应用上面命令的最简形式即可,如下。
x0=[1,2]; %取点(1,2)为迭代初值
x=fminunc('myfun',x0);
fval=myfun(x)
命令如下
x0=[1,2];
x
对于第二问,首先求出梯度:
syms x1 x2;
f='4*x1^2+x2^2-x1^3*x2';
J=jacobian(f,[x1,x2])
得到梯度向量:
J = [ 8*x1-3*x1^2*x2, 2*x2-x1^3]
其次,定义目标函数和梯度的m文件myfun1.m:function [y,Gy]=myfun1(x)
y=4*x(1)^2+x(2)^2-x(1)^3*x(2);
Gy=[8*x(1)-3*x(1)^2*x(2), 2*x(2)-x(1)^3];
最后,编入命令:
x0=[1,2];
opt=optimset; %为了方便将optimset返回为opt opt.Display='iter'; %显示所有迭代过程
opt.Tolx=1e-6;
opt.TolFun=1e-6; %设置自变量和因变量的容量
opt.HessUpdate='dfp'; %设置搜索方向
opt.GradObj='on';
rgeScale='on';
[x,fval,exitflag,output]=fminunc('myfun1',x0,opt)
大家分别运行上面的命令,看看相应的答案是什么? 类似fminunc ,我们还有一个命令fminsearch ,用法几乎一样, 与fminunc 不同的仅有两点:(1)fminsearch 使用的优化方法是单纯形法。(2)'fun'可以是函数f(x)的表达式,当然也可以是关于f(x)的函数M-文件名。
另外大家可以思考Rosebrock 函数
22212211(,)100()(1)f x x x x x =-+-。
试用不同算法(搜索方向和步长搜索)求最优极小值点和极小值。初值为( 1.2,2)-。
(参看: ppt : Matlab 优化工具箱使用方法)!!