您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Matlab求解有约束规划函数
Matlab求解有约束规划函数1.fmincon函数求解形如下面的有约束非线性规划模型一般形式:0)(0)(..)(minXcXcuXlbXAbAXtsXfeqeqeqMatlab求解有约束非线性最小化求解非线性规划问题的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,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]=mycon(x)c=...%计算非线性不等式约束在点x处的函数值ceq=...%计算机非线性等式约束在点x处的函数值对参数nonlcon的进一步示例2个不等式约束,2个等式约束3个决策变量x1,x2,x3如果nonlcon以‘mycon1’作为参数值,则程序mycon1.m如下808060101003223132212321232221xxxxxxxxxxx对照约束条件编写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)-80ceq(2)=x(1)^3+x(2)*x(2)+x(3)-80808060101003223132212321232221xxxxxxxxxxxnonlcon的高级用法允许提供非线性约束条件中函数的梯度设置方法:options=optimset('GradConstr','on')如果提供非线性约束条件中函数梯度,nonlcon的函数必须如下格式:参数nonlcon的函数一般格式如下function[c,ceq,GC,GCeq]=mycon(x)c=...%计算非线性不等式约束在点x处的函数值ceq=...%计算机非线性等式约束在点x处的函数值ifnargout2%nonlcon如果四个输出参数GC=...%不等式约束的梯度GCeq=...%等式约束的梯度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(...)运用步骤:将自己的模型转化为上面的形式写出对应的参数调用函数fmincon应用求解示例:请问:1、结合fmincon函数,需要提供哪些参数72220.)(min321321xxxtsxxxxf第一步:编写一个M文件返回目标函数f在点x处的值函数程序functionf=myfun(x)f=-x(1)*x(2)*x(3);函数myfun.m第二步:为了调用MATLAB函数,必须将模型中的约束转化为如下形式(=)。这里:A=[-1-2-2;122];b=[072]’;7222022321321xxxxxxbAx这是2个线性约束,形如第三步:提供一个搜索起点,然后调用相应函数,程序如下:%给一个初始搜索点x0=[10;10;10];[x,fval]=fmincon('myfun',x0,A,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适合如下模型:0..22minXtsdCXX注意:约束只有非负约束语法:x=lsqnonneg(c,d)x=lsqnonneg(c,d,x0)x=lsqnonneg(c,d,x0,options)3.有约束线性最小二乘lsqlin适合如下模型:uXlbAbAXtsdCXeqeqX..22min注意:约束有线性等式、不等式约束语法:x=lsqlin(C,d,A,b)x=lsqlin(C,d,A,b,Aeq,beq)x=lsqlin(C,d,A,b,Aeq,beq,lb,ub)x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)[x,resnorm]=lsqlin(...)[x,resnorm,residual]=lsqlin(...)[x,resnorm,residual,exitflag]=lsqlin(...)[x,resnorm,residual,exitflag,output]=lsqlin(...)[x,resnorm,residual,exitflag,output,lambda]=lsqlin(...)4.非线性最小二乘lsqnonlin适合模型:uXltsXFXFiiX..)(21)(22221min语法:x=lsqnonlin(fun,x0)x=lsqnonlin(fun,x0,lb,ub)x=lsqnonlin(fun,x0,lb,ub,options)x=lsqnonlin(fun,x0,options,P1,P2,...)[x,resnorm]=lsqnonlin(...)[x,resnorm,residual]=lsqnonlin(...)[x,resnorm,residual,exitflag]=lsqnonlin(...)[x,resnorm,residual,exitflag,output]=lsqnonlin(...)[x,resnorm,residual,exitflag,output,lambda]=lsqnonlin(...)[x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqnonlin(...)例1:求解x,使得下式最小resnorm等于norm(C*x-d)^2residual等于C*x-d2101)22(21keekxkxk返回参数说明第一步:编写M文件myfun.m计算向量FfunctionF=myfun(x)k=1:10;F=2+2*k-exp(k*x(1))-exp(k*x(2));第二步:调用优化函数lsqnonlin%给定搜索起点x0=[0.30.4];%调用求解函数[x,resnorm]=lsqnonlin('myfun',x0)x=0.25780.2578resnorm%residualorsumofsquaresresnorm=124.36225.学习回顾能力培养:1、建模分析能力2、应用数学能力3、算法设计与程序设计
本文标题:Matlab求解有约束规划函数
链接地址:https://www.777doc.com/doc-3974361 .html