matlab优化工具箱文档格式.docx

上传人:b****3 文档编号:6358131 上传时间:2023-05-06 格式:DOCX 页数:72 大小:200.35KB
下载 相关 举报
matlab优化工具箱文档格式.docx_第1页
第1页 / 共72页
matlab优化工具箱文档格式.docx_第2页
第2页 / 共72页
matlab优化工具箱文档格式.docx_第3页
第3页 / 共72页
matlab优化工具箱文档格式.docx_第4页
第4页 / 共72页
matlab优化工具箱文档格式.docx_第5页
第5页 / 共72页
matlab优化工具箱文档格式.docx_第6页
第6页 / 共72页
matlab优化工具箱文档格式.docx_第7页
第7页 / 共72页
matlab优化工具箱文档格式.docx_第8页
第8页 / 共72页
matlab优化工具箱文档格式.docx_第9页
第9页 / 共72页
matlab优化工具箱文档格式.docx_第10页
第10页 / 共72页
matlab优化工具箱文档格式.docx_第11页
第11页 / 共72页
matlab优化工具箱文档格式.docx_第12页
第12页 / 共72页
matlab优化工具箱文档格式.docx_第13页
第13页 / 共72页
matlab优化工具箱文档格式.docx_第14页
第14页 / 共72页
matlab优化工具箱文档格式.docx_第15页
第15页 / 共72页
matlab优化工具箱文档格式.docx_第16页
第16页 / 共72页
matlab优化工具箱文档格式.docx_第17页
第17页 / 共72页
matlab优化工具箱文档格式.docx_第18页
第18页 / 共72页
matlab优化工具箱文档格式.docx_第19页
第19页 / 共72页
matlab优化工具箱文档格式.docx_第20页
第20页 / 共72页
亲,该文档总共72页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

matlab优化工具箱文档格式.docx

《matlab优化工具箱文档格式.docx》由会员分享,可在线阅读,更多相关《matlab优化工具箱文档格式.docx(72页珍藏版)》请在冰点文库上搜索。

matlab优化工具箱文档格式.docx

下面的命令行返回显示优化参数options到my_options结构中(就象前面的例子一样),但如果显示参数没有定义,则返回值'

final'

:

optnew=optimget(my_options,'

'

);

参见:

optimset

●optimset函数

创建或编辑优化选项参数结构。

options=optimset('

param1'

value1,'

param2'

value2,...)

options=optimset

options=optimset(optimfun)

options=optimset(oldopts,'

value1,...)

options=optimset(oldopts,newopts)

value2,...)创建一个称为options的优化选项参数,其中指定的参数具有指定值。

所有未指定的参数都设置为空矩阵[](将参数设置为[]表示当options传递给优化函数时给参数赋缺省值)。

赋值时只要输入参数前面的字母就行了。

optimset函数没有输入输出变量时,将显示一张完整的带有有效值的参数列表。

options=optimset(withnoinputarguments)创建一个选项结构options,其中所有的元素被设置为[]。

options=optimset(optimfun)创建一个含有所有参数名和与优化函数optimfun相关的缺省值的选项结构options。

value1,...)创建一个oldopts的拷贝,用指定的数值修改参数。

options=optimset(oldopts,newopts)将已经存在的选项结构oldopts与新的选项结构newopts进行合并。

newopts参数中的所有元素将覆盖oldopts参数中的所有对应元素。

1.下面的语句创建一个称为options的优化选项结构,其中显示参数设为'

iter'

,TolFun参数设置为1e-8:

options=optimset('

TolFun'

1e-8)

2.下面的语句创建一个称为options的优化结构的拷贝,改变TolX参数的值,将新值保存到optnew参数中:

optnew=optimset(options,'

TolX'

1e-4);

3.下面的语句返回options优化结构,其中包含所有的参数名和与fminbnd函数相关的缺省值:

fminbnd'

