简介
Matlab的函数fmincon用来求最小约束非线性多变量函数,是一个非线性编程求解器,算出指定的问题的最小值。
其约束分为五种,作为fmincon的输入参数,分别是
A 线性不等式约束---具体指的是实矩阵
b 线性不等式约束--具体指的是 实数向量
以官网给的举例--
X 1 + 2 X 2 ≤10
3 X 1 + 4 X 2 ≤20
5 X 1 + 6 X 2 ≤30,
可以看出,A与b要写成
A = [1,2; 3,4; 5,6];
b = [10; 20; 30];
Aeq 线性等式约束(实矩阵)
beq 线性等式约束(实数向量)
x1 + 2 x2 + 3 x3 = 10
2 x1 + 4 x2 + x3 = 20
输入这些约束为:
Aeq = [1,2,3; 2,4,1];
beq = [10; 20];
nonlcon非线性约束
接下来是其他需要输入的参数:
x0-初始点,指定为实数向量或实数组。求解器使用元素x0
的数量和大小来确定fun
接受的变量的数量和大小。
自变量的上下限。
lb-下界
ub--上限
----------------------------------------------------------------------------------------------------------------------------
下面正式举例一个非线性约束的求解例子:
先写func.m函数:
fun=@(x)x(1)^2+x(2)^2+8;
x0=rand(2,1);
A=[];
Aeq=[];
b=[];
beq=[];
lb=[0,0];
ub=[];
exitflag=1;
[x,fval,exitflag]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,'mycon')
再写 mycon.m函数
function [c,ceq]=mycon(x)
c=-x(1)^2+x(2); %此处不要忘记将不等式改成不等式<=0的标准形式
ceq=-x(1)-x(2)^2+2;
最后run一下func.m文件,即可得到函数的最小值的解。
可以看到函数最小值fval=10 当x1=1 ,x2=2。
注解:输出参数