Matlab优化工具箱简介.ppt

上传人:小飞机 文档编号:5438939 上传时间:2023-07-07 格式:PPT 页数:61 大小:341.99KB
返回 下载 相关 举报
Matlab优化工具箱简介.ppt_第1页
第1页 / 共61页
Matlab优化工具箱简介.ppt_第2页
第2页 / 共61页
Matlab优化工具箱简介.ppt_第3页
第3页 / 共61页
Matlab优化工具箱简介.ppt_第4页
第4页 / 共61页
Matlab优化工具箱简介.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《Matlab优化工具箱简介.ppt》由会员分享,可在线阅读,更多相关《Matlab优化工具箱简介.ppt(61页珍藏版)》请在三一办公上搜索。

1、第五讲 Matlab优化工具箱简介-optimization toobox,1.线性优化2.非线性优化3.极小化极大(Minmax)问题4.曲线拟合与插值,线性规划问题是目标函数和约束条件均为线性函数的问题,MATLAB7.0解决的线性规划问题的标准形式为 min sub.to:其中f、x、b、beq、lb、ub为向量,A、Aeq为矩阵.其它形式的线性规划问题都可经过适当变换化为此标准形式.在MATLAB5.x以上版中,线性规划问题Linear Programming已用函数linprog取代了MATLAB5.x版中的lp函数.当然,由于版本的向下兼容性,一般说来,低版本中的函数在7.0版中仍

2、可使用.,5.1 线性优化,函数 linprog格式 x=linprog(f,A,b)%求min f*x sub.to 线性规划的最优解.x=linprog(f,A,b,Aeq,beq)%等式约束,若没有不等式约束,则A=,b=.x=linprog(f,A,b,Aeq,beq,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()%返回目标函数最优值,

3、即fval=f*x.x,lambda,exitflag=linprog()%lambda为解x的Lagrange乘子.x,lambda,fval,exitflag=linprog()%exitflag为终止迭代的错误条件.x,fval,lambda,exitflag,output=linprog()%output为关于优化的一些信息.说明:若exitflag0表示函数收敛于解x,exitflag=0表示超过函数估值或迭代的最大次数,exitflag0表示函数不收敛于解x;若lambda=lower 表示下界lb,lambda=upper表示上界ub,lambda=ineqlin表示不等式约束,

4、lambda=eqlin表示等式约束,lambda中的非0元素表示对应的约束是有效约束;output=iterations表示迭代次数,output=algorithm表示使用的运算规则,output=cgiterations表示PCG迭代次数.,例5-1 求下面的优化问题,min,sub.to.,解:f=-5;-4;-6;%写成行向量亦可!A=1-1 1;3 2 4;3 2 0;b=20;42;30;lb=zeros(3,1);x,fval,exitflag,output,lambda=linprog(f,A,b,lb)结果为:x=%最优解 0.0000 15.0000 3.0000fval

5、=%最优值-78.0000exitflag=%收敛 1,output=iterations:6%迭代次数 cgiterations:0 algorithm:lipsol%所使用规则lambda=ineqlin:3x1 double eqlin:0 x1 double upper:3x1 double lower:3x1 double lambda.ineqlinans=0.0000 1.5000 0.5000 lambda.lower,ans=1.0000 0.0000 0.0000表明:不等约束条件2和3以及第1个下界是有效的.,请写出下面线性规划的Matlab程序.,c=-0.4-0.28

6、-0.32-0.72-0.64-0.6;A=0.01 0.01 0.01 0.03 0.03 0.03;0.02 0 0 0.05 0 0;0 0.02 0 0 0.05 0;0 0 0.03 0 0 0.08;b=850;700;100;900;Aeq=;beq=;vlb=0;0;0;0;0;0;vub=;x,fval=linprog(c,A,b,Aeq,beq,vlb,vub),MATLAB求解优化问题的主要函数,优化函数的输入变量,优化函数的输出变量,5.2非线性优化,5.2.1 有约束的一元函数的最小值单变量函数求最小值的标准形式为 sub.to 函数 fminbnd格式 x=fmin

7、bnd(fun,x1,x2)%返回自变量x在区间上函数fun取最小值时x值,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄.x=fminbnd(fun,x1,x2,options)x,fval=fminbnd()x,fval,exitflag=fminbnd()x,fval,exitflag,output=fminbnd(),例5-2 计算下面函数在区间(0,1)内的最小值.,解:x,fval,exitflag,output=fminbnd(x3+cos(x)+x*log(x)/exp(x),0,1)x=0.5223fval=0.3974exitflag=1,output=it

8、erations:9 funcCount:9 algorithm:golden section search,parabolic interpolation,例5-3 在0,5上求下面函数的最小值解:先自定义函数:在MATLAB编辑器中建立M文件为:function f=myfun(x)f=(x-3).2-1;保存为myfun.m,然后在命令窗口键入命令:x=fminbnd(myfun,0,5)则结果显示为:x=3,5.2.2 无约束多元函数最小值多元函数最小值的标准形式为其中:x为向量.命令 利用函数fminsearch求无约束多元函数最小值.函数 fminsearch格式 x=fminse

9、arch(fun,x0)%x0为初始点,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄.x=fminsearch(fun,x0,options)%options查optimset.x,fval=fminsearch()%最优点的函数值.x,fval,exitflag=fminsearch()%exitflag与单变量情形一致.x,fval,exitflag,output=fminsearch()%output与单变量情形一致.,例5-4 求 的最小值点.解:X=fminsearch(2*x(1)3+4*x(1)*x(2)3-10*x(1)*x(2)+x(2)2,0,0)结果为

10、X=1.0016 0.8335或在MATLAB编辑器中建立函数文件.function f=myfun(x)f=2*x(1)3+4*x(1)*x(2)3-10*x(1)*x(2)+x(2)2;保存为myfun.m,在命令窗口键入 X=fminsearch(myfun,0,0)或 X=fminsearch(myfun,0,0)结果为:X=1.0016 0.8335,5.2.3 有约束的多元函数最小值非线性有约束的多元函数的标准形式为:sub.to 其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)是返回向量的函数,f(x)为目标函数,f(x)、C(x)、Ceq(x)可