4.若只希望看到fminbnd函数的缺省值,只需要简单地键入下面的语句就行了:

optimsetfminbnd

或者输入下面的命令,其效果与上面的相同:

optimset('

optimget

9.1.4模型输入时需要注意的问题

使用优化工具箱时,由于优化函数要求目标函数和约束条件满足一定的格式,所以需要用户在进行模型输入时注意以下几个问题:

1.目标函数最小化

优化函数fminbnd、fminsearch、fminunc、fmincon、fgoalattain、fminmax和lsqnonlin都要求目标函数最小化,如果优化问题要求目标函数最大化,可以通过使该目标函数的负值最小化即-f(x)最小化来实现。

近似地,对于quadprog函数提供-H和-f,对于linprog函数提供-f。

2.约束非正

优化工具箱要求非线性不等式约束的形式为Ci(x)≤0,通过对不等式取负可以达到使大于零的约束形式变为小于零的不等式约束形式的目的,如Ci(x)≥0形式的约束等价于-Ci(x)≤0;

Ci(x)≥b形式的约束等价于-Ci(x)+b≤0。

3.避免使用全局变量

9.1.5@(函数句柄)函数

MATLAB6.0中可以用@函数进行函数调用。

@函数返回指定MATLAB函数的句柄,其调用格式为:

handle=@function

利用@函数进行函数调用有下面几点好处:

● 

用句柄将一个函数传递给另一个函数;

减少定义函数的文件个数;

改进重复操作;

保证函数计算的可靠性。

下面的例子为humps函数创建一个函数句柄,并将它指定为fhandle变量。

fhandle=@humps;

同样传递句柄给另一个函数,也将传递所有变量。

本例将刚刚创建的函数句柄传递给fminbnd函数,然后在区间[0.3,1]上进行最小化。

x=fminbnd(@humps,0.3,1)

x=

0.6370

9.2最小化问题

9.2.1单变量最小化

9.2.1.1基本数学原理

本节讨论只有一个变量时的最小化问题,即一维搜索问题。

该问题在某些情况下可以直接用于求解实际问题,但大多数情况下它是作为多变量最优化方法的基础在应用,因为进行多变量最优化要用到一维搜索法。

该问题的数学模型为:

其中,x,x1,和x2为标量,f(x)为函数,返回标量。

该问题的搜索过程可用下式表达:

其中xk为本次迭代的值,d为搜索方向,α为搜索方向上的步长参数。

所以一维搜索就是要利用本次迭代的信息来构造下次迭代的条件。

求解单变量最优化问题的方法有很多种,根据目标函数是否需要求导,可以分为两类,即直接法和间接法。

直接法不需要对目标函数进行求导,而间接法则需要用到目标函数的导数。

1.直接法

常用的一维直接法主要有消去法和近似法两种。

(1)消去法该法利用单峰函数具有的消去性质进行反复迭代,逐渐消去不包含极小点的区间,缩小搜索区间,直到搜索区间缩小到给定的允许精度为止。

一种典型的消去法为黄金分割法(GoldenSectionSearch)。

黄金分割法的基本思想是在单峰区间内适当插入两点,将区间分为三段,然后通过比较这两点函数值的大小来确定是删去最左段还是最右段,或同时删去左右两段保留中间段。

重复该过程使区间无限缩小。

插入点的位置放在区间的黄金分割点及其对称点上,所以该法称为黄金分割法。

该法的优点是算法简单,效率较高,稳定性好。

(2)多项式近似法该法用于目标函数比较复杂的情况。

此时寻找一个与它近似的函数代替目标函数,并用近似函数的极小点作为原函数极小点的近似。

常用的近似函数为二次和三次多项式。

二次内插涉及到形如下式的二次函数数据拟合问题:

其中步长极值为:

然后只要利用三个梯度或函数方程组就可以确定系数a和b,从而可以确定α*。

得到该值以后,进行搜索区间的收缩。

在缩短的新区间中,重新安排三点求出下一次的近似极小点α*,如此迭代下去,直到满足终止准则为止。

其迭代公式为:

其中

二次插值法的计算速度比黄金分割法的快,但是对于一些强烈扭曲或可能多峰的函数,该法的收敛速度会变得很慢,甚至失败。

2.间接法

间接法需要计算目标函数的导数,优点是计算速度很快。

常见的间接法包括牛顿切线法、对分法、割线法和三次插值多项式近似法等。

优化工具箱中用得较多的是三次插值法。

三次插值的基本思想与二次插值的一致,它是用四个已知点构造一个三次多项式P3(x),用它逼近函数f(x),以P3(x)的极小点作为f(x)的近似极小点。

一般讲,三次插值法比二次插值法的收敛速度要快些,但每次迭代需要计算两个导数值。

三次插值法的迭代公式为

其中

如果函数的导数容易求得,一般来说首先考虑使用三次插值法,因为它具有较高的效率。

对于只需要计算函数值的方法中,二次插值法是一个很好的方法,它的收敛速度较快,尤其在极小点所在区间较小时尤其如此。

黄金分割法则是一种十分稳定的方法,并且计算简单。

由于以上原因,Matlab优化工具箱中使用得较多的方法是二次插值法、三次插值法、二次、三次混合插值法和黄金分割法。

9.2.1.2相关函数介绍

fminbnd

找到固定区间内单变量函数的最小值。

x=fminbnd(fun,x1,x2)

x=fminbnd(fun,x1,x2,options)

x=fminbnd(fun,x1,x2,options,P1,P2,...)

[x,fval]=fminbnd(...)

[x,fval,exitflag]=fminbnd(...)

[x,fval,exitflag,output]=fminbnd(...)

fminbnd求取固定区间内单变量函数的最小值。

x=fminbnd(fun,x1,x2)返回区间{x1,x2}上fun参数描述的标量函数的最小值x。

x=fminbnd(fun,x1,x2,options)用options参数指定的优化参数进行最小化。

x=fminbnd(fun,x1,x2,options,P1,P2,...)提供另外的参数P1,P2等,传输给目标函数fun。

如果没有设置options选项,则令options=[]。

[x,fval]=fminbnd(...)返回解x处目标函数的值。

[x,fval,exitflag]=fminbnd(...)返回exitflag值描述fminbnd函数的退出条件。

[x,fval,exitflag,output]=fminbnd(...)返回包含优化信息的结构输出。

变量:

函数的输入变量在表9-7中进行描述,输出变量在表9-8中描述。

与fminbnd函数相关的细节内容包含在fun,options,exitflag和output等参数中,如表9-10所示。

算法:

fminbnd是一个M文件。

其算法基于黄金分割法和二次插值法。

文献[1]中给出了实现同样算法的Fortran程序。

局限性:

1.目标函数必须是连续的。

2.fminbnd函数可能只给出局部最优解。

3.当问题的解位于区间边界上时,fminbnd函数的收敛速度常常很慢。

此时,fmincon函数的计算速度更快,计算精度更高。

4.fminbnd函数只用于实数变量。

fminsearch,fmincon,fminunc,optimset,inline

文献:

[1] 

Forsythe,G.E.,M.A.Malcolm,andC.B.Moler,ComputerMethodsforMathematicalComputations,PrenticeHall,1976.

9.2.1.3应用实例

[例一]在区间(0,2π)上求函数sin(x)的最小值:

x=fminbnd(@sin,0,2*pi)

x=

4.7124

所以区间(0,2π)上函数sin(x)的最小值点位于x=4.7124处。

最小值处的函数值为:

y=sin(x)

y=

-1.0000

磁盘中该问题的M文件名为opt21_1.m。

[例三]对边长为3m的正方形铁板,在四个角处剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?

假设剪去的正方形的边长为x,则水槽的容积为

现在要求在区间(0,1.5)上确定一个x,使最大化。

因为优化工具箱中要求目标函数最小化,所以需要对目标函数进行转换,即要求最小化。

首先编写M文件opt21_3o.m:

functionf=myfun(x)

f=-(3-2*x).^2*x;

然后调用fminbnd函数(磁盘中M文件名为opt21_3.m):

x=fminbnd(@opt21_3o,0,1.5)

得到问题的解:

0.5000

即剪掉的正方形的边长为0.5m时水槽的容积最大。

水槽的最大容积计算:

y=optim2(x)

y=

-2.0000

所以水槽的最大容积为2.0000m3。

9.2.2线性规划

9.2.2.1基本数学原理

线性规划是处理线性目标函数和线性约束的一种较为成熟的方法,目前已经广泛应用于军事、经济、工业、农业、教育、商业和社会科学等许多方面。

线性规划问题的标准形式是:

写成矩阵形式为:

其中,0为n维列向量。

线性规划的标准形式要求目标函数最小化,约束条件取等式,变量非负。

不符合这几个条件的线性模型要首先转化成标准形。

线性规划的求解方法主要是单纯形法(SimpleMethod),该法由Dantzig于1947年提出,以后经过多次改进。

单纯形法是一种迭代算法,它从所有基本可行解的一个较小部分中通过迭代过程选出最优解。

其迭代过程的一般描述为:

1.将线性规划化为典范形式,从而可以得到一个初始基本可行解x(0)(初始顶点),将它作为迭代过程的出发点,其目标值为z(x(0))。

2.寻找一个基本可行解x

(1),使z(x

(1))≤z(x(0))。

方法是通过消去法将产生x(0)的典范形式化为产生x

(1)的典范形式。

3.继续寻找较好的基本可行解x

(2),x(3),…,使目标函数值不断改进,即z(x

(1))≥z(x

(2))≥z(x(3))≥…。

当某个基本可行解再也不能被其它基本可行解改进时,它就是所求的最优解。

Matlab优化工具箱中采用的是投影法,它是单纯形法的一种变种。

9.2.2.2相关函数介绍

linprog函数

求解线性规划问题。

数学模型:

其中f,x,b,beq,lb和ub为向量,A和Aeq为矩阵。

x=linprog(f,A,b,Aeq,beq)

x=linprog(f,A,b,Aeq,beq,lb,ub)

x=linprog(f,A,b,Aeq,beq,lb,ub,x0)

x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)

