工程最优化即最大(小)问题关于工程最优化的求解,之前已有基因遗传算法、蚁群算法、凸优化。今天来介绍一种方法,是基于matlab自带函数fminunc、fmaxunc来计算的,它的计算方式更加简洁高效,只需解一个目标函数。一、无约束(无条件)的最优化使用fminunc函数(un-condition)1)可用于任意函数求最小值问题(即只能求最小值)。如求最大值:1ˆˆargmaxHudRd(1)取反,则等效为求最小值:1ˆˆargminHudRd(2)这个过程不影响自变量w.2)代码格式x=fminunc(@func,x0);[x,fval]=fminunc(@func,x0);[x,fval,exitflag]=fminunc(@func,x0);必须预先把函数存入到一个程序中,(所编的程序一定是只有个参数,则当为多元函数时,则x(1),x(2),x(3)…分别代表每个自变)。其中:fval为函数的最小值;x0为自变量初始向量,一般不影响结果;exitflag为退出标志,当它大于0时表示函数收敛于x,当它0x100exitflag0exitflag,函数收敛于,一般等于,函数不收敛,函数不收敛(所以解完题后还必须判断的值是否,以决定结果的正误/有效性)最好返回三个结果(3)函数存在最值的条件:在闭区间连续,存在导数等(说明有很多函数不存在最值:有大、有小、有大小、都无)*^exitflag--可以是任意函数、任意n元函数求最小值最后一定要看看的值(判断结果是否有效所以结果最好返回三个结果函数可以用内联函数inline('expression')(程序中的...可要可不要,一般还是不要吧)二、fminbnd(‘@func’,x1,xn)求函数在区间[x1,xn]的最小值三、有约束条件的最优化问题使用fmincon函数(condition)1)可用于任意函数求最小值问题(即只能求最小值)。2)代码格式1x=fmincon(@func,x0,A,b);[x,fval]=fmincon(@func,x0,A,b);[x,fval,exitflag]=fmincon(@func,x0,A,b);用于线性约束不等式,即0Axb(4)其中:A为系数矩阵;b为常数项列向量;0x为初始向量一定要变成都是小:求最小值,条件3)代码格式2[x,fval,exitflag]=fmincon(@func,x0,A,b,Aeq,beq);用于线性不等式约束与线性等式约束,线性等式即0Aeqxbeq0Aeqxbeq(5)其中:Aeq为系数矩阵;beq为列向量;0x为初始向量,AbAeq,beq,的形式类似于解线性方程组的形式4)代码格式3[x,fval,exitflag]=fmincon(@func,x0,A,b,Aeq,beq,l,u);其中:l为解的上限;u为解的下限;(即解的范围lxu)。条件顺序:线性不等式线性等式上下线非线性条件5)代码格式4[x,fval,exitflag]=fmincon(@func,x0,A,b,Aeq,beq,l,u,@func2);其中:@func2是用于非线性约束,它的格式为:cx0ceqx0(6)程序形式为:function[c,ceq]=fxx(x0);c=……;ceq=……;如果有多个非线性条件——见下面的例3法一:可以返回2/4/6/8…个结果,结果分别为不1、等1、不2、等2、不3、等3……,没有的则用[]或0法二:把c,ceq视作数组,即c=[不1,不2,不3,…];ceq=[等式1,等式2,等式3,…];注意:前面的各向量(矩阵)如不使用,必须使用空的向量(后面的如不使用,则可以不管)(即每个参数的意义是由他们的位置来决定的,不是由变量决定的,变量名可以任意。)任意函数、任意n元函数都可用fmincon---万能的6)函数的形式Functionf=zha(r);(一定是只有一个形参)r(1)=x;r(2)=y;r(3)=z;……f=@func都是求最小值:如求最大值:则前后两次取反exitflag0,3exitflag,x0解完题后还必须判断的值是否以决定结果的正误所以最好返回个结果看一下如无效则换一个初始向量7)手把手做-codescodingfmincon--先做好各种准备(目标函数表达式;线性条件(不等式、等式)非线性条件另编一个程序)最后条件分为:线性不等式、线性等式、上下限、非线性条件(不等式,等式)程序返回两个结果一般是不等式居多(再多都不要紧),一般不会有太多的等式条件(否则都可以解方程了)