MATLAB论文 1245322罗慧彪.docx
- 文档编号:9578286
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:19
- 大小:31.94KB
MATLAB论文 1245322罗慧彪.docx
《MATLAB论文 1245322罗慧彪.docx》由会员分享,可在线阅读,更多相关《MATLAB论文 1245322罗慧彪.docx(19页珍藏版)》请在冰豆网上搜索。
MATLAB论文1245322罗慧彪
《MATLAB》课程论文
MATLAB
在最优化问题中的应用
姓名:
罗慧彪
学号:
12010245322
专业:
10级电子信息班
学院:
物理电气信息学院
指导老师:
汤全武
完成日期:
2011年12月27日
MATLAB在最优化问题中的应用
(罗慧彪120102453222010级电子信息班)
【摘要】MATLAB是当今最优秀的科技应用软件之一,它以强大的科学计算与视化功能、简单易用、开放式的可扩展环境。
MATLAB具有其他高级语言难以比拟的一些优点,编写简单,变成效率高,易学易懂,因此MATLAB语言也被通俗地称为演算纸式的科学算法语言。
【关键字】MATLAB软件简洁优化问题
一、问题的提出
MATLAB具有强大的数学运算能力、方便实用的绘图功能及语言的高度集成性。
MATLAB软件已成为在最优化领域应用最广的软件之一。
将MATLAB应用到解决最优化问题的模块中学习,利用客观、视图、计算等功能对最优化问题模块做出最简洁有效的解答,从而使我们有利的应用MATLAB对很多比较困难的优化问题进一步的理解。
应用MATLAB可以使最优化问题的知识简单明了。
2、在无约束优化问题中的应用
(一)、相关函数:
fminunc函数
(二)、功能:
求多变量无约束函数的最小值。
(三)、数学模型:
其中,x为一向量,f(x)为一函数,返回标量。
(四)、语法格式:
1.x=fminunc(fun,x0)
2.x=fminunc(fun,x0,options)
3.x=fminunc(fun,x0,options,P1,P2,...)
4.[x,fval]=fminunc(...)
5.[x,fval,exitflag]=fminunc(...)
6.[x,fval,exitflag,output]=fminunc(...)
7.[x,fval,exitflag,output,grad]=fminunc(...)
8.[x,fval,exitflag,output,grad,hessian]=fminunc(...)
(五)、描述:
1.fminunc给定初值,求多变量标量函数的最小值。
常用于无约束非线性最优化问题。
2.x=fminunc(fun,x0)给定初值x0,求fun函数的局部极小点x。
x0可以是标量、向量或矩阵。
3.x=fminunc(fun,x0,options)用options参数中指定的优化参数进行最小化。
4.x=fminunc(fun,x0,options,P1,P2,...)将问题参数p1、p2等直接输给目标函数fun,将options参数设置为空矩阵,作为options参数的缺省值。
5.[x,fval]=fminunc(...)将解x处目标函数的值返回到fval参数中。
6.[x,fval,exitflag]=fminunc(...)返回exitflag值,描述函数的输出条件。
7.[x,fval,exitflag,output]=fminunc(...)返回包含优化信息的结构输出。
8.[x,fval,exitflag,output,grad]=fminunc(...)将解x处fun函数的梯度值返回到grad参数中。
9.[x,fval,exitflag,output,grad,hessian]=fminunc(...)将解x处目标函数的Hessian矩阵信息返回到hessian参数中。
问题一:
求解下列优化问题
首先编写一个M文件,返回x处的函数值opt25_1o.m。
functionf=myfun(x)
f=-x
(1)*x
(2)*x(3);
然后将约束条件改写成下面形式的不等式
因为两个约束条件都是线性的,将它们表达为矩阵不等式的形式,其中,
下一步给定初值,并调用优化过程
x0=[10;10;10];%初值
A=[-1–2–2122];%定义一个矩阵
b=[0;72];
[x,fval]=fmincon(opt25_1o,x0,A,b)%将目标值返回到fval中
经过66次函数评价以后,得到问题的解为:
x=
24.0000
12.0000
12.0000
函数值为:
fval=
-3.4560e+03
而且线性不等式约束的值<=0
A*x-b=
-72
0
磁盘中本问题的M文件为opt25_1.m。
三,在求最大最小化中的应用
(一)、fminimax函数
(二)、功能:
求解最大最小化问题。
(三)、语法:
1.x=fminimax(fun,x0)
2.x=fminimax(fun,x0,A,b)
3.x=fminimax(fun,x0,A,b,Aeq,beq)
4.x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub)
5.x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
6.x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
7.x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...)
8.[x,fval]=fminimax(...)
9.[x,fval,maxfval]=fminimax(...)
10.[x,fval,maxfval,exitflag]=fminimax(...)
11.[x,fval,maxfval,exitflag,output]=fminimax(...)
12.[x,fval,maxfval,exitflag,output,lambda]=fminimax(...)
(四)、描述:
1.fminimax使多目标函数中的最坏情况达到最小化。
给定初值估计,该值必须服从一定的约束条件。
2.x=fminimax(fun,x0)初值为x0,找到fun函数的最大最小化解x。
3.x=fminimax(fun,x0,A,b)给定线性不等式A*x<=b,求解最大最小化问题。
4.x=fminimax(fun,x,A,b,Aeq,beq)给定线性等式,Aeq*x=beq,求解最大最小化问题。
如果没有不等式存在,设置A=[]、b=[]。
5.x=fminimax(fun,x,A,b,Aeq,beq,lb,ub)为设计变量定义一系列下限lb和上限ub,使得总有lb<=x<=ub。
6.x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)在nonlcon参数中给定非线性不等式约束c(x)或等式约束ceq(x),fminimax函数要求c(x)<=0且ceq(x)=0。
若没有边界存在,设置lb=[]和(或)ub=[]。
7.x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)用options给定的参数进行优化。
8.x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...)将问题参数P1,P2等直接传递给函数fun和nonlcon。
如果不需要变量A,b,Aeq,beq,lb,ub,nonlcon和options将它们设置为空矩阵。
9.[x,fval]=fminimax(...)返回解x处的目标函数值。
10.[x,fval,maxfval]=fminimax(...)返回解x处的最大函数值。
11.[x,fval,maxfval,exitflag]=fminimax(...)返回exitflag参数,描述函数计算的退出条件。
12.[x,fval,maxfval,exitflag,output]=fminimax(...)返回描述优化信息的结构输出output参数。
13.[x,fval,maxfval,exitflag,output,lambda]=fminimax(...)返回包含解x处拉格朗日乘子的lambda参数。
问题二:
假设某种商品的需求量Q是单价p(单位:
元)的函数
,商品的总成本c是需求量Q的函数
.每单位商品需要纳税2元,试求:
使销售利润达到最大的商品单价和最大利润额.
分析:
用传统方法解决此问题需要列出传统的方程,解题过程繁琐,容易出错。
现在我们利用MATLAB语言对此题做出解答:
利用MATLAB求解的过程:
symspq%定义符号变量
L=((12000-q)/80)*q-(25000+50*q)-2*q;%总收入函数
dL=diff(L);%边际函数
dL=-1/40*q+98;%边际函数
Pq=solve(dL);%dL函数的驻点
dL2=diff(dL);%边际函数
dL2=-1/40;%边际函数
P1=solve(12000-80*p-3920);%价格
L0=((12000-Pq)/80)*Pq-(25000+50*Pq)-2*Pq;%最大利润
P1;
L0;
运算结果为:
dL=
-1/40*q+98
dL=
-1/40*q+98
Pq=
3920
dL2=
-1/40
dL2=
-0.0250
P1=
101
L0=
167080
P1=
101
L0=
167080
结论:
当商品价格P为101元时达最大利润,最大利润为167080元。
问题三:
某厂生产甲乙两种产品,已知制成一吨产品甲需用资源A3吨,资源B4m3;制成一吨产品乙需用资源A2吨,资源B6m3,资源C7个单位。
若一吨产品甲和乙的经济价值分别为7万元和5万元,三种资源的限制量分别为90吨、200m3和210个单位,试决定应生产这两种产品各多少吨才能使创造的总经济价值最高?
令生产产品甲的数量为x1,生产产品乙的数量为x2。
由题意可以建立下面的模型:
该模型中要求目标函数最大化,需要按照Matlab的要求进行转换,即目标函数为
首先输入下列系数:
f=[-7;-5];%输入单位变量
A=[324607];%将个单位数命名为矩阵
b=[90;200;210];%个单位制量定义一个矩阵
lb=zeros(2,1);%定义一个全零矩阵
然后调用linprog函数:
[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb)%将解x处的拉格朗日乘子返回到lambda参数中。
x=
14.0000
24.0000
fval=
-218.0000
exitflag=
1
output=
iterations:
5
cgiterations:
0
algorithm:
'lipsol'
lambda=
ineqlin:
[3x1double]
eqlin:
[0x1double]
upper:
[2x1double]
lower:
[2x1double]
由上可知,生产甲种产品14吨、乙种产品24吨可使创建的总经济价值最高。
最高经济价值为218万元。
exitflag=1表示过程正常收敛于解x处。
磁盘中本问题的M文件为opt22_2.m。
问题四:
已知有一梯形截面管道,其参数如下:
底边长度是c,高度是h,斜边与底边的夹角是θ,横截面积是A=64516mm2,如图1管道内的液体的流速与管道截面的周长s的倒数成正比关系。
试按照使流速最大确定该管道的参数。
图1梯形截面管道
建立优化设计的数学模型:
管道截面的周长:
s=c+2h/sinθ
由管道横截面面积:
A=ch+h2cotθ=64516
得到底边长度的关系式(与h和θ相关):
c=(64516-h2cotθ)/h=64516/h-hcotθ
将上式代入管道横截面周长的计算式中,得到
s=64516/h-hcotθ+2h/sinθ=64516/h-h/tanθ+2h/sinθ
因此,取与管道截面周长有关的独立参数h和θ作为设计变量,即:
X=[x1;x2]=[h;θ]
为使液体流速最大,取管道截面周长最小作为目标函数,即
Minf(X)=64516/x1-x1/tanx2+2x1//sinx2
这是一个二维无约束非线性优化问题。
(1)建立目标函数文件fmin.m
functionf=fminx(x)%定义求解最大变量值
a=64516;%定义横截面积A
f=a/x
(1)-x
(1)/tan(x
(2)*pi/180)+2*x
(1)/sin(x
(2)*pi/180);%定义目标函数f
(2)调用fminsearch函数求解
x0=[25;45];%定义设计变量h和θ
[x,fval]=fminsearch(‘fminx’,x0)%调用函数
程序运行后得到优化结果:
x=
192.9982
60.0000
fval=
668.5656
结论:
梯形的截面高度h=192.9982,梯形截面斜边与底边的夹角θ=60o,梯形截
问题五:
一辆公共汽车能容纳60人,租用该辆车每次旅行乘客人数x和支付的费用p(元)之间的关系由法则
2给出.写出公共汽车公司得到的每次旅行的总收入r(x)的表达式,使边界收入
等于零的每次旅行的人数为多少?
相应的费用为多少?
(这个费用是使收入最大的费用,所以公共汽车公司或许应重新考虑其政策)。
建立优化设计的数学模型:
载客人数x与支付费用的关系式:
20≤x≤60
编写MATLAB程序如下:
symsxr%定义符号变量
r=x*(3-(x/40))^2;%总收入函数
dr1=diff(r);%边际函数
dr1=(3-1/40*x)^2-1/20*x*(3-1/40*x);%定义目标函数
pr=solve(dr1);%边际函数dr1的驻点
x=pr;%赋值
dr2=diff(dr1);%总收入函数的二阶导数
dr2=-3/10+3/800*x;%定义目标函数
dr2
程序运行后得到优化结果为:
dr1=
(3-1/40*x)^2-1/20*x*(3-1/40*x)
Pr=
[40]
[120]
dr2=
-3/10+3/800*x
dr2=
[-3/20]
[3/20]
结论:
当人数为40的时候dr2小雨零取得最大值可采用,此时乘客所支付的费用为4元;当人数为120的时候dr2大于零不符合要求。
问题六:
在某建筑工程施工中需要制作10000套钢筋,每套钢筋由2.9m、2.1m和1.5m三种不同长度的钢筋各一根组成,它们的直径和材质不同。
目前在市场上采购到的同类钢筋的长度每根均为7.4m,问应购进多少根7.4m长的钢筋才能满足工程的需要?
首先分析共有多少种不同的套裁方法,该问题的可能材料方案如表9-13所示。
表1材料方案表
下料长度
(m)
裁料方案编号i
1
2
3
4
5
6
7
8
2.9
2
1
1
1
0
0
0
0
2.1
0
2
1
0
3
2
1
0
1.5
1
0
1
3
0
2
3
4
料头长度
(m)
0.1
0.3
0.9
0
1.1
0.2
0.8
1.4
设以xi(i=1,2,…,8)表示按第i种裁料方案下料的原材料数量,则可得该问题的数学模型为:
首先输入下列系数:
f=[1;1;1;1;1;1;1;1];%输入单位变量
Aeq=[20000000
02103210
10130234];%定义变量矩阵
beq=[100001000010000];%限制变量
lb=zeros(8,1);%定义一个零矩阵
然后调用linprog函数:
[x,fval,exitflag,output,lambda]=linprog(f,[],[],Aeq,beq,lb);%返回包含解x处拉格朗日乘子的lambda参数
运行结果为:
x=
1.0e+003*
5.0000
0.0000
0.0000
0.0000
1.6667
2.5000
0.0000
0.0000
fval=
9.1667e+003
所以最节省的情况需要9167根7.4m长的钢筋,其中第一种方案使用5000,第五种方案使用1667根,第六种方案使用2500根。
磁盘中本问题的M文件为opt22_5.m。
四、解决线性优化问题
在Matlab中,线性规划问题由linprog函数求解。
(一)、相关函数:
linprog函数
(二)、功能:
求解线性规划问题。
(三)、数学模型:
其中f,x,b,beq,lb和ub为向量,A和Aeq为矩阵。
(四)、语法:
1.x=linprog(f,A,b,Aeq,beq)
2.x=linprog(f,A,b,Aeq,beq,lb,ub)
3.x=linprog(f,A,b,Aeq,beq,lb,ub,x0)
4.x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
5.[x,fval]=linprog(...)
6.[x,fval,exitflag]=linprog(...)
7.[x,fval,exitflag,output]=linprog(...)
8.[x,fval,exitflag,output,lambda]=linprog(...)
(五)、描述:
1.x=linprog(f,A,b)求解问题minf'*x,约束条件为A*x<=b。
2.x=linprog(f,A,b,Aeq,beq)求解上面的问题,但增加等式约束,即Aeq*x=b若没有不等式存在,则令A=[]、b=[]。
3.x=linprog(f,A,b,Aeq,beq,lb,ub)定义设计变量x的下界lb和上界ub,使得x始终在该范围内。
若没有等式约束,令Aeq=[]、beq=[]。
4.x=linprog(f,A,b,Aeq,beq,lb,ub,x0)设置初值为x0。
该选项只适用于中型问题,缺省时大型算法将忽略初值。
5.x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)用options指定的优化参数进行最小化。
6.[x,fval]=linprog(...)返回解x处的目标函数值fval。
7.[x,lambda,exitflag]=linprog(...)返回exitflag值,描述函数计算的退出条件。
8.[x,lambda,exitflag,output]=linprog(...)返回包含优化信息的输出变量output。
9.[x,fval,exitflag,output,lambda]=linprog(...)将解x处的拉格朗日乘子返回到lambda参数中。
(六)、变量:
exitflag参数
描述退出条件:
>0表示目标函数收敛于x处:
=0表示已经到达函数评价或迭代的最大次数:
<0表示目标函数不收敛。
output参数
该参数包含下列优化信息:
output.iterations迭代次数:
output.cgiterationsPPG迭代次数(只适用于大型规划问题):
output.algorithm所采用的算法。
lambda参数
lambda参数是解x处的拉格朗日乘子。
它有以下一些属性:
l lambda.lower–lambda的下界。
l lambda.upper–lambda的上界。
l lambda.ineqlin–lambda的线性不等式。
l lambda.eqlin–lambda的线性等式。
其它参数意义同前。
问题七:
某车间有两台机床甲和乙,可用于加工三种工件。
假定这两台机床的可用台时数分别为700和800,三种工件的数量分别为300、500和400,且已知用三种不同机床加工单位数量的不同工件所需的台时数和加工费用(如表所示),问怎样分配机床的加工任务,才能既满足加工工件的要求,又使总加工费用最低?
表2机床加工情况表
机床类型
单位工作所需加工台时数
单位工件的加工费用
可用
台时数
工件1
工件2
工件3
工件1
工件2
工件3
甲
0.4
1.1
1.0
13
9
10
700
乙
0.5
1.2
1.3
11
12
8
800
设在甲机床上加工工件1、2和3的数量分别为x1、x2和x3,在乙机床上加工工件1、2和3的数量分别为x4、x5和x6。
根据三种工种的数量限制,有
x1+x4=300(对工件1)
x2+x5=500(对工件2)
x3+x6=400(对工件3)
再根据机床甲和乙的可用总台时限制,可以得到其它约束条件。
以总加工费用最少为目标函数,组合约束条件,可以得到下面的数学模型:
首先输入下列系数:
f=[13;9;10;11;12;8];%目标函数系数
A=[0.41.11000%约束条件系数
0000.51.21.3];%约束条件系数
b=[700;800];
Aeq=[100100
010010
001001];%输入条件矩阵
beq=[300500400];%工种的数量限制
lb=zeros(6,1);%产生全零矩阵
然后调用linprog函数:
[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb);%将解x处的拉格朗日乘子返回到lambda参数中。
运行结果为:
x=
0.0000
500.0000
0.0000
300.0000
0.0000
400.0000
fval=
1.1000e+004
exitflag=
1
可见,在甲机床上加工500个工件2,在乙机床上加工300个工件1、加工400个工件3可在满足条件的情况下使总加工费最小。
最小费用为11000元。
收敛正常。
磁盘中本问题的M文件为opt22_4.m。
问题八:
min-400x1-1000x2-300x3+200x4
-2x2+x3+x4=0;
2x1+3x2≤16;
3x1+4x2≤24;
x1,x1,x3,x4≥0;x3≤5;
编写MATLAB程序如下:
c=[-400,-1000,-300,200];%目标函数系数
A=[0,-2,1,1;2,3,0,0;3,4,0,0];%约束条件系数
b=[0;16;24];%约束条件系数
xLB=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB论文 1245322罗慧彪 MATLAB 论文 1245322 罗慧彪