Matlab在最优化问题中的应用Word文件下载.docx

上传人:b****6 文档编号:17041723 上传时间:2022-11-28 格式:DOCX 页数:48 大小:159.01KB
下载 相关 举报
Matlab在最优化问题中的应用Word文件下载.docx_第1页
第1页 / 共48页
Matlab在最优化问题中的应用Word文件下载.docx_第2页
第2页 / 共48页
Matlab在最优化问题中的应用Word文件下载.docx_第3页
第3页 / 共48页
Matlab在最优化问题中的应用Word文件下载.docx_第4页
第4页 / 共48页
Matlab在最优化问题中的应用Word文件下载.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

Matlab在最优化问题中的应用Word文件下载.docx

《Matlab在最优化问题中的应用Word文件下载.docx》由会员分享,可在线阅读,更多相关《Matlab在最优化问题中的应用Word文件下载.docx(48页珍藏版)》请在冰豆网上搜索。

Matlab在最优化问题中的应用Word文件下载.docx

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

suchthat

其中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.cgiterationsPCG迭代次数(只适用于大型规划问题);

output.algorithm所采用的算法。

lambda参数

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

它有以下一些属性:

lambda.lower—lambda的下界;

lambda.upper—lambda的上界;

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

lambda.eqlin—lambda的线性等式。

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

min

sub.to

解:

在Matlab命令窗口键入:

f=[-5;

-4;

-6];

A=[1-11;

324;

320];

b=[20;

42;

30];

lb=zeros(3,1);

[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:

0

algorithm:

'

lipsol'

lambda=

ineqlin:

[3x1double]

eqlin:

[0x1double]

upper:

lower:

lambda.ineqlin

ans=

1.5000

0.5000

lambda.lower

1.0000

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

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

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

例10-2生产决策问题。

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

制成一吨产品乙需资源A2吨,资源B6m3;

资源C7个单位。

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

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

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

sub.to

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

在Matlab中实现:

f=[-7;

-5];

A=[32;

46;

07];

b=[90;

200;

210];

lb=[0;

0];

14.0000

24.0000

-218.0000

5

[2x1double]

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

例10-3厂址选择问题。

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

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

A—B:

150km,A—C:

100km,B—C:

200km。

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

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

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

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

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

地点

年产原料(万吨)

年销产品(万吨)

生产费用(万元/万吨)

A

20

7

150

B

16

13

120

C

24

100

为由i地运到j地的原料数量(万吨),

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

根据题意,可以建立问题的数学模型(其中目标函数包括原料运输费、产品运输费和生产费用(万元)):

在Matlab中实现:

f=[75;

75;

50;

100;

150;

240;

210;

120;

160;

220];

A=[1-11-100330000

-11001-1003300

00-11-11000033

000000001100];

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)

7.0000

5.0000

8.0000

3.4850e+003

8

[4x1double]

[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

功能:

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

数学模型:

式中,

为标量,

为函数,返回标量。

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最大允许迭代次数;

TolXx处的终止容限。

exitflag:

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

output:

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

output.iteratiions迭代次数;

output.algorithm所采用的算法;

output.funcCount函数评价次数。

注意:

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

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

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

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

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

例10-4在(0,

上求函数sinx的最小值。

Matlab中实现:

[x,y_min]=fminbnd('

sin(x)'

0,2*pi)

4.7124

y_min=

-1.0000

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

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

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

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

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

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

[x,f_min]=fminbnd('

-(3-2*x)^2*x'

0,1.5)

f_min=

-2.0000

或编写M文件Ex1005.m

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

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

10.2.1.2fminsearch函数

fminsearch

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

其中,

为向量,

为一函数,返回标量。

格式:

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函数更好一些。

例10-6求2x13+4x1x23-10x1x2+x22的最小值。

在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)

1.00160.8335

-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)

运行后结果一致。

10.2.1.3fminunc函数

fminunc

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

格式:

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。

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

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

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

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

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

[x,fval,exitflag,output,grad]=fminunc(...)将解x处fun函数的梯度值返回到grad参数中。

[x,fval,exitflag,output,grad,hessian]=fminunc(...)将解x处目标函数的Hessian矩阵信息返回到hessian参数中。

fun变量:

为目标函数。

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

x=fminunc(inline('

norm(x)^2'

),x0)

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

若fun=‘myfun’,则

x=fminunc(@myfun,x0)

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

functionf=myfun(x)

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

若fun函数的梯度可以算得,且options.GradObj设为’on’(用下式设定)

options=optimset(‘GradObj’,‘on’)

则fun函数必须返回解x处的梯度向量g到第二个输出变量中去。

注意,当被调用的fun函数只需要一个输出变量时(如算法只需要目标函数的值而不需要其梯度值时),可以通过核对nargout的值来避免计算梯度值

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

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1