约束类型1:线性不等式约束
函数为F(x)=100*(x(2)-x(1)^2)^2 + (1-x(1))^2,约束为 x(1)+2x(2)≤1。写成矩阵形式以 A = [1,2]
和 b = 1
为条件,以 Ax <= b
形式表达此约束。
建立m1脚本文件,写入下列程序:
fun = @(x) 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
x0 = [-1,2];
A = [1,2];
b = 1;
x = fmincon(fun,x0,A,b)
运行m1.m脚本文件解得x如下:
x =
0.5022 0.2489
约束类型2:线性不等式和等式约束
函数为F(x)=100*(x(2)-x(1)^2)^2 + (1-x(1))^2
从点 [0.5,0]
开始求最小值,约束为 x(1)+2x(2)≤1 和 2x(1)+x(2)=1。
以 A = [1,2]
和 b = 1
为条件,以 A*x <= b
形式表达线性不等式约束。
以 Aeq = [2,1]
和 beq = 1
为条件,以 Aeq*x = beq
形式表达线性等式约束。
建立m1脚本文件,写入下列程序:
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
x0 = [0.5,0];
A = [1,2];
b = 1;
Aeq = [2,1];
beq = 1;
x = fmincon(fun,x0,A,b,Aeq,beq)
运行m1.m脚本文件解得x如下:
x =
0.4149 0.1701
约束类型3:具有边界约束的最小化
函数为F(x)=100*(x(2)-x(1)^2)^2 + (1-x(1))^2,约束为 0≤x(1)≤1 和 0≤x(2)≤2,初值为区域内中点,无线性或非线性约束。
建立m1脚本文件,写入下列程序:
fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));
lb = [0,0];%x(1),x(2)的下界
ub = [1,2];%x(1),x(2)的上界
A = [];%没有线性或非线性约束,矩阵里面为空
b = [];
Aeq = [];
beq = [];
x0 = (lb + ub)/2;%初值选取区域中部的初始点
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
运行m1.m脚本文件解得x如下:
x =
1.0000 2.0000
以上内容总结于matlab帮助文档,详细内容请自行参阅文档!