第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx

上传人:聆听****声音 文档编号:735228 上传时间:2023-04-29 格式:DOCX 页数:28 大小:65.04KB
下载 相关 举报
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第1页
第1页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第2页
第2页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第3页
第3页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第4页
第4页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第5页
第5页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第6页
第6页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第7页
第7页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第8页
第8页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第9页
第9页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第10页
第10页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第11页
第11页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第12页
第12页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第13页
第13页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第14页
第14页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第15页
第15页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第16页
第16页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第17页
第17页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第18页
第18页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第19页
第19页 / 共28页
第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx

《第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx》由会员分享,可在线阅读,更多相关《第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx(28页珍藏版)》请在冰点文库上搜索。

第10章__Matlab在最优化问题中的应用2014-7-1 8.14.2.docx

第10章 Matlab在最优化问题中的应用

优化理论是一门实践性很强的学科,广泛应用于生产管理、军事指挥和科学试验等各种领域,Matlab优化工具箱提供了对各种优化问题的一个完整的解决方案。

在数学上,所谓优化问题,就是求解如下形式的最优解:

Min fun(x)

Sub.to [C.E.]

[B.C.]

其中fun(x)称为目标函数,“Sub.to”为“subjectto”的缩写,由其引导的部分称为约束条件。

[C.E.]表示ConditionEquations,即条件方程,可为等式方程,也可为不等式方程。

[B.C.]表示BoundaryConditions,即边界条件,用来约束自变量的求解域,以lb≤x≤ub的形式给出。

当[C.E.]为空时,此优化问题称为自由优化或无约束优化问题;当[C.E.]不空时,称为有约束优化或强约束优化问题。

在优化问题中,根据变量、目标函数和约束函数的不同,可以将问题大致分为:

·线性优化 目标函数和约束函数均为线性函数。

·二次优化 目标函数为二次函数,而约束条件为线性方程。

线性优化和二次优化统称为简单优化。

·非线性优化 目标函数为非二次的非线性函数,或约束条件为非线性方程。

·多目标优化 目标函数并非一个时,称为多目标优化问题。

本章将对以上几类优化问题在Matlab中的实现作比较详细的讲解。

另外还将介绍两个利用优化方法解非线性方程的函数。

通过本章的介绍,用户可以不必掌握艰涩的各种优化算法而轻易地解决一些常用的最优化问题了。

10.1线性规划问题

线性规划问题即目标函数和约束条件均为线性函数的问题。

其标准形式为:

min C’x

sub.To Ax=b

x≥0

其中C,b,0∈Rn,A∈Rm´n,均为数值矩阵,x∈Rn。

若目标函数为:

max C’x,则转换成:

min –C’x。

标准形式的线性规划问题简称为LP(LinearProgramming)问题。

其它形式的线性规划问题经过适当的变换均可以化为此种标准形。

线性规划问题虽然简单,但在工农业及其他生产部门中应用十分广泛。

在Matlab中,线性规划问题由linprog函数求解。

函数:

linprog %求解如下形式的线性规划问题:

minfTx

x

153

suchthat

A×x£b

Aeq×x=beqlb£x£ub

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

格式:

x=linprog(f,A,b)

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,fval,exitflag]=linprog(...)返回exitflag值,描述函数计算的退出条件。

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

[x,fval,exitflag,output,lambda]=linprog(...)将解x处的Lagrange乘子返回到lambda参

数中。

exitflag参数

描述退出条件:

·>0 表示目标函数收敛于解x处;

·=0 表示已经达到函数评价或迭代的最大次数;

·<0 表示目标函数不收敛。

output参数

该参数包含下列优化信息:

·output.iterations 迭代次数;

·output.cgiterations PCG迭代次数(只适用于大型规划问题);

·output.algorithm 所采用的算法。

lambda参数

该参数是解x处的Lagrange乘子。

它有以下一些属性:

·lambda.lower—lambda的下界;

·lambda.upper—lambda的上界;

·lambda.ineqlin—lambda的线性不等式;

·lambda.eqlin—lambda的线性等式。

例10-1求解下列优化问题:

minsub.to

f(x)=-5x1-4x2-6x3

x1-x2+x3£20

3x1+2x2+4x3£42

3x1+2x2£30

0£x1,

解:

在Matlab命令窗口键入:

>>f=[-5;-4;-6];

>>A=[1-11;324;320];

>>b=[20;42;30];

>>lb=zeros(3,1);

0£x2,

0£x3

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

x=

0.0000

15.0000

3.0000

fval=

-78.0000

exitflag=

1

output=

iterations:

6

cgiterations:

0algorithm:

'lipsol'

lambda=

ineqlin:

[3x1double]eqlin:

[0x1double]upper:

[3x1double]lower:

[3x1double]

>>lambda.ineqlinans=

0.0000

1.5000

0.5000

>>lambda.lowerans=

1.0000

