资源描述
6.3 软件求解,第1页,Matlab,求解有约束规划函数,第2页,1.fmincon,函数求解形以下面有约束非线性规划模型,普通形式:,第3页,Matlab,求解有约束非线性最小化,求解非线性规划问题,Matlab,函数,fmincon,1.,约束中能够有等式约束,2.能够含线性、非线性约束均可,第4页,输入,参数语法:,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,.),第5页,输入参数几点说明,模型中假如没有,A,b,Aeq,beq,lb,ub,限制,则以空矩阵,作为,参数传入;,nonlcon,:,假如包含非线性等式或不等式约束,则将这些函数,编写为一个,Matlab,函数,,nonlcon,就是定义这些函数程序文件名;,不等式约束,c(x)2,%nonlcon,假如四个输出参数,GC=.,%,不等式约束梯度,GCeq=.,%,等式约束梯度,end,第10页,输出,参数语法:,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(.),利用步骤:,将自己模型转化为上面形式,写出对应参数,调用函数,第11页,fmincon,应用求解示例:,请问:,1、,结合,fmincon,函数,需要提供哪些参数,第12页,第一步:编写一个,M,文件返回目标函数,f,在点,x,处值函数程序,function f=myfun(x),f=-x(1)*x(2)*x(3);,函数,myfun.m,第13页,第二步:为了调用,MATLAB,函数,必须将模型中约束转化为以下形式(=)。,这里:,A=-1 -2 -2;1 2 2;,b=0 72,;,这是2个线性约束,形如,第14页,第三步:提供一个搜索起点,然后调用对应函数,程序以下:,%给一个初始搜索点,x0=10;10;10;,x,fval=fmincon(,myfun,x0,A,b),第15页,主程序(整体):,A=-1 -2 -2;1 2 2;,b=0 72,;,%,给一个初始搜索点,x0=10;10;10;,x,fval=fmincon(,myfun,x0,A,b),第16页,最终得到以下结果:,x=,24.0000,12.0000,12.0000,fval=,-3.4560e+03,第17页,2.非负条件下,线性,最小二乘,lsqnonneg,适合以下模型:,注意:约束只有非负约束,第18页,语法:,x=lsqnonneg(c,d),x=lsqnonneg(c,d,x0),x=lsqnonneg(c,d,x0,options),第19页,3.有约束线性最小二乘,lsqlin,适合以下模型:,注意:约束有线性等式、不等式约束,第20页,语法:,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(.),第21页,4.非线性最小二乘,lsqnonlin,适合模型:,第22页,语法:,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(.),第23页,例1:求解,x,,使得下式最小,resnorm,等于,norm(C*x-d)2,residual,等于,C*x-d,返回参数说明,第24页,第一步:编写,M,文件,myfun.m,计算向量,F,function F=myfun(x),k=1:10;,F=2+2*k-exp(k*x(1)-exp(k*x(2);,第25页,第二步:调用优化函数,lsqnonlin,%给定搜索起点,x0=0.3 0.4;,%,调用求解函数,x,resnorm=lsqnonlin,(,myfun,x0),x=,0.2578 0.2578,resnorm%residual or sum of squares,resnorm=,124.3622,第26页,5.学习回顾,能力培养:,1、建模分析能力,2、应用数学能力,3、算法设计与程序设计,第27页,第28页,
展开阅读全文