资源描述:
《matlab求解有约束规划函数》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、6.3软件求解Matlab求解有约束规划函数1.fmincon函数求解形如下面的有约束非线性规划模型一般形式:Matlab求解有约束非线性最小化求解非线性规划问题的Matlab函数fmincon1.约束中可以有等式约束2.可以含线性、非线性约束均可输入参数语法: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
2、,Aeq,beq,lb,ub,nonlcon,options)x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...)输入参数的几点说明模型中如果没有A,b,Aeq,beq,lb,ub的限制,则以空矩阵[]作为参数传入;nonlcon:如果包含非线性等式或不等式约束,则将这些函数编写为一个Matlab函数,nonlcon就是定义这些函数的程序文件名;不等式约束c(x)<=0等式约束ceq(x)=0.如果nonlcon=‘mycon’;则myfun.m定义如下function[c,ceq]
3、=mycon(x)c=...%计算非线性不等式约束在点x处的函数值ceq=...%计算机非线性等式约束在点x处的函数值对参数nonlcon的进一步示例2个不等式约束,2个等式约束3个决策变量x1,x2,x3如果nonlcon以‘mycon1’作为参数值,则程序mycon1.m如下对照约束条件编写myfun1.mfunction[c,ceq]=mycon1(x)c(1)=x(1)*x(1)+x(2)*x(2)+x(3)*x(3)-100c(2)=60-x(1)*x(1)+10*x(3)*x(3)ceq(1)=x(1)+x(2)*x(2)+x(3)-80c
4、eq(2)=x(1)^3+x(2)*x(2)+x(3)-80nonlcon的高级用法允许提供非线性约束条件中函数的梯度设置方法:options=optimset('GradConstr','on')如果提供非线性约束条件中函数梯度,nonlcon的函数必须如下格式:参数nonlcon的函数一般格式如下function[c,ceq,GC,GCeq]=mycon(x)c=...%计算非线性不等式约束在点x处的函数值ceq=...%计算机非线性等式约束在点x处的函数值ifnargout>2%nonlcon如果四个输出参数GC=...%不等式约束的梯度GCeq
5、=...%等式约束的梯度end输出参数语法:[x,fval]=fmincon(...)[x,fval,exitflag]=fmincon(...)[x,fval,exitflag,output]=fmincon(...)[x,fval,exitflag,output,lambda]=fmincon(...)[x,fval,exitflag,output,lambda,grad]=fmincon(...)[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(...)运用步骤:将自己的模型转化为上面的形式
6、写出对应的参数调用函数fmincon应用求解示例:请问:1、结合fmincon函数,需要提供哪些参数第一步:编写一个M文件返回目标函数f在点x处的值函数程序functionf=myfun(x)f=-x(1)*x(2)*x(3);函数myfun.m第二步:为了调用MATLAB函数,必须将模型中的约束转化为如下形式(<=)。这里:A=[-1-2-2;122];b=[072]’;这是2个线性约束,形如第三步:提供一个搜索起点,然后调用相应函数,程序如下:%给一个初始搜索点x0=[10;10;10];[x,fval]=fmincon('myfun',x0,A,
7、b)主程序(整体):A=[-1-2-2;122];b=[072]’;%给一个初始搜索点x0=[10;10;10];[x,fval]=fmincon('myfun',x0,A,b)最后得到如下结果:x=24.000012.000012.0000fval=-3.4560e+032.非负条件下线性最小二乘lsqnonneg适合如下模型:注意:约束只有非负约束语法:x=lsqnonneg(c,d)x=lsqnonneg(c,d,x0)x=lsqnonneg(c,d,x0,options)3.有约束线性最小二乘lsqlin适合如下模型:注意:约束有线性等式、不等
8、式约束语法:x=lsqlin(C,d,A,b)x=lsqlin(C,d,A,b,Aeq,beq