11、以是非线性函数.在MATLAB5.x中,它的求解由函数constr实现.,函数 fmincon格式 x=fmincon(fun,x0,A,b)x=fmincon(fun,x0,A,b,Aeq,beq)x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub)x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)x,fval=fmincon()x,fval,exitflag=fmincon()x,fval,exitflag,output=fmincon

12、()x,fval,exitflag,output,lambda=fmincon()x,fval,exitflag,output,lambda,grad=fmincon()x,fval,exitflag,output,lambda,grad,hessian=fmincon(),参数说明:fun为目标函数,它可用前面的方法定义;nonlcon的作用是通过接受的向量x来计算非线性不等约束和等式约束分别在x处的估计C和Ceq,通过指定函数柄来使用,如:x=fmincon(myfun,x0,A,b,Aeq,beq,lb,ub,mycon),先建立非线性约束函数,并保存为mycon.m:function

13、C,Ceq=mycon(x)C=%计算x处的非线性不等约束的函数值.Ceq=%计算x处的非线性等式约束的函数值.lambda是Lagrange乘子,它体现哪一个约束有效.output输出优化信息;grad表示目标函数在x处的梯度;hessian表示目标函数在x处的Hessian值.,例5-5 求下面问题在初始点(0,1)处的最优解,min,sub.to,解:约束条件的标准形式为:sub.to 先在MATLAB编辑器中建立非线性约束函数文件:function c,ceq=mycon(x)c=(x(1)-1)2-x(2);ceq=;%无等式约束.,然后,在命令窗口键入如下命令或建立M文件:fun=

14、x(1)2+x(2)2-x(1)*x(2)-2*x(1)-5*x(2);%目标函数.x0=0 1;A=-2 3;%线性不等式约束.b=6;Aeq=;%无线性等式约束.beq=;lb=;%x没有下、上界.ub=;x,fval,exitflag,output,lambda,grad,hessian=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,mycon),则结果为x=3 4fval=-13exitflag=1%解收敛.output=iterations:2 funcCount:9 stepsize:1 algorithm:medium-scale:SQP,Quasi-Newt

15、on,line-search firstorderopt:cgiterations:lambda=lower:2x1 double%x下界有效情况,通过lambda.lower可查看.upper:2x1 double%x上界有效情况,为0表示约束无效.,eqlin:0 x1 double%线性等式约束有效情况,不为0表示约束有效.eqnonlin:0 x1 double%非线性等式约束有效情况.ineqlin:2.5081e-008%线性不等式约束有效情况.neqnonlin:6.1938e-008%非线性不等式约束有效情况.grad=%目标函数在最小值点的梯度.1.0e-006*-0.177