0.0000

0.0000

lambda向量中的非零元素表示哪些约束是主动约束。

本例中,第2个和第3个不等式约束,第1个下界约束是主动约束(如这些解位于约束边界上)。

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

例10-2生产决策问题。

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

产品乙需资源A2吨,资源B6m3;资源C7个单位。

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

解:

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

由题意可以建立下面的数学

模型:

max

sub.to

z=7x1+5x2

3x1+2x2£90

4x1+6x2£200

7x2£210

x1³0, x2³0

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

在Matlab中实现:

>>f=[-7;-5];

>>A=[32;46;07];

>>b=[90;200;210];

>>lb=[0;0];

min

z=-7x1-5x2

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

x=

14.0000

24.0000

fval=

-218.0000

exitflag=

1

output=

iterations:

5

cgiterations:

0algorithm:

'lipsol'

lambda=

ineqlin:

[3x1double]eqlin:

[0x1double]upper:

[2x1double]lower:

[2x1double]

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

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

例10-3厂址选择问题。

考虑A、B、C三地,每地都出产一定数量的原料也消耗一定数量的产品(见下表)。

已知制成每吨产品需3吨原料,各地之间的距离为:

A—B:

150km,A—C:

100km,B—

C:

200km。

假定每万吨原料运输1km的运价是5000元,每万吨产品运输1km的运价是

6000元。

由于地区条件的差异,在不同地点设厂的生产费用也不同。

问究竟在哪些地方设厂,规模多大,才能使总费用最小?

另外,由于其它条件限制,在B处建厂的规模(生产的产品数量)不能超过5万吨。

地点

年产原料(万吨)

年销产品(万吨)

生产费用(万元/万吨)

A

20

7

150

B

16

13

120

C

24

0

100

A、B、C三地出产原料、消耗产品情况表

解:

令xij为由i地运到j地的原料数量(万吨),yij为由i地运到j地的产品数量(万吨),i,j = 1,2,3(分别对应A、B、C三地)。

根据题意,可以建立问题的数学模型

(其中目标函数包括原料运输费、产品运输费和生产费用(万元)):

min

z=75x12+75x21+50x13+50x31+100x23+100x32+150y11+240y12+210y21

+120y22+160y31+220y32

sub.to3y11+3y12+x12+x13-x21-x31£203y21+3y22-x12+x21+x23-x32£16

3y31+3y32-x13-x23+x31+x32£24

y11+y21+y31=7

y12+y22+y32=13

y21+y22£5

xij³0,i,j=1,2,3;i¹j

yij³0,i=1,2,3;

在Matlab中实现:

j=1,2

>>f=[75;75;50;50;100;100;150;240;210;120;160;220];

>>A=[1-11-100330000

-11001-1003300

00-11-11000033

000000001100];

>>b=[20;16;24;5];

>>Aeq=[000000101010

000000010101];

>>beq=[7;13];

>>lb=zeros(12,1);

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

Optimizationterminatedsuccessfully.x=

0.0000

1.0000

0.0000

0.0000

0.0000

0.0000

7.0000

0.0000

0.0000

5.0000

0.0000

8.0000

fval=

3.4850e+003

exitflag=

1

output=

iterations:

8

cgiterations:

0algorithm:

'lipsol'

lambda=

ineqlin:

[4x1double]eqlin:

[2x1double]upper:

[12x1double]lower:

[12x1double]

因此,要使总费用最小,需要B地向A地运送1万吨原料,A、B、C三地的建厂规模分别为7万吨、5万吨、8万吨。

最小总费用为3485万元。

10.2非线性规划问题

10.2.1非线性无约束规划问题

无约束规划由3个功能函数fminbnd、fminsearch、fminunc实现。

10.2.1.1fminbnd函数

函数:

fminbnd

功能:

求取固定区间内单变量函数的最小值,也就是一元函数最小值问题。

数学模型:

minf(x)

x

x1

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

格式:

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(...)返回包含优化信息的结构输出。

·fun:

需要最小化的目标函数。

fun函数需要输入标量参数x,返回x处的目标函数标量值f。

可以将fun函数指定为命令行,如

x=fminbnd(inline(‘sin(x*x)’),x0)

同样,fun参数可以是一个包含函数名的字符串。

对应的函数可以是M文件、内部函数或MEX文件。

若fun=‘myfun’,则

x=fminbnd(@myfun,x0)

其中M文件函数myfun.m必须为下面的形式

functionf=myfun(x)

f=… %计算x处的函数值。

·options:

优化参数选项。

你可以用optimset函数设置或改变这些参数的值。

Options参数有以下几个选项:

·Display 显示的水平。

选择’off’,不显示输出;选择’iter’,显示每一步迭代过程的输出;选择’final’,显示最终结果;

·MaxFunEvals 函数评价的最大允许次数;

·MaxIter 最大允许迭代次数;

