1、采用函数句柄的方式调用函数:把函数的名称用函数句柄直接替换。比如定义:f_h=sin,则使用sin函数的时候有两种方式:sin(10),f_h(10),返回同样的结果。x0:初始点的值。Options:提供和函数本身有关的一些细节控制,如采用的算法,是否采用梯度等信息。本身是一个结构数组,其中每一个属性值的改变或设定可用函数optimset完成,如:options=optimset(Display,iter,TolFun,1e-8);options=optimset(optimfun):返回优化函数“optimfun”所有的options属性的名称和属性值。如:options=optimset
2、(fminunc):观察结果。Options各个属性的含义请参考帮助文件。无约束优化问题vx,fval,exitflag,output,grad,hessian=fminunc(fun,x0,options)v输出参数:X,fval:算法终止时函数的最优解和最优值。exitflag:整数标志,算法终止的原因,返回值大于0表示找到局部最优点,否则没有找到局部最优点。具体的返回请参照函数“fminunc”的帮助。Output:Structure containing information about the optimization.The fields of the structure are
3、:v iterations:Number of iterations taken;v funcCount:Number of function evaluations;v algorithm:Algorithm used;vCgiterations:Number of PCG iterations(large-scale algorithm only);stepsize:Final step size taken(medium-scale algorithm only);grad,hessian:最优解X点处的剃度和Hessian矩阵无约束优化问题vx,fval,exitflag,output
4、,grad,hessian=fminunc(fun,x0,options)v例子:求目标函数 mypeaks的局部最小值。v mypeaks=3*(1-x(:,1).2.*exp(-(x(:,1).2)-(x(:,2)+1).2).v -10*(x(:,1)/5-x(:,1).3-x(:,2).5).*exp(-x(:,1).2-x(:,2).2).v -1/3*exp(-(x(:,1)+1).2-x(:,2).2);vfminsearch与fminunc有相同的输入和输出参数,但是它使用单纯形法来找到局部最优。v分别用fminsearch和fminunc函数求上述目标函数的极小值点,可发现在
5、利用了梯度信息的时候,迭代的次数大大减小。约束优化问题v1。单变量(标量)、上下界约束优化问题。vx,fval,exitflag,output=fminbnd(fun,x1,x2,options)v目标函数必须是连续的,只能求出局部最优值,所用算法:黄金分割和二次插值方法。v例子:求函数 f(x)=x(2/3)-(x2+1)(1/3),约束优化问题v2。线性规划问题。vx,fval,exitflag,output,lambda=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)它的输出只是最终结果,没有迭代过程。v例:约束优化问题v数学模型:设计变量:各个方案切割的
6、套数:x=x1,x2,x3,x4,x5;目标函数:min f(x)=0.1*x2+0.2*x3+0.3*x4+0.8*x5约束条件:v总套数限制:x1+2*x2+x4=100 v 2*x3+2*x4+x5=100v 3*x1+x2+2*x3+3*x5=100v 0 2%nonlcon called with 4 outputs GC=.%Gradients of the inequalities GCeq=.%Gradients of the equalitiesend4.fmincon函数MATLAB代码:%首先编写目标函数的.m文件:function f=myfun(x)f=-x(1)*x
7、(2)*x(3);x0=10;10;10%起始点x,fval=fmincon(myfun,x0,A,b)4.fmincon函数MATLAB代码:function f=objfun(x)f=exp(x(1)*(4*x(1)2+2*x(2)2+4*x(1)*x(2)+2*x(2)+1);%编写非线性约束函数的.m文件:function c,ceq=confun(x)c=1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10;ceq=;%求解优化问题:x0=-1,1;options=optimset(LargeScale,off);x,fval=fmincon(objfun,x0
8、,confun,options)4.fmincon函数v目标函数:H4.fmincon函数vStep1:建立数学模型v 设计变量和目标函数:管直径D和支架高度Hv约束条件:4.fmincon函数vStep1:建立数学模型v 约束条件:4.fmincon函数vStep2:编制程序v目标函数function f=objfun1(x)f=1.225e-4*x(1)*sqrt(577600.0+x(2)*x(2);v 约束函数function c,ceq=confun1(x)c=19098.59*sqrt(577600.0+x(2)*x(2)/(x(1)*x(2)-700.0;19098.59*sqr
9、t(577600.0+x(2)*x(2)/(x(1)*x(2)-2.6e5*(x(1)*x(1)+6.25)/(577600.0+x(2)*x(2);x0=1,1 lb=zeros(2,1);ub=Inf*ones(2,1);%ub=x,fval,exitflag,output,lambda,grad,hessian=fmincon(objfun1,x0,lb,ub,confun1)多目标优化问题v1.目标规划法vx,fval,attainfactor,exitflag=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub);v函数fun以函数句柄的
10、形式或匿名函数的形式给出,它多个目标函数构成的向量;vgoal:每个目标函数想要达到的目标,和fun具有相同的维数。vWeight:每个目标函数在优化过程中重要性的体现。当某个目标函数的Weight为正值时,允许函数值大于目标值;当它为负值时,允许函数值小于目标值;如果希望某个目标值尽量接近目标值,在Options中设置“GoalsExactAchieve”,并让该目标函数作为Fun中的第一个函数。如果希望每一个函数值从目标值有相同百分比的偏差,则设置每一个函数的weight(i)=abs(goal(i);多目标优化问题v1。目标规划法v返回值:vAttainfactor:优化点处函数值超过和
11、小于目标函数的个数统计,如果为负,则大部分函数被过估计;否则,大部分函数值小于目标值。v例1:某工厂生产I、II两种产品,有关数据见表1,在原材料有严格限制的条件下,要求产品II的产量不低于产品I,其次是充分利用设备,不加班;再者是利润不小于56元。vStep1:建模:v设计变量:产品I和II的产量 x(1),x(2)v目标函数:利润:g1=8*x(1)+10*x(2)56()产量:g2=x(2)x(1)0 ()工时:g3=x(1)+2*x(2)10 ()III拥有量原材料(kg)2111设备(hr)1210利润(元/件)810多目标优化问题v1。目标规划法v约束条件:原材料限制:2*x(1)
12、+x(2)=0vStep2:对目标函数指定权值:根据目标函数大于或小于目标的值,确定g1,g2权值大于0,g3权值小于0,权值绝对值的大小应该体现了各个目标函数的重要性。给定:w=1,0.8,-1;Step3:编程求解:分析结果可以看出,增加某一个目标的权值,将使得我们得该目标函数朝着我们期望的方向取得最大值(远离goal)。如将目标函数1(利润)得权值从0增加到5000,目标函数1得值从56变化到大约60,而同时其他两个目标函数得值朝向期望值靠得越近。即靠近goal.这一点从规划问题得数学表达式中也可以看出,随着Weight得增加,目标函数被松弛得越多,也就是它越偏离目标值;同时,优化又是最
13、小化gama,gama得减小,必将导致其他目标函数得松弛量得减少(其他目标函数得Weight没变),所以其他目标函数更靠近目标值。多目标优化问题v2。极大极小法vx,fval,maxfval,exitflag,output,lambda=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)v通过在options设置“MinAbsMax”属性,可控制同时需要最小化的目标函数的个数(目标函数的绝对值最小)。此时这几个需要同时最小化的函数必须在定义目标函数时放在其他函数前面。极大极小法vx,fval,maxfval,exitflag,output,lambda=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)v通过在options设置“MinAbsMax”属性,可控制同时
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1