实验二 无约束最优化

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 优化工具箱使用方法)!!

相关文档
最新文档