·TolX x处的终止容限。

·exitflag:

描述退出条件:

·>0 表示目标函数收敛于解x处;

·0 表示已经达到函数评价或迭代的最大次数;

·<0 表示目标函数不收敛。

·output:

该参数包含下列优化信息:

·output.iteratiions 迭代次数;

·output.algorithm 所采用的算法;

·output.funcCount 函数评价次数。

注意:

(1)目标函数必须是连续的;

(2)fminbnd函数可能只给出局部最优解;

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

此时,

fmincon函数的计算速度更快,计算精度更高;

(4)fminbnd函数只用于实数变量。

例10-4在(0,2p)上求函数sinx的最小值。

解:

Matlab中实现:

>>[x,y_min]=fminbnd('sin(x)',0,2*pi)

x=

4.7124

y_min=

-1.0000

>> [x,y_min]=fminbnd(@sin,0,2*pi)x=

4.7124

y_min=

-1.0000

例10-5 对边长为3m的正方形铁板,在四个角处剪去相等的小正方形以制成方形无盖盒子,问如何剪法使盒子容积最大?

解:

设剪去的正方形的边长为x,则盒子容积为

f(x)=(3-2x)2x

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

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

在Matlab中实现:

>>[x,f_min]=fminbnd('-(3-2*x)^2*x',0,1.5)x=

0.5000

f_min=

-2.0000

或编写M文件Ex1005.m

>>[x,f_min]=fminbnd(@Ex1005,0,1.5)x=

0.5000

f_min=

-2.0000

即剪去边长为0.5m的正方形,最大容积为2m3。

10.2.1.2fminsearch函数

函数:

fminsearch

功能:

求解多变量无约束函数的最小值。

数学模型:

minf(x)

x

其中,x为向量,f(x)为一函数,返回标量。

格式:

x=fminsearch(fun,x0)

x=fminsearch(fun,x0,options)

x=fminsearch(fun,x0,options,P1,P2,...)[x,fval]=fminsearch(...)[x,fval,exitflag]=fminsearch(...)[x,fval,exitflag,output]=fminsearch(...)

说明:

fminsearch求解多变量无约束函数的最小值。

该函数常用于无约束非线性最优化问题。

x=fminsearch(fun,x0)初值为x0,求fun函数的局部极小点x。

x0可以是标量、向量或矩阵。

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

x=fminsearch(fun,x0,options,P1,P2,...)将问题参数P1、P2等直接输给目标函数fun,将options参数设置为空矩阵,作为options参数的默认值。

[x,fval]=fminsearch(...)将x处的目标函数值返回到fval参数中。

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

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

各变量的意义同前及下面fminunc函数。

注意:

(1)应用fminsearch函数可能会得到局部最优解;

(2)fminsearch函数只对实数进行最小化,即x必须由实数组成,f(x)函数必须返回实数。

如果x为复数,则必须将它分为实数部和虚数部两部分;

(3)对于求解二次以上的问题,fminunc函数比fminsearch函数有效,但对于高度非线性不连续问题时,fminsearch函数更具稳键性。

(4)fminsearch函数不适合求解平方和问题,用lsqnonlin函数更好一些。

1 12 12 2

例10-6求2x3+4xx3-10xx+x2的最小值。

解:

在Matlab中实现如下:

>>f='2*x

(1)^3+4*x

(1)*x

(2)^3-10*x

(1)*x

(2)+x

(2)^2';

>>x0=[0,0];

>>[x,f_min]=fminsearch(f,x0)x=

1.0016 0.8335

f_min=

-3.3241

或在Matlab编辑器中编辑M文件Ex1006.m:

functionf=Ex1006(x)

f=2*x

(1)^3+4*x

(1)*x

(2)^3-10*x

(1)*x

(2)+x

(2)^2;x0=[0,0];

命令窗口运行:

>>[x,f_min]=fminsearch(@Ex1006,x0)x=

1.0016 0.8335

f_min=

-3.3241

运行后结果一致。

10.2.1.3fminunc函数

函数:

fminunc

功能:

求多变量无约束函数的最小值。

数学模型:

minf(x)

x

其中,x为向量,f(x)为一函数,返回标量。

格式:

x=fminunc(fun,x0)

x=fminunc(fun,x0,options)

x=fminunc(fun,x0,options,P1,P2,...)[x,fval]=fminunc(...)[x,fval,exitflag]=fminunc(...)[x,fval,exitflag,output]=fminunc(...)

[x,fval,exitflag,output,grad]=fminunc(...)[x,fval,exitflag,output,grad,hessian]=fminunc(...)

说明:

fminunc给定初值,求多变量标量函数的最小值。

常用于无约束非线性最优化问题。

x=fminunc(fun,x0)给定初值x0,求fun函数的局部极小点x。

x0可以是标量、向量或矩阵。

x=fminunc(fun,x0,options)用options参

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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