实验二 无约束最优化

更新时间:2023-10-13 16:55:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验二、 无约束最优化

(先将此文档从服务器下载,若众人同时在服务器打开文档,容易导致出错) 【实验目的】

1.了解无约束最优化方法的一些基本概念。

2.熟悉掌握用相关的命令来求解无约束最优化问题。 【实验内容】

把题目和相应的完整命令写在实验报告上。

1:无约束最优化问题实际上是什么问题?求这类问题的最优解的基本思路是什么?

2:求f(x)?ex?5x在区间[1,2]内的极小值点和极小值。 3:已知f(x1,x2,x3)?x12?3sinx2?x1x22x32。 (1) 求f(x1,x2,x3)在点(1,?1,0)附近的极小值; (2) 求f(x1,x2,x3)在点(1,?1,0附近的极小值点和极小)值,要求优化算法用高斯-牛顿法,搜索方向用拟牛顿法的DFP公式,以及给出函数计算次数。 【相关知识说明】

无约束最优化是指在没有约束条件下,求多变量实值函数极值。

无约束最优化问题的数学表达式为

minf(x),x?(x1,x2,?,xn)?R。

n一般f为非线性函数,x是n维实变量,实际上这是一个多元

函数无条件极值问题。

由于求极大值问题,可以用添加负号的方式转化为求极小值问题,因此通常只讨论求极小值问题。应该注意的是,极值问题的解,即极值点,都是局部最优解,全局最优解只能从局部最优解的比较中得到。

如何求解无约束最优化问题的最优解呢?一般是采用迭代法,即先选择一个初始点,再寻找该点处的下降方向(我们称为搜索方向),在该方向上求极小点,得到一个新的点,然后在新点处再寻找下降方向和在该方向上的求极小点,……,如此下去,最终得到最优解。

我们先来看求一元函数y=f(x)在[x1,x2]内的极小值的命令:

x=fminbnd('fun',x1,x2) 说明:其中'fun'是函数f(x)的表达式,当然也可以是关于f(x)的函数M-文件名。返回值x是极小值点。

现在我们来回答问题1。

问题1:求f(x)?2e?xsinx在区间[0,6]内的极小值点和极小值.

命令如下

f='2*exp(-x)*sin(x)';

x=fminbnd(f,0,6) %极小值点 fval=2*exp(-x)*sin(x) %对应x的极小值

大家得到的结果是什么呢?

这些是一元函数求极值,那么怎么求多元函数的极值呢?可以用下面的最简形式的命令:

x=fminunc('fun',x0) 如果还必须满足更苛刻的要求,可以用下面的命令 [x,options]=fminunc('fun',x0,options) 说明:(1) 返回值中,x是极小值点。如果需要相应的极小值,可以用fval=fun(x)即可。

(2) 这里'fun'必须是事先定义的函数M-文件,M-文件的定义方式看下面的例子。

(3) x0是迭代初值。

(4) options是控制参数,它是一个有18个分量的向量,包括了在优化程序中要用到的各种参数,以便在计算最优值时控制精度要求、输出形式、搜索算法、迭代次数、步长等等。例如分量options(6)是指明搜索方向的。options各分量的意义见篇末。

在使用options前,可以根据要求对options的某些分量进行赋值,否则options会自动使用缺省值。根据options各分量的意义,我们来回答问题2。 问题2:已知f(x1,x2)?4x12?x22?x13x2。 ①求f(x1,x2)在点(1,2)附近的极小值;

②求f(x1,x2)在点(1,2)附近的极小值点和极小值,要求搜索

方向为最速下降法,精度为10?6,并给出函数计算次数.

首先,建立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)

对于第二问,就要复杂很多了,要考虑参数options各个分量的取值。命令如下

x0=[1,2];

opt(2)=1e-6; %设置自变量要求的精度 opt(3)=1e-6; %设置函数值要求的精度 opt(6)=2; %搜索算法用最速下降法 [x,opt]=fminunc('myfun',x0,opt); x

%参数options的值已返回给向量opt,因此 n=opt(10) %得到函数计算次数 fval=opt(8) %在极点x处的极小值

大家分别运行上面的命令,看看相应的答案是什么? 类似fminunc,我们还有一个命令fminsearch,用法几

乎一样, 与fminunc不同的仅有两点:(1)fminsearch使用的优化方法是单纯形法。(2)'fun'可以是函数f(x)的表达式,当然也可以是关于f(x)的函数M-文件名。

另外大家可以思考Rosebrock函数

f(x1,x2)?100(x2?x1)?(1?x1)。

222试用不同算法(搜索方向和步长搜索)求最优极小值点和极小值。初值为(?1.2,2)。

参数options各分量说明

序号 功能 1 2 输出形式 分量说明 options(1)=1,有中间结果输出 options(1)=-1,给出警告信息 自变量x(k)的精度 3 目标函数f精度 4 约束条件g(k)的精度 5 6 7 8 9 10 11 12 13 14 15 主要优化算法 搜索方向算法 步长一维搜索算法 函数值输出 梯度检查 函数计算次数 梯度计算次数 约束梯度计算次数 等式约束的个数 最大迭代次数 目标优化 options(13)确定等式约束数目 options(14)输入迭代的最大次数 由attgoal命令使用,options(15)输入须达目的的目标个数 0, 等式约束数目为0 100n, n为自变量个数 0 options(4)设置g(k)的精度, 由命令constr、minmax使用终止判据 options(5)=1, 高斯-牛顿法 options(6)=1, 拟牛顿法的DFP公式 options(6)=2, 最速下降法 options(7)=1, 三次多项式插值 options(8)输出极值点处的函数值 options(9)=1, 最初几步,梯度将与有限微分计算的结果比较 options(10)输出函数计算次数 options(11)输出梯度计算次数 options(12)输出约束梯度计算次数 ||g(k)缺省值含义 0, 无中间结果输出 options(2)设置x(k)的精度 ||x(k?1)?x(k)(k)||||x||(k)?10?4 的options(3)设置f(k)的精度 ||f(k?1)?f(k)||||f(k?1)||(k)?10?4 ?g(k)||||g||?10?7 0, LM法 0, 拟牛顿法的BFGS公式 0, 混合的二次和三次多项式 0, 不作检查 16 17 18 差分步长最小值 差分步长最大值 步长 用差分计算梯度时步长的下限 用差分计算梯度时步长的上限 步长参数, 一般取1或更小 10?8 0.1

本文来源:https://www.bwwdw.com/article/k64f.html

Top