[x,fval]=linprog(...)

[x,fval,exitflag]=linprog(...)

[x,fval,exitflag,output]=linprog(...)

[x,fval,exitflag,output,lambda]=linprog(...)

x=linprog(f,A,b)求解问题minf'

*x,约束条件为A*x<

=b。

x=linprog(f,A,b,Aeq,beq)求解上面的问题,但增加等式约束,即Aeq*x=beq。

若没有不等式存在,则令A=[]、b=[]。

x=linprog(f,A,b,Aeq,beq,lb,ub)定义设计变量x的下界lb和上界ub,使得x始终在该范围内。

若没有等式约束,令Aeq=[]、beq=[]。

x=linprog(f,A,b,Aeq,beq,lb,ub,x0)设置初值为x0。

该选项只适用于中型问题,缺省时大型算法将忽略初值。

x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)用options指定的优化参数进行最小化。

[x,fval]=linprog(...)返回解x处的目标函数值fval。

[x,lambda,exitflag]=linprog(...)返回exitflag值,描述函数计算的退出条件。

[x,lambda,exitflag,output]=linprog(...)返回包含优化信息的输出变量output。

[x,fval,exitflag,output,lambda]=linprog(...)将解x处的拉格朗日乘子返回到lambda参数中。

lambda参数

lambda参数是解x处的拉格朗日乘子。

