《第7章 MATLAB辅助优化设计1.ppt》由会员分享,可在线阅读,更多相关《第7章 MATLAB辅助优化设计1.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第7章 MATLAB辅助优化设计7.1 辅助优化设计辅助优化设计7.2 线性规划线性规划7.3 无约束非线性规划无约束非线性规划7.4 约束最优化约束最优化7.5 多目标规划多目标规划7.6 最小二乘优化最小二乘优化7.7 方程求解方程求解7.1 辅助优化设计辅助优化设计设x=(x1,x2,xn)T为n维欧氏空间En的一点,f(x),gi(x)(i=1,2,m),hi(x)(i=m+1,p)为给定的n元函数,则一般最优化问题的提法是在约束条件:gi(x)=0,i=1m和hi(x)=0,i=m+1p之下,求向量x使函数f(x)取最小值(或极大值)。这里f(x)称为目标函数,gi(x)=0;线性规
2、划的标准形式要求目标函数最小化,不符合条件的线性模型首先转换成标准形式。在MATLAB工具箱中,可用linprog函数求解线性规划问题数学建模如下 min f(x)A*x=b Aeq*x=beq lb=x=ub函数格式:x=linprog(f,A,b)求解问题min f(x),约束条件A*x=bx=linprog(f,A,b,Aeq,beq)求解上面问题但增加了约束Aeq*x=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)设置初始值
3、x0。该选项只适合中型问题,大型算法将忽略初值。x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)用options指定的优化参数进行最小化计算。x,fval=linprog()返回解x处的目标值x,lambda,exitflag=linprog()返回exitflag值,描述函数计算退出的条件x,lambda,exitflag,output=linprog()返回包含优化信息的输出变量outputx,fval,exitflag,lambda=linprog()将解x处的拉格郎日乘子返回到lambda参数中例求使函数f(x)=-5x1-4x2-6x3取最小的x值,
4、且满足:x1-x2-x3=203x1+2x2+4x3=423x1+2x2=0f=-5,-4,-6;A=1,-1,1;3,2,4;3,2,0;b=20;42;30;lb=0,0,0;x,fval=linprog(f,A,b,lb)Optimization terminated successfully.x=0.0000 15.0000 3.0000fval=-78.0000 某人要用一笔资金投资,现在有四个项目,各项目的净收益(占投入资金的百分比)如下所示:由于特殊原因用于A的投资不能大于其他各项投资之和,用于项目B和C的投资要大于项目D的投资。试确定该人收益的最大值。投资项目ABCD收益(%)
5、1510812设x1,x2,x3,x4分别代表用于A、B、C、D的投资百分数,则根据提议则可建立如下数学模型f(x)=0.15x1+0.1x2-0.08x3+0.12x4x1=x2+x3+x4x2+x3=x4x1+x2+x3+x4=1x1,x2,x3,x4=0f(x)=-(0.15x1+0.1x2-0.08x3+0.12x4)-x1+x2+x3+x4=0-x2-x3+x4=0f=-0.15,-0.1,-0.08,-0.12;A=1,-1,-1,-1;0,-1,-1,1;b=0;0;Aeq=1 1 1 1;beq=1;lb=0,0,0,0;x,fval=linprog(f,A,b,Aeq,beq
6、,lb)Optimization terminated successfully.x=0.5000 0.2500 0.0000 0.2500fval=-0.13007.3无约束非线性规划目标函数或约束条件中包含自变量的非线性函数,则这类问题属于非线性规划。求解无约束非线性规划的常用方法为数值解法,数值解法中常用的是迭代法,它的基本思想是在给出极小点位置的一个初始估计x0后,计算一系列的xk(k=1,2,),希望点列xk的极限 x*就是f(x)的极小点。迭代法一般用 xk+1-xk=ckdk其中dk为一个向量,ck为步长。由dk可以唯一确定dk+1。从而得到一个点列xk。如果这个点列逼近我们的极
7、小点,便称他为极小化序列。各种迭代方法的区别在于ck和dk的选取不同,特别是方向的产生起着关键作用。选取的方法很多,但不是随机的,必须满足序列对应的函数值是逐渐减小的。其次算法应该收敛,即产生的序列具有收敛性,或者序列中的某一点本身就是f(x)的极小点,或者极限点就是极小点。这个要求是必须的,因为极小化序列不能收敛到极小点,那么我们构造的序列与极小点无关也就失去了意义。一般最优化算法的迭代过程分四步(1)选择初始点x0各种方法、各类函数对初始点的要求不尽相同,但越靠近最优解越好(2)如果得到的迭代点xk不是最优解则要建立一套以产生方向dk使目标函数f(x)从xk开始有所下降。(3)选取步长ck
8、。在多数算法中,ck的选取使f(x)下降最多,即沿射线xk+ckdk求f(x)极小值,这是单变量c的函数极小点问题,称为一维搜索。(4)检验新的迭代点是否为最优解或其近似解,如果不是继续迭代。一维搜索方法试探法:通过一系列点的比较来确定极小点函数逼近法:用简单的曲线来代替原来的曲线,用近似曲线的极小点来代替原来曲线的极小点。常用方法:牛顿法、抛物线法、三次插值法。函数格式:fminsearch函数x=fminsearch(fun,x0)x,fval=fminsearch()fun 目标函数fval 返回目标函数在最优解x点的函数值例求函数f(x)=sin(x)+3f=inline(sin(x)
9、+3);x0=2;x,fval=fminsearch(f,x0)x=4.7124fval=2.0000fminuncx=fminunc(fun,x0)x=fminunc(fun,x0,options)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()fun 目标函数options 设置优化选项参数fval 返回目标函数在最优解x点的函数值
10、exitflag 返回算法中止标志output 返回优化算法信息的一个数据结构grad 返回目标函数在最优解x点的梯度hessian返回目标函数在最优解x点的hessian矩阵值例f(x)=3x(1)2+4x(1)x(2)+x(2)2 f=inline(3*x(1)2+4*x(1)*x(2)+x(2)2);x0=1,1;x,val=fminunc(f,x0)x=1.0e-008*-0.7512 0.2479fval=1.3818e-0167.4约束最优化约束最优化的数学模型c(x),ceq(x)为函数,可以线性或非线性函数求解约束最优化的函数:fminbnd,fmincon,fseminf,q
11、uadprog,fminimax(1)fminbnd 已知函数f(x),fminbnd求解其在区间 内的最小值,即 。其中 ,均是标量,f(x)返回一个标量值。x=fminbnd(fun,x1,x2)x=fminbnd(fun,x1,x2,options)x,val=fminbnd()fun 目标函数x1,x2 设置最优化变量给定区间的上下界options 设置优化选项参数 fval 返回目标函数在最优解x点的函数值例求函数 在区间(0,5)的最小值f=inline(x-3)2-1);x,val=fminbnd(f,0,5)x=3val=-1fmincon函数格式:x=fmincon(f,x0
12、,A,b)x=fmincon(f,x0,A,b,Aeq,beq)x=fmincon(f,x0,A,b,Aeq,beq,lb,ub)x,fval,exitflag=fmincon()x,fval,exitflag,output=fmincon()x,fval,exitflag,output,grad=fmincon()例:取最小值的x值,设x0=10;10;10约束条件为 f=inline(-x(1)*x(2)*x(3);A=-1,-2,-2;1,2,2;b=0;72;x0=10;10;10;x,val=fmincon(f,x0,A,b);x=24.0000 12.0000 12.0000val
13、=-3.4560e+0037.7方程求解线性方程和方程组非线性方程非线性方程组非线性方程函数格式:fzero求单变量连续函数的零点。x=fzero(fun,x0)fun目标函数x,fval=fzero()fval返回目标函数在最优解x点的函数值x,fval,exitflag=fzero()x,fval,exitflag,output=fzero()例求 在x=2附近的零点y=inline(x.3-2*x-5);z=fzero(y,2)z=2.0946非线性方程组函数格式:x=fsolve(fun,x0);x=fsolve(fun,x0,options);x,fval=fsolve();x,fval,exitflag=fsolve();x,fval,exitflag,output=fsolve();求下面两个方程所表示的系统的零点function F=myfun(x)F=2*x(1)-x(2)-exp(-x(1);-x(1)+2*x(2)-exp(-x(2);x0=-5,-5;x,fval=fsolve(myfun,x0);x=0.5671 0.5671fval=1.0e-006*-0.4059 -0.4059