16、6 hessian=%目标函数在最小值点的Hessian值.1.0000-0.0000-0.0000 1.0000,5.2.4 二次规划问题二次规划问题(quadratic programming)的标准形式为:sub.to 其中,H、A、Aeq为矩阵,f、b、beq、lb、ub、x为向量其它形式的二次规划问题都可转化为标准形式.MATLAB5.x版中的qp函数已被6.0版中的函数quadprog取代。,函数 quadprog格式 x=quadprog(H,f,A,b)%其中H,f,A,b为标准形中的参数,x为目标函数的最小值.x=quadprog(H,f,A,b,Aeq,beq)%Aeq,b

17、eq满足等约束条件.x=quadprog(H,f,A,b,Aeq,beq,lb,ub)%lb,ub分别为解x的下界与上界.x=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)%x0为设置的初值x=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)%options为指定的优化参数.x,fval=quadprog()%fval为目标函数最优值.x,fval,exitflag=quadprog()%exitflag与线性规划中参数意义相同.x,fval,exitflag,output=quadprog()%output与线性规划中参数意义相同.x

18、,fval,exitflag,output,lambda=quadprog()%lambda与线性规划中参数意义相同.,例5-6 求二次规划的最优解 max f(x1,x2)=x1x2+3 sub.to x1+x2-2=0解:化成标准形式:sub.to x1+x2=2,在Matlab中实现如下:H=0,-1;-1,0;f=0;0;Aeq=1 1;b=2;x,fval,exitflag,output,lambda=quadprog(H,f,Aeq,b)结果为:x=1.0000 1.0000,fval=-1.0000exitflag=4output=iterations:1 algorithm:l

19、arge-scale:projective preconditioned conjugate gradients f irstorderopt:0 cgiterations:1 message:Optimization terminated:local minimum found;the solution is singular.,lambda=eqlin:1.0000 ineqlin:lower:upper:,5.3 极小化极大(Minmax)问题,sub.to,其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)和F(x)是返回向量的函数,F(x)、C(x)、C

20、eq(x)可以是非线性函数.,函数 fminimax格式 x=fminimax(fun,x0)x=fminimax(fun,x0,A,b)x=fminimax(fun,x0,A,b,Aeq,beq)x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub)x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)x,fval,maxfval=fminimax()x,fval,maxfval,exitflag=fminimax()x,fval,max

21、fval,exitflag,output=fminimax()x,fval,maxfval,exitflag,output,lambda=fminimax(),例5-7 求下列函数最大值的最小化问题其中:,解:先建立目标函数文件,并保存为myfun.m:function f=myfun(x)f(1)=2*x(1)2+x(2)2-48*x(1)-40*x(2)+304;f(2)=-x(1)2-3*x(2)2;f(3)=x(1)+3*x(2)-18;f(4)=-x(1)-x(2);f(5)=x(1)+x(2)-8;然后,在命令窗口键入命令:x0=0.1;0.1;%初始值x,fval=fminima

22、x(myfun,x0)结果为:x=4.0000 4.0000fval=0.0000-64.0000-2.0000-8.0000-0.0000,5.4 曲线拟合与插值,在大量的应用领域中,人们经常面临用一个解析函数描述数据(通常是测量值)的任务.对这个问题有两种方法.插值:在插值法里,数据假定是正确的,要求以某种方法描述数据点之间所发生的情况.曲线拟合:曲线拟合或回归是人们设法找出某条光滑曲线,它最佳地拟合数据,但不必要经过任何数据点.,标有o的是数据点;连接数据点的实线描绘了线性内插,虚线是数据的最佳拟合.,曲线拟合的两个基本问题:1.最佳拟合意味着什么?2.应该用什么样的曲线?可用许多不同的