它有以下一些属性:

lambda.lower–lambda的下界。

lambda.upper–lambda的上界。

lambda.ineqlin–lambda的线性不等式。

lambda.eqlin–lambda的线性等式。

其它参数意义同前。

大型优化算法大型优化算法采用的是LIPSOL法,该法在进行迭代计算之前首先要进行一系列的预处理。

中型优化算法linprog函数使用的是投影法,就象quadprog函数的算法一样。

linprog函数使用的是一种活动集方法,是线性规划中单纯形法的变种。

它通过求解另一个线性规划问题来找到初始可行解。

诊断:

大型优化问题算法的第一步涉及到一些约束条件的预处理问题。

有些问题可能导致linprog函数退出,并显示不可行的信息。

在本例中,exitflag参数将被设为负值以表示优化失败。

若Aeq参数中某行的所有元素都为零,但Beq参数中对应的元素不为零,则显示以下退出信息:

Exitingduetoinfeasibility:

anallzerorowintheconstraintmatrixdoesnothaveazeroincorrespondingrighthandsizeentry.

若x的某一个元素没在界内,则给出以下退出信息:

objectivef'

*xisunboundedbelow.

若Aeq参数的某一行中只有一个非零值,则x中的相关值称为奇异变量。

这里,x中该成分的值可以用Aeq和Beq算得。

