目录
定义
标准形式
练习题1
练习题2
练习题3
定义
当目标函数或者约束条件中含有非1次项的时候,会出现非线性函数的规划。
标准形式
其中f(x)是标准函数,A,b,Aeq,beq,lb,ub是相应维数的矩阵和向量,c(x)和ceq(x)是非线性向量函数。
[x,y]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
%x:自变量
%y:最终值
%fun:目标函数形式,通常再命名一个.m文件
%x0:自变量的初始值,一般是一个随机数,比如x1,x2,x3用rand(3,1),表示生成3行1列的随机数
%A:不等式约束系数
%b:不等式约束的右侧值
%Aeq:等式约束的系数
%Beq:等式约束的右侧值
%lb:下界
%ub:上界
%nonlcon:是用.m文件定义的非线性向量函数c(x),ceq(x)
%options:定义优化参数,可以使用MATLAB缺省的数设置
如果没有线性不等式约束或者线性等式约束写成[]
练习题1
生成fun1目标函数,命名为fun1.m文件:
function f=fun1(x);
f=sum(x.^2)+8;
%也可以写成f=x(1)^2+x(2)^2+x(3)^2+8
生成fun2非线性规划约束函数,命名为fun2.m文件
function [g,h]=fun2(x);
g=[-x(1)^2+x(2)-x(3)^2;x(1)+x(2)^2+x(3)^2-20];%g返回非线性不等式约束的条件
h=[-x(1)-x(2)^2+2;x(2)+2*x(3)^2-3];%返回非线性等式约束的条件
主函数调用fmincon函数的功能,生成x,y的结果,命名为主函数main.m文件:
[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2');
x,y
练习题2
fun1函数
function f=fun1(x);
f=x(1)^2+x(2)^2+8;
fun2函数
function [g,h]=fun2(x);
g=[-x(1)^2+x(2)];
h=[-x(1)-x(2)^2+2]
main函数
[x,y]=fmincon('fun1',rand(2,1),[],[],[],[],zeros(2,1),[],'fun2')
x,y
练习题3
fun1.m函数:
function f=fun1(x);
f=-sqrt(x(1))-sqrt(x(2))-sqrt(x(3))-sqrt(x(4));
fun2.m函数
function [g,h]=fun2(x);
g=0;
h=0;
main.m函数
A=[1,0,0,0;1.1,1,0,0;1.21,1.1,1,0;1.331,1.21,1.1,1];
b=[400;440;484;532.4];
[x,y]=fmincon('fun1',rand(4,1),A,b,[],[],zeros(4,1),[],'fun2');
x,-y
结果为:
还有另外的做法,就是把所有的约束条件当成非线性规划,那么线性规划的约束条件为[ ] [ ] [ ] [ ] ,不过麻烦:
fun1.m:
function f=fun1(x);
f=-sqrt(x(1))-sqrt(x(2))-sqrt(x(3))-sqrt(x(4));
fun2.m:
function [g,h]=fun2(x);
g(1)=x(1)-400;
g(2)=1.1*x(1)+x(2)-440;
g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;
g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4;
h=0;
main.m:
[x,y]=fmincon('fun1',rand(4,1),[],[],[],[],zeros(4,1),[],'fun2');
x,-y