23、方法定义最佳拟合,并存在无穷数目的曲线.当最佳拟合被解释为在数据点的最小误差平方和,且所用的曲线限定为多项式时,那么曲线拟合是相当简捷的.数学上,称为多项式的最小二乘曲线拟合.,1 Matlab 曲线拟合,虚线和标志的数据点之间的垂直距离是在该点的误差.对各数据点距离求平方,并把平方距离全加起来,就是误差平方和.这条虚线是使误差平方和尽可能小的曲线,即是最佳拟合.最小二乘这个术语仅仅是使误差平方和最小的省略说法.,Matlab 曲线拟合和插值命令,x=0.1.2.3.4.5.6.7.8.9 1;y=-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9

24、.30 11.2;n=2;p=polyfit(x,y,n)ezplot(-9.8108*x*x+20.1293*x-0.0317)%二次多项式系数%既是p的输出,该命令为画出拟合曲线.xi=linspace(0,1,100);%x-axis data for plotting z=polyval(p,xi)%求出多项式在xi点处的取值.plot(x,y,o,x,y,xi,z,:)xlabel(x),ylabel(y=f(x),title(Second Order Curve Fitting),多项式阶次的选择是任意的.两点决定一直线或一阶多项式.三点决定一个平方或2阶多项式.按此进行,n+1数

25、据点唯一地确定n阶多项式.于是,在上面的情况下,有11个数据点,我们可选一个高达10阶的多项式.然而,高阶多项式给出很差的数值特性,人们不应选择比所需的阶次高的多项式.此外,随着多项式阶次的提高,近似变得不够光滑,因为较高阶次多项式在变零前,可多次求导.,原始数据标以o,2阶曲线拟合是虚线,10阶拟合是实线.注意,在10阶拟合中,在左边和右边的极值处,数据点之间出现大的纹波.当企图进行高阶曲线拟合时,这种纹波现象经常发生.显然,越多就越好 的观念在这里不适用.,2 插值命令,插值定义为对数据点之间函数的估值方法,这些数据点是由某些集合给定.当人们不能很快地求出所需中间点的函数值时,插值是一个有

26、价值的工具.例如,当数据点是某些实验测量的结果或是过长的计算过程时,就有这种情况.最简单插值的例子是MATLAB的作图.按缺省,MATLAB用直线连接所用的数据点以作图.这个线性插值猜测中间值落在数据点之间的直线上.当然,当数据点个数的增加和它们之间距离的减小时,线性插值就更精确.例如:,x1=linspace(0,2*pi,60);x2=linspace(0,2*pi,6);plot(x1,sin(x1),x2,sin(x2),-)xlabel(x),ylabel(sin(x),title(Linear Interpolation),一个在数据点之间用60个点,它比另一个只用6个点更光滑和更

27、精确.,如曲线拟合一样,插值要作决策.根据所作的假设,有多种插值.而且,可以在一维以上空间中进行插值.即如果有反映两个变量函数的插值,z=f(x,y),那么就可在x之间和在y之间,找出z的中间值进行插值.MATLAB在一维函数interp1和在二维函数interp2中,提供了许多的插值选择.为了说明一维插值,考虑下列问题,12小时内,一小时测量一次室外温度.数据存储在两个MATLAB变量中.,hours=1:12;%index for hour data was recorded temps=5 8 9 15 25 29 31 30 22 25 27 24;%recorded temperat

28、ures plot(hours,temps,hours,temps,+)%view temperatures title(Temperature)xlabel(Hour),ylabel(Degrees Celsius),正如上图看到的,MATLAB画出了数据点线性插值的直线.为了计算在任意给定时间的温度,人们可试着对可视的图作解释.另外一种方法,可用函数interp1.,t=interp1(hours,temps,9.3)%estimate temperature at hour=9.3t=22.9000 t=interp1(hours,temps,4.7)%estimate temperat

29、ure at hour=4.7t=22 t=interp1(hours,temps,3.2 6.5 7.1 11.7)%find temp at many points!t=10.2000 30.0000 30.9000 24.9000,interp1的缺省用法是由interp1(x,y,xo)来描述,这里x是独立变量(横坐标),y是应变量(纵坐标),xo是进行插值的一个数值数组.另外,该缺省的使用假定为线性插值.若不采用直线连接数据点,我们可采用某些更光滑的曲线来拟合数据点.最常用的方法是用一个3阶多项式,即3次多项式,来对相继数据点之间的各段建模,每个3次多项式的头两个导数与该数据点相一致

30、.这种类型的插值被称为3次样条或简称为样条.函数interp1也能执行3次样条插值.,t=interp1(hours,temps,9.3,spline)%estimate temperature at hour=9.3t=21.8577 t=interp1(hours,temps,4.7,spline)%estimate temperature at hour=4.7t=22.3143 t=interp1(hours,temps,3.2 6.5 7.1 11.7,spline)t=9.6734 30.0427 31.1755 25.3820,interp1二个强约束:(1)人们不能要求有独立变

31、量范围以外的结果,例如,interp1(hours,temps,13.5)导致一个错误,因为hours在1到12之间变化.(2)独立变量必须是单调的.即独立变量在值上必须总是增加的或总是减小的.二维插值是基于与一维插值同样的基本思想.然而,正如名字所隐含的,二维插值是对两变量的函数z=f(x,y)进行插值.,3.非线性数据(曲线)拟合非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x,xdata),但不知道系数向量x.今进行曲线拟合,求x使得下式成立:函数 lsqcurvefit格式 x=lsqcurvefit(fun,x0,xdata

32、,ydata)x=lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)x,resnorm=lsqcurvefit()x,resnorm,residual,exitflag,output,lambda=lsqcurvefit()x,resnorm,residual,exitflag,output,lambda,jacobian=lsqcurvefit(),resnorm=sum(fun(x,xdata)-ydata).2),即在x处残差的平方和;residual=fun(x,xdata)-ydata,即在x处的残差;exitflag为终止迭代的条件;outp