若算得的值与另一个约束条件相矛盾,则给出以下退出信息:

Singletonvariablesinequalityconstraintsarenotfeasible.

若奇异变量可以求解但其解超出上界或下界,则给出以下退出信息:

singletonvariablesintheequalityconstraintsarenotwithinbounds.

9.2.2.3应用实例

[[例二]生产决策问题

某厂生产甲乙两种产品,已知制成一吨产品甲需用资源A3吨,资源B4m3;

制成一吨产品乙需用资源A2吨,资源B6m3,资源C7个单位。

若一吨产品甲和乙的经济价值分别为7万元和5万元,三种资源的限制量分别为90吨、200m3和210个单位,试决定应生产这两种产品各多少吨才能使创造的总经济价值最高?

令生产产品甲的数量为x1,生产产品乙的数量为x2。

由题意可以建立下面的模型:

该模型中要求目标函数最大化,需要按照Matlab的要求进行转换,即目标函数为

首先输入下列系数:

f=[-7;

-5];

A=[32

46

07];

b=[90;

200;

210];

lb=zeros(2,1);

然后调用linprog函数:

[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb)

14.0000

24.0000

fval=

-218.0000

exitflag=

1

output=

iterations:

5

cgiterations:

0

algorithm:

'

lipsol'

lambda=

ineqlin:

[3x1double]

eqlin:

[0x1double]

upper:

[2x1double]

lower:

由上可知,生产甲种产品14吨、乙种产品24吨可使创建的总经济价值最高。

最高经济价值为218万元。

exitflag=1表示过程正常收敛于解x处。

磁盘中本问题的M文件为opt22_2.m。

[例三]投资问题

某单位有一批资金用于四个工程项目的投资,用于各工程项目时所得到得净收益(投入资金的百分比)如下表所示:

表9-11工程项目收益表

工程项目

A

B

C

D

收益(%)

15

10

8

12

由于某种原因,决定用于项目A的投资不大于其它各项投资之和;

而用于项目B和C的投资要大于项目D的投资。

试确定使该单位收益最大的投资分配方案。

用x1、x2、x3和x4分别代表用于项目A、B、C和D的投资百分数,由于各项目的投资百分数之和必须等于100%,所以

x1+x2+x3+x4=1

据题意,可以建立下面的数学模型:

将它转换为标准形式:

然后进行求解:

f=[-0.15;

-0.1;

-0.08;

-0.12];

A=[1-1-1-1

0-1-11];

b=[0;

0];

Aeq=[1111];

beq=[1];

lb=zeros(4,1);

[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb);

0.2500

0.0000

fval

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2