还剩24页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
优化设计工具箱1线性规划问题线性规划问题是目标函数和约束条件均为线性函数的问题,__TLAB
6.0解决的线性规划问题的标准形式为minsub.to其中f、x、b、beq、lb、ub为向量,A、Aeq为矩阵其它形式的线性规划问题都可经过适当变换化为此标准形式在__TLAB
6.0版中,线性规划问题(LinearProgramming)已用函数linprog取代了__TLAB
5.x版中的lp函数当然,由于版本的向下兼容性,一般说来,低版本中的函数在
6.0版中仍可使用函数linprog格式x=linprogfAb%求minf*xsub.to线性规划的最优解x=linprogfAbAeqbeq%等式约束,若没有不等式约束,则A=[],b=[]x=linprogfAbAeqbeqlbub%指定x的范围,若没有等式约束,则Aeq=[],beq=[]x=linprogfAbAeqbeqlbubx0%设置初值x0x=linprogfAbAeqbeqlbubx0options%options为指定的优化参数[xfval]=linprog…%返回目标函数最优值,即fval=f*x[xlambdaexitflag]=linprog…%lambda为解x的Lagrange乘子[xlambdafvalexitflag]=linprog…%exitflag为终止迭代的错误条件[xfvallambdaexitflagoutput]=linprog…%output为关于优化的一些信息说明若exitflag0表示函数收敛于解x,exitflag=0表示超过函数估值或迭代的最大数字,exitflag0表示函数不收敛于解x;若lambda=lower表示下界lb,lambda=upper表示上界ub,lambda=ineqlin表示不等式约束,lambda=eqlin表示等式约束,lambda中的非0元素表示对应的约束是有效约束;output=iterations表示迭代次数,output=algorithm表示使用的运算规则,output=cgiterations表示PCG迭代次数例1求下面的优化问题minsub.to解f=[-5;-4;-6];A=[1-11;324;320];b=[20;42;30];lb=zeros31;[xfvalexitflagoutputlambda]=linprogfAb[][]lb结果为x=%最优解
0.
000015.
00003.0000fval=%最优值-
78.0000exitflag=%收敛1output=iterations:6%迭代次数cgiterations:0algorithm:lipsol%所使用规则lambda=ineqlin:[3x1double]eqlin:[0x1double]upper:[3x1double]lower:[3x1double]lambda.ineqlinans=
0.
00001.
50000.5000lambda.lowerans=
1.
00000.
00000.0000表明不等约束条件2和3以及第1个下界是有效的2foptions函数对于优化控制,__TLAB提供了18个参数,这些参数的具体意义为options1-参数显示控制(默认值为0)等于1时显示一些结果options2-优化点x的精度控制默认值为1e-4options3-优化函数F的精度控制默认值为1e-4options4-违反约束的结束标准默认值为1e-6options5-算法选择,不常用options6-优化程序方法选择,为0则为BFCG算法,为1则采用DFP算法options7-线性插值算法选择,为0则为混合插值算法,为1则采用立方插算法options8-函数值显示目标—达到问题中的Lambdaoptions9-若需要检测用户提供的梯度,则设为1options10-函数和约束估值的数目options11-函数梯度估值的个数options12-约束估值的数目options13-等约束条件的个数options14-函数估值的最大次数(默认值是100×变量个数)options15-用于目标—达到问题中的特殊目标options16-优化过程中变量的最小有限差分梯度值options17-优化过程中变量的最大有限差分梯度值options18-步长设置默认为1或更小Foptions已经被optimset和optimget代替,详情请查函数optimset和optimget3非线性规划问题
3.1有约束的一元函数的最小值单变量函数求最小值的标准形式为sub.to在__TLAB
5.x中使用fmin函数求其最小值函数fminbnd格式x=fminbndfunx1x2%返回自变量x在区间上函数fun取最小值时x值,fun为目标函数的表达式字符串或__TLAB自定义函数的函数柄x=fminbndfunx1x2options%options为指定优化参数选项[xfval]=fminbnd…%fval为目标函数的最小值[xfvalexitflag]=fminbnd…%xitflag为终止迭代的条件[xfvalexitflagoutput]=fminbnd…%output为优化信息说明若参数exitflag0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函数赋值次数,output=algorithm表示所使用的算法例2计算下面函数在区间0,1内的最小值解[xfvalexitflagoutput]=fminbndx^3+cosx+x*logx/expx01x=
0.5223fval=
0.3974exitflag=1output=iterations:9funcCount:9algorithm:goldensectionsearchparabolicinterpolation例3在[0,5]上求下面函数的最小值解先自定义函数在__TLAB编辑器中建立M文件为functionf=myfunxf=x-
3.^2-1;保存为myfun.m,然后在命令窗口键入命令x=fminbnd@myfun05则结果显示为x=
33.2无约束多元函数最小值多元函数最小值的标准形式为其中x为向量,如在__TLAB
5.x中使用fmins求其最小值命令利用函数fminsearch求无约束多元函数最小值函数fminsearch格式x=fminsearchfunx0%x0为初始点,fun为目标函数的表达式字符串或__TLAB自定义函数的函数柄x=fminsearchfunx0options%options查optimset[xfval]=fminsearch…%最优点的函数值[xfvalexitflag]=fminsearch…%exitflag与单变量情形一致[xfvalexitflagoutput]=fminsearch…%output与单变量情形一致注意fminsearch采用了Nelder-Mead型简单搜寻法例4求的最小值点解X=fminsearch2*x1^3+4*x1*x2^3-10*x1*x2+x2^2
[00]结果为X=
1.
00160.8335或在__TLAB编辑器中建立函数文件functionf=myfunxf=2*x1^3+4*x1*x2^3-10*x1*x2+x2^2;保存为myfun.m,在命令窗口键入X=fminsearchmyfun
[00]或X=fminsearch@myfun
[00]结果为X=
1.
00160.8335命令利用函数fminunc求多变量无约束函数最小值函数fminunc格式x=fminuncfunx0%返回给定初始点x0的最小函数值点x=fminuncfunx0options%options为指定优化参数[xfval]=fminunc…%fval最优点x处的函数值[xfvalexitflag]=fminunc…%exitflag为终止迭代的条件,与上同[xfvalexitflagoutput]=fminunc…%output为输出优化信息[xfvalexitflagoutputgrad]=fminunc…%grad为函数在解x处的梯度值[xfvalexitflagoutputgradhessian]=fminunc…%目标函数在解x处的海赛(Hessian)值注意当函数的阶数大于2时,使用fminunc比fminsearch更有效,但当所选函数高度不连续时,使用fminsearch效果较好例5求的最小值fun=3*x1^2+2*x1*x2+x2^2;x0=
[11];[xfvalexitflagoutputgradhessian]=fminuncfunx0结果为x=
1.0e-008*-
0.
75910.2665fval=
1.3953e-016exitflag=1output=iterations:3funcCount:16stepsize:
1.2353firstorderopt:
1.6772e-007algorithm:medium-scale:Quasi-Newtonlinesearchgrad=
1.0e-006*-
0.
16770.0___hessian=
6.
00002.
00002.
00002.0000或用下面方法fun=inline3*x1^2+2*x1*x2+x2^2fun=Inlinefunction:funx=3*x1^2+2*x1*x2+x2^2x0=
[11];x=fminuncfunx0x=
1.0e-008*-
0.
75910.
26653.3有约束的多元函数最小值非线性有约束的多元函数的标准形式为sub.to其中x、b、beq、lb、ub是向量,A、Aeq为矩阵,Cx、__qx是返回向量的函数,fx为目标函数,fx、Cx、__qx可以是非线性函数在__TLAB
5.x中,它的求解由函数constr实现函数fmincon格式x=fminconfunx0Abx=fminconfunx0AbAeqbeqx=fminconfunx0AbAeqbeqlbubx=fminconfunx0AbAeqbeqlbubnonlconx=fminconfunx0AbAeqbeqlbubnonlconoptions[xfval]=fmincon…[xfvalexitflag]=fmincon…[xfvalexitflagoutput]=fmincon…[xfvalexitflagoutputlambda]=fmincon…[xfvalexitflagoutputlambdagrad]=fmincon…[xfvalexitflagoutputlambdagradhessian]=fmincon…参数说明fun为目标函数,它可用前面的方法定义;x0为初始值;A、b满足线性不等式约束,若没有不等式约束,则取A=[],b=[];Aeq、beq满足等式约束,若没有,则取Aeq=[],beq=[];lb、ub满足,若没有界,可设lb=[],ub=[];nonlcon的作用是通过接受的向量x来计算非线性不等约束和等式约束分别在x处的估计C和__q,通过指定函数柄来使用,如x=fmincon@myfunx0AbAeqbeqlbub@mycon,先建立非线性约束函数,并保存为mycon.m function[C__q]=myconxC=…%计算x处的非线性不等约束的函数值__q=…%计算x处的非线性等式约束的函数值lambda是Lagrange乘子,它体现哪一个约束有效output输出优化信息;grad表示目标函数在x处的梯度;hessian表示目标函数在x处的Hessiab值例6求下面问题在初始点(0,1)处的最优解minsub.to解约束条件的标准形式为sub.to先在__TLAB编辑器中建立非线性约束函数文件function[c__q]=myconxc=x1-1^2-x2;__q=[];%无等式约束然后,在命令窗口键入如下命令或建立M文件fun=x1^2+x2^2-x1*x2-2*x1-5*x2;%目标函数x0=
[01];A=[-23];%线性不等式约束b=6;Aeq=[];%无线性等式约束beq=[];lb=[];%x没有下、上界ub=[];[xfvalexitflagoutputlambdagradhessian]=fminconfunx0AbAeqbeqlbub@mycon则结果为x=34fval=-13exitflag=%解收敛1output=iterations:2funcCount:9stepsize:1algorithm:medium-scale:SQPQuasi-Newtonline-searchfirstorderopt:[]cgiterations:[]lambda=lower:[2x1double]%x下界有效情况,通过lambda.lower可查看upper:[2x1double]%x上界有效情况,为0表示约束无效eqlin:[0x1double]%线性等式约束有效情况,不为0表示约束有效eqnonlin:[0x1double]%非线性等式约束有效情况ineqlin:
2.5081e-008%线性不等式约束有效情况ineqnonlin:
6.1938e-008%非线性不等式约束有效情况grad=%目标函数在最小值点的梯度
1.0e-006*-
0.17760hessian=%目标函数在最小值点的Hessian值
1.0000-
0.0000-
0.
00001.0000例7求下面问题在初始点x=101010处的最优解MinSub.to解约束条件的标准形式为sub.tofun=-x1*x2*x3;x0=
[101010];A=[-1-2-2;122];b=[0;72];[xfval]=fminconfunx0Ab结果为x=
24.
000012.
000012.0000fval=-
34563.4二次规划问题二次规划问题(quadraticprogramming)的标准形式为sub.to其中,H、A、Aeq为矩阵,f、b、beq、lb、ub、x为向量其它形式的二次规划问题都可转化为标准形式__TLAB
5.x版中的qp函数已被
6.0版中的函数quadprog取代函数quadprog格式x=quadprogHfAb%其中HfAb为标准形中的参数,x为目标函数的最小值x=quadprogHfAbAeqbeq%Aeqbeq满足等约束条件x=quadprogHfAbAeqbeqlbub%lbub分别为解x的下界与上界x=quadprogHfAbAeqbeqlbubx0%x0为设置的初值x=quadprogHfAbAeqbeqlbubx0options%options为指定的优化参数[xfval]=quadprog…%fval为目标函数最优值[xfvalexitflag]=quadprog…%exitflag与线性规划中参数意义相同[xfvalexitflagoutput]=quadprog…%output与线性规划中参数意义相同[xfvalexitflagoutputlambda]=quadprog…%lambda与线性规划中参数意义相同例8求解下面二次规划问题sub.to解则,,在__TLAB中实现如下H=[1-1;-12];f=[-2;-6];A=[11;-12;21];b=[2;2;3];lb=zeros21;[xfvalexitflagoutputlambda]=quadprogHfAb[][]lb结果为x=%最优解
0.
66671.3333fval=%最优值-
8.2222exitflag=%收敛1output=iterations:3algorithm:medium-scale:active-setfirstorderopt:[]cgiterations:[]lambda=lower:[2x1double]upper:[2x1double]eqlin:[0x1double]ineqlin:[3x1double]lambda.ineqlinans=
3.
11110.44440lambda.lowerans=00说明第
1、2个约束条件有效,其余无效例9求二次规划的最优解__xfx1x2=x1x2+3sub.tox1+x2-2=0解化成标准形式sub.tox1+x2=2在__tlab中实现如下H=[0-1;-10];f=[0;0];Aeq=
[11];b=2;[xfvalexitflagoutputlambda]=quadprogHf[][]Aeqb结果为x=
1.
00001.0000fval=-
1.0000exitflag=1output=firstorderopt:0iterations:1cgiterations:1algorithm:[1x58char]lambda=eqlin:
1.0000ineqlin:[]lower:[]upper:[]4“半无限”有约束的多元函数最优解“半无限”有约束多元函数最优解问题的标准形式为sub.to…其中x、b、beq、lb、ub都是向量;A、Aeq是矩阵;Cx、__qx、是返回向量的函数,fx为目标函数;fx、Cx、__qx是非线性函数;为半无限约束,通常是长度为2的向量在MTALAB
5.x中,使用函数seminf解决这类问题函数fseminf格式x=fseminffunx0nthetaseminfconx=fseminffunx0nthetaseminfconAbx=fseminffunx0nthetaseminfconAbAeqbeqx=fseminffunx0nthetaseminfconAbAeqbeqlbubx=fseminffunx0nthetaseminfconAbAeqbeqlbuboptions[xfval]=fseminf…[xfvalexitflag]=fseminf…[xfvalexitflagoutput]=fseminf…[xfvalexitflagoutputlambda]=fseminf…参数说明x0为初始估计值;fun为目标函数,其定义方式与前面相同;A、b由线性不等式约束确定,没有,则A=[],b=[];Aeq、beq由线性等式约束确定,没有,则Aeq=[],beq=[];Lb、ub由变量x的范围确定;options为优化参数;ntheta为半无限约束的个数;seminfcon用来确定非线性约束向量C和__q以及半无限约束的向量K1,K2,…,Kn,通过指定函数柄来使用,如x=fseminf@myfunx0ntheta@myinfcon先建立非线性约束和半无限约束函数文件,并保存为myinfcon.m function[C__qK1K2…KnthetaS]=myinfconxS%S为向量w的采样值%初始化样本间距ifisnanS11,S=…%S有ntheta行2列endw1=…%计算样本集w2=…%计算样本集…wntheta=…%计算样本集K1=…%在x和w处的第1个半无限约束值K2=…%在x和w处的第2个半无限约束值…Kntheta=…%在x和w处的第ntheta个半无限约束值C=…%在x处计算非线性不等式约束值__q=…%在x处计算非线性等式约束值如果没有约束,则相应的值取为“[]”,如__q=[]fval为在x处的目标函数最小值;exitflag为终止迭代的条件;output为输出的优化信息;lambda为解x的Lagrange乘子例10求下面一维情形的最优化问题sub.to解将约束方程化为标准形式先建立非线性约束和半无限约束函数文件,并保存为mycon.m function[C__qK1K2S]=myconXS%初始化样本间距ifisnanS11S=[
0.20;
0.20];end%产生样本集w1=1:S11:100;w2=1:S21:100;%计算半无限约束K1=sinw1*X
1.*cosw1*X2-1/1000*w1-
50.^2-sinw1*X3-X3-1;K2=sinw2*X
2.*cosw2*X1-1/1000*w2-
50.^2-sinw2*X3-X3-1;%无非线性约束C=[];__q=[];%绘制半无限约束图形plotw1K1-w2K2:titleSemi-infiniteconstraints然后在__TLAB命令窗口或编辑器中建立M文件fun=sumx-
0.
5.^2;x0=[
0.5;
0.2;
0.3];%Startingguess[xfval]=fseminffunx02@mycon结果为x=
0.
66730.
30130.4023fval=
0.0770[C__qK1K2]=myconxNaN;%利用初始样本间距__xK1ans=-
0.0017__xK2ans=-
0.0845图5-1例11求下面二维情形的最优化问题sub.to初始点为x0=[
0.
250.
250.25]解先建立非线性和半无限约束函数文件,并保存为mycon.m function[C__qK1S]=myconXS%初始化样本间距ifisnans11s=
[22];end%设置样本集w1x=1:s11:100;w1y=1:s12:100;[wxwy]=meshgridw1xw1y;%计算半无限约束函数值K1=sinwx*X
1.*coswx*X2-1/1000*wx-
50.^2-sinwx*X3-X3+…sinwy*X
2.*coswx*X1-1/1000*wy-
50.^2-sinwy*X3-X3-
1.5;%无非线性约束C=[];__q=[];%作约束曲面图形m=surfwxwyK1edgecolornonefa__colorinterp;camlightheadlighttitleSemi-infiniteconstraintdrawnow然后在__TLAB命令窗口下键入命令fun=sumx-
0.
2.^2;x0=[
0.
250.
250.25];[xfval]=fseminffunx01@mycon结果为(如图)x=
0.
29260.
18740.2202fval=
0.0091[c__qK1]=myconx[
0.
50.5];%样本间距为
0.5__x__xK1ans=-
0.00275极小化极大(Min__x)问题极小化极大问题的标准形式为sub.to其中x、b、beq、lb、ub是向量,A、Aeq为矩阵,Cx、__qx和Fx是返回向量的函数,Fx、Cx、__qx可以是非线性函数在__TLAB
5.x中,它的求解由函数min__x实现函数fmini__x格式x=fmini__xfunx0x=fmini__xfunx0Abx=fmini__xfunx0AbAeqbeqx=fmini__xfunx0AbAeqbeqlbubx=fmini__xfunx0AbAeqbeqlbubnonlconx=fmini__xfunx0AbAeqbeqlbubnonlconoptions[xfval__xfval]=fmini__x…[xfval__xfvalexitflag]=fmini__x…[xfval__xfvalexitflagoutput]=fmini__x…[xfval__xfvalexitflagoutputlambda]=fmini__x…参数说明fun为目标函数;x0为初始值;A、b满足线性不等约束,若没有不等约束,则取A=[],b=[];Aeq、beq满足等式约束,若没有,则取Aeq=[],beq=[];lb、ub满足,若没有界,可设lb=[],ub=[];nonlcon的作用是通过接受的向量x来计算非线性不等约束和等式约束分别在x处的值C和__q,通过指定函数柄来使用,如x=fmini__x@myfunx0AbAeqbeqlbub@mycon,先建立非线性约束函数,并保存为mycon.m function[C__q]=myconxC=…%计算x处的非线性不等约束的函数值__q=…%计算x处的非线性等式约束的函数值options为指定的优化参数;fval为最优点处的目标函数值;__xfval为目标函数在x处的最大值;exitflag为终止迭代的条件;lambda是Lagrange乘子,它体现哪一个约束有效output输出优化信息例12求下列函数最大值的最小化问题其中解先建立目标函数文件,并保存为myfun.m functionf=myfunxf1=2*x1^2+x2^2-48*x1-40*x2+304;f2=-x1^2-3*x2^2;f3=x1+3*x2-18;f4=-x1-x2;f5=x1+x2-8;然后,在命令窗口键入命令x0=[
0.1;
0.1];%初始值[xfval]=fmini__x@myfunx0结果为x=
4.
00004.0000fval=
0.0000-
64.0000-
2.0000-
8.0000-
0.0000例5-13求上述问题的绝对值的最大值最小化问题目标函数为解先建立目标函数文件(与上例相同)然后,在命令窗口或编辑器中建立M文件x0=[
0.1;
0.1];%初始点options=optimsetMinAb__ax5;%指定绝对值的最小化[xfval]=fmini__x@myfunx0[][][][][][][]options则结果为x=
4.
92562.0796fval=
37.2356-
37.2356-
6.8357-
7.0052-
0.99486多目标规划问题多目标规划是指在一组约束下,对多个不同目标函数进行优化它的一般形式为sub.to其中在同一约束下,当目标函数处于冲突状态时,不存在最优解x使所有目标函数同时达到最优此时,我们使用有效解,即如果不存在,使得,i=12…m则称x*为有效解在__TLAB中,多目标问题的标准形式为sub.to其中x、b、beq、lb、ub是向量;A、Aeq为矩阵;Cx、__qx和Fx是返回向量的函数;Fx、Cx、__qx可以是非线性函数;weight为权值系数向量,用于控制对应的目标函数与用户定义的目标函数值的接近程度;goal为用户设计的与目标函数相应的目标函数值向量;为一个松弛因子标量;Fx为多目标规划中的目标函数向量在__TLAB
5.x中,它的最优解由attgoal函数实现函数fgoalattain格式x=fgoalattainfunx0goalweightx=fgoalattainfunx0goalweightAbx=fgoalattainfunx0goalweightAbAeqbeqx=fgoalattainfunx0goalweightAbAeqbeqlbubx=fgoalattainfunx0goalweightAbAeqbeqlbubnonlconx=fgoalattainfunx0goalweightAbAeqbeqlbubnonlconoptions[xfval]=fgoalattain…[xfvalattainfactor]=fgoalattain…[xfvalattainfactorexitflag]=fgoalattain…[xfvalattainfactorexitflagoutput]=fgoalattain…[xfvalattainfactorexitflagoutputlambda]=fgoalattain…参数说明x0为初始解向量;fun为多目标函数的文件名字符串,其定义方式与前面fun的定义方式相同;goal为用户设计的目标函数值向量;weight为权值系数向量,用于控制目标函数与用户自定义目标值的接近程度;A、b满足线性不等式约束,没有时取A=[],b=[];Aeq、beq满足线性等式约束,没有时取Aeq=[],beq=[];lb、ub为变量的下界和上界;nonlcon的作用是通过接受的向量x来计算非线性不等约束和等式约束分别在x处的值C和__q,通过指定函数柄来使用如x=fgoalattain@myfunx0goalweightAbAeqbeqlbub@mycon,先建立非线性约束函数,并保存为mycon.m function[C__q]=myconxC=…%计算x处的非线性不等式约束的函数值__q=…%计算x处的非线性等式约束的函数值options为指定的优化参数;fval为多目标函数在x处的值;attainfactor为解x处的目标规划因子;exitflag为终止迭代的条件;output为输出的优化信息;lambda为解x处的Lagrange乘子例14控制系统输出反馈器设计设如下线性系统其中要求设计输出反馈控制器K,使闭环系统在复平面实轴上点[-5,-3,-1]的左侧有极点,并要求解上述问题就是要求解矩阵K,使矩阵(A+BKC)的极点为[-5,-3,-1],这是一个多目标规划问题先建立目标函数文件,保存为eigfun.m functionF=eigfunKABCF=sorteigA+B*K*C;%估计目标函数值然后,输入参数并调用优化程序A=[-
0.500;0-210;01-2];B=[10;-22;01];C=[100;001];K0=[-1-1;-1-1];%初始化控制器矩阵goal=[-5-3-1];%为闭合环路的特征值(极点)设置目标值向量weight=absgoal%设置权值向量lb=-4*onessizeK0;%设置控制器的下界ub=4*onessizeK0;%设置控制器的上界options=optimsetDisplayiter;%设置显示参数显示每次迭代的输出[Kfvalattainfactor]=fgoalattain@eigfunK0goalweight[][][][]lbub[]optionsABC结果为weight=531Attai__entDirectionalIterF-countfactorStep-sizederivativePro__dure
161.
88511.
032131.0611-
0.
6793200.42111-
0.523Hessianmodified427-
0.063521-
0.053Hessianmodifiedtwi__534-
0.15711-
0.133641-
0.34__1-
0.00768Hessianmodified748-
0.36431-
4.25e-005Hessianmodified855-
0.36451-
0.00303Hessianmodifiedtwi__962-
0.36741-
0.0213Hessianmodified1069-
0.
380610.002661176-
0.___21-
2.73e-005Hessianmodifiedtwi__1283-
0.___31-
1.22e-013Hessianmodifiedtwi__Optimizationterminatedsuc__ssfully:Searchdirectionlessthan2*options.TolXand__ximumconstraintviolationislessthanoptions.TolConActiveConstraints:124910K=-
4.0000-
0.2564-
4.0000-
4.0000fval=-
6.9313-
4.1588-
1.4099attainfactor=-
0.___37最小二乘最优问题
7.1约束线性最小二乘有约束线性最小二乘的标准形式为sub.to其中C、A、Aeq为矩阵;d、b、beq、lb、ub、x是向量在__TLAB
5.x中,约束线性最小二乘用函数conls求解函数lsqlin格式x=lsqlinCdAb%求在约束条件下,方程Cx=d的最小二乘解xx=lsqlinCdAbAeqbeq%Aeq、beq满足等式约束,若没有不等式约束,则设A=[],b=[]x=lsqlinCdAbAeqbeqlbub%lb、ub满足,若没有等式约束,则Aeq=[],beq=[]x=lsqlinCdAbAeqbeqlbubx0%x0为初始解向量,若x没有界,则lb=[],ub=[]x=lsqlinCdAbAeqbeqlbubx0options%options为指定优化参数[xresnorm]=lsqlin…%resnorm=normC*x-d^2,即2-范数[xresnormresidual]=lsqlin…%residual=C*x-d,即残差[xresnormresidualexitflag]=lsqlin…%exitflag为终止迭代的条件[xresnormresidualexitflagoutput]=lsqlin…%output表示输出优化信息[xresnormresidualexitflagoutputlambda]=lsqlin…%lambda为解x的Lagrange乘子例15求解下面系统的最小二乘解系统Cx=d约束;先输入系统系数和x的上下界C=[
0.
95010.
76200.
61530.4057;…
0.
23110.
45640.
79190.9354;…
0.
60680.
01850.
92180.9169;…
0.
48590.
82140.
73820.4102;…
0.__
120.
44470.
17620.__36];d=[
0.0578;
0.3528;
0.8131;
0.0098;
0.1388];A=[
0.
20270.
27210.
74670.4659;…
0.
19870.
19880.
44500.4186;…
0.
60370.
01520.
93180.8462];b=[
0.5251;
0.2026;
0.6721];lb=-
0.1*ones41;ub=2*ones41;然后调用最小二乘命令[xresnormresidualexitflagoutputlambda]=lsqlinCdAb[][]lbub;结果为x=-
0.1000-
0.
10000.
21520.3502resnorm=
0.1672residual=
0.
04550.0764-
0.
35620.
16200.0784exitflag=1%说明解x是收敛的output=iterations:4algorithm:medium-scale:active-setfirstorderopt:[]cgiterations:[]lambda=lower:[4x1double]upper:[4x1double]eqlin:[0x1double]ineqlin:[3x1double]通过lambda.ineqlin可查看非线性不等式约束是否有效
7.2非线性数据(曲线)拟合非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=Fxxdata,但不知道系数向量x今进行曲线拟合,求x使得下式成立在__TLAB
5.x中,使用函数curvefit解决这类问题函数lsqcurvefit格式x=lsqcurvefitfunx0xdataydatax=lsqcurvefitfunx0xdataydatalbubx=lsqcurvefitfunx0xdataydatalbuboptions[xresnorm]=lsqcurvefit…[xresnormresidual]=lsqcurvefit…[xresnormresidualexitflag]=lsqcurvefit…[xresnormresidualexitflagoutput]=lsqcurvefit…[xresnormresidualexitflagoutputlambda]=lsqcurvefit…[xresnormresidualexitflagoutputlambdajacobian]=lsqcurvefit…参数说明x0为初始解向量;xdata,ydata为满足关系ydata=Fxxdata的数据;lb、ub为解向量的下界和上界,若没有指定界,则lb=[],ub=[];options为指定的优化参数;fun为拟合函数,其定义方式为x=lsqcurvefit@myfunx0xdataydata,其中myfun已定义为functionF=myfunxxdataF=…%计算x处拟合函数值fun的用法与前面相同;resnorm=sumfunxxdata-ydata.^2,即在x处残差的平方和;residual=funxxdata-ydata,即在x处的残差;exitflag为终止迭代的条件;output为输出的优化信息;lambda为解x处的Lagrange乘子;jacobian为解x处拟合函数fun的jacobian矩阵例16求解如下最小二乘非线性拟合问题已知输入向量xdata和输出向量ydata,且长度都是n,拟合函数为即目标函数为其中初始解向量为x0=[
0.
30.
40.1]解先建立拟合函数文件,并保存为myfun.mfunctionF=myfunxxdataF=x1*xdata.^2+x2*sinxdata+x3*xdata.^3;然后给出数据xdata和ydataxdata=[
3.
67.
79.
34.
18.
62.
81.
37.
910.
05.4];ydata=[
16.
5150.
6263.
124.
7208.
59.
92.
7163.
9325.
054.3];x0=
[101010];%初始估计值[xresnorm]=lsqcurvefit@myfunx0xdataydata结果为Optimizationterminatedsuc__ssfully:RelativefunctionvaluechangingbylessthanOPTIONS.TolFunx=
0.
22690.
33850.3021resnorm=
6.
29507.3非线性最小二乘非线性最小二乘(非线性数据拟合)的标准形式为其中L为常数在__TLAB
5.x中,用函数leastsq解决这类问题,在
6.0版中使用函数lsqnonlin设则目标函数可表达为其中x为向量,Fx为函数向量函数lsqnonlin格式x=lsqnonlinfunx0%x0为初始解向量;fun为,i=12…m,fun返回向量值F,而不是平方和值,平方和隐含在算法中,fun的定义与前面相同x=lsqnonlinfunx0lbub%lb、ub定义x的下界和上界x=lsqnonlinfunx0lbuboptions%options为指定优化参数,若x没有界,则lb=[],ub=[][xresnorm]=lsqnonlin…%resnorm=sumfunx.^2,即解x处目标函数值[xresnormresidual]=lsqnonlin…%residual=funx,即解x处fun的值[xresnormresidualexitflag]=lsqnonlin…%exitflag为终止迭代条件[xresnormresidualexitflagoutput]=lsqnonlin…%output输出优化信息[xresnormresidualexitflagoutputlambda]=lsqnonlin…%lambda为Lagrage乘子[xresnormresidualexitflagoutputlambdajacobian]=lsqnonlin…%fun在解x处的Jacobian矩阵例17求下面非线性最小二乘问题初始解向量为x0=[
0.
30.4]解先建立函数文件,并保存为myfun.m,由于lsqnonlin中的fun为向量形式而不是平方和形式,因此,myfun函数应由建立k=12…10functionF=myfunxk=1:10;F=2+2*k-expk*x1-expk*x2;然后调用优化程序x0=[
0.
30.4];[xresnorm]=lsqnonlin@myfunx0结果为Optimizationterminatedsuc__ssfully:NormofthecurrentstepislessthanOPTIONS.TolXx=
0.
25780.2578resnorm=%求目标函数值
124.
36227.4非负线性最小二乘非负线性最小二乘的标准形式为sub.to其中矩阵C和向量d为目标函数的系数,向量x为非负__变量在__TLAB
5.x中,用函数nnls求解这类问题,在
6.0版中则用函数lsqnonneg函数lsqnonneg格式x=lsqnonnegCd%C为实矩阵,d为实向量x=lsqnonnegCdx0%x0为初始值且大于0x=lsqnonnegCdx0options%options为指定优化参数[xresnorm]=lsqnonneg…%resnorm=normC*x-d^2[xresnormresidual]=lsqnonneg…%residual=C*x-d[xresnormresidualexitflag]=lsqnonneg…[xresnormresidualexitflagoutput]=lsqnonneg…[xresnormresidualexitflagoutputlambda]=lsqnonneg…例18一个最小二乘问题的无约束与非负约束解法的比较先输入数据C=[
0.
03720.2869;
0.
68610.7071;
0.
62330.6245;
0.
63440.6170];d=[
0.8587;
0.1781;
0.0747;
0.8405];[C\dlsqnonnegCd]ans=-
2.
562703.
11080.6929注意1当问题为无约束线性最小二乘问题时,使用__TLAB下的“\”运算即可以解决2.对于非负最小二乘问题,调用lsqnonnegCd求解8非线性方程组求解
8.1非线性方程的解非线性方程的标准形式为fx=0函数fzero格式x=fzerofunx0%用fun定义表达式fx,x0为初始解x=fzerofunx0options[xfval]=fzero…%fval=fx[xfvalexitflag]=fzero…[xfvalexitflagoutput]=fzero…说明该函数采用数值解求方程fx=0的根例19求的根解fun=x^3-2*x-5;z=fzerofun2%初始估计值为2结果为z=
2.
09468.2非线性方程组的解非线性方程组的标准形式为Fx=0其中x为向量,Fx为函数向量函数fsolve格式x=fsolvefunx0%用fun定义向量函数,其定义方式为先定义方程函数functionF=myfunxF=[表达式1;表达式2;…表达式m]%保存为myfun.m,并用下面方式调用x=fsolve@myfunx0,x0为初始估计值x=fsolvefunx0options[xfval]=fsolve…%fval=Fx,即函数值向量[xfvalexitflag]=fsolve…[xfvalexitflagoutput]=fsolve…[xfvalexitflagoutputjacobian]=fsolve…%jacobian为解x处的Jacobian阵其余参数与前面参数相似例20求下列系统的根解化为标准形式设初值点为x0=[-5-5]先建立方程函数文件,并保存为myfun.m functionF=myfunxF=[2*x1-x2-exp-x1;-x1+2*x2-exp-x2];然后调用优化程序x0=[-5;-5];%初始点options=optimsetDisplayiter;%显示输出信息[xfval]=fsolve@myfunx0options结果为NormofFirst-orderIterationFunc-countfxstepopti__lityCG-iterations
1447071.
212.29e+
0040276527.
471.
452073.09e+
0031310918.
3721.
491864181413127.
741.
5532657.
3151614.
91531.
575918.
2616190.
7790511.
276621.
1417220.
003724530.
4846580.
068318259.21617e-
0080.
03855520.
00033619285.66133e-
0170.
0001937078.34e-0091Optimizationterminatedsuc__ssfully:RelativefunctionvaluechangingbylessthanOPTIONS.TolFunx=
0.
56710.5671fval=
1.0e-008*-
0.5320-
0.5320例21求矩阵x使其满足方程,并设初始解向量为x=[11;11]解先编写M文件functionF=myfunxF=x*x*x-[12;34];然后调用优化程序求解x0=ones22;%初始解向量options=optimsetDisplayoff;%不显示优化信息[xFvalexitflag]=fsolve@myfunx0options则结果为x=-
0.
12910.
86021.
29031.1612Fval=
1.0e-003*
0.1541-
0.
11630.0109-
0.0243exitflag=1图5-2。