33、ut为输出的优化信息;lambda为解x处的Lagrange乘子;jacobian为解x处拟合函数fun的jacobian矩阵.,例5-8 求解如下最小二乘非线性拟合问题已知输入向量xdata和输出向量ydata,且长度都是n,拟合函数为即目标函数为其中:初始解向量为x0=0.3,0.4,0.1。,解:先建立拟合函数文件,并保存为myfun.mfunction F=myfun(x,xdata)F=x(1)*xdata.2+x(2)*sin(xdata)+x(3)*xdata.3;然后给出数据xdata和ydataxdata=3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.

34、0 5.4;ydata=16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3;x0=10,10,10;%初始估计值x,resnorm=lsqcurvefit(myfun,x0,xdata,ydata)结果为:Optimization terminated successfully:Relative function value changing by less than OPTIONS.TolFunx=0.2269 0.3385 0.3021resnorm=6.2950,4 非线性最小二乘非线性最小二乘(非线性数据拟合)的标准形式为:其中:L

35、为常数 设则目标函数可表达为其中:x为向量,F(x)为函数向量.,函数 lsqnonlin格式 x=lsqnonlin(fun,x0)%x0为初始解向量;fun为,i=1,2,m,fun返回向量值F,而不是平方和值,平方和隐含在算法中,fun的定义与前面相同.x=lsqnonlin(fun,x0,lb,ub,options)%options为指定优化参数,若x没有界,则lb=,ub=.x,resnorm=lsqnonlin()%resnorm=sum(fun(x).2),即解x处目标函数值.x,resnorm,residual=lsqnonlin()%residual=fun(x),即解x处f

36、un的值.,例5-9 求下面非线性最小二乘问题初始解向量为x0=0.3,0.4。解:先建立函数文件,并保存为myfun.m,由于lsqnonlin中的fun为向量形式而不是平方和形式,因此,myfun函数应由建立:k=1,2,10function F=myfun(x)k=1:10;F=2+2*k-exp(k*x(1)-exp(k*x(2);然后调用优化程序:x0=0.3 0.4;x,resnorm=lsqnonlin(myfun,x0)x=0.2578 0.2578resnorm=%求目标函数值 124.3622,实际问题求解,(任务分配问题)某车间有甲、乙两台机床,可用于加工三种工件。假定这

37、两台车床的可用台时数分别为800和900,三种工件的数量分别为400、600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?,解 设在甲车床上加工工件1、2、3的数量分别为x1、x2、x3,在乙车床上加工工件1、2、3的数量分别为x4、x5、x6。可建立以下线性规划模型:,f=13 9 10 11 12 8;A=0.4 1.1 1 0 0 0 0 0 0 0.5 1.2 1.3;b=800;900;Aeq=1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1;beq=400 600 500;vlb=zeros(6,1);vub=;x,fval=linprog(f,A,b,Aeq,beq,vlb,vub),程序详解:见example5.m,The end,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号