目录
一、非线性规划模型
matlab中非线性规划的数学模型写成一下形式:
二、非线性规划函数
fmincon函数用于寻找约束非线性多变量函数的最小值。
语法格式为:
x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
注释:(对比模型和语法来看)
1.从 x0 开始,尝试在满足线性不等式 A*x ≤ b 的情况下寻找 fun 中所述的函数的最小值点 x。x0 可以是标量、向量或矩阵。
2.在满足线性等式 Aeq*x = beq 以及不等式 A*x ≤ b 的情况下最小化 fun。如果不存在不等式,则设置 A = [] 和 b = []。
3.对 x 中的设计变量定义一组下界和上界,使解始终在 lb ≤ x ≤ ub 范围内。如果不存在等式,请设置 Aeq = [] 和 beq = []。如果 x(i) 无下界,请设置 lb(i) = -Inf,如果 x(i) 无上界,请设置 ub(i) = Inf。
4.使用 options 所指定的优化选项执行最小化。使用 optimoptions 可设置这些选项。如果没有非线性不等式或等式约束,请设置 nonlcon = []。
参数的含义?
b 和 beq 是向量,A 和 Aeq 是矩阵,c(x) 和 ceq(x) 是返回向量的函数,f(x) 是返回标量的函数。f(x)、c(x) 和 ceq(x) 可以是非线性函数。x、lb 和 ub 可以作为向量或矩阵传递。
以下结合实例:
三、线性不等式约束
目标函数:
fun = (x)100*(x(2)-x(1)^2)^2+(1-x(1))^2
约束条件:
从[-1,2]为起点求最小值,约束方程
x(1)+2x(2)<=1
matlab代码:
运行:
四、线性不等式和等式约束
求
matlab代码:
运行:
五、带有非线性约束的求最值:
目标函数:
min f (x) = x1^2 + x2^2 + x3^2 + 8
约束条件:
x1^2 − x2 + x3 ^2 ≥ 0
x1 + x2^2 + x3 ^3 ≤ 20
− x1 − x2^2 + 2 = 0
x2 + 2x3^2 = 3x1
x1,x2 , x3 ≥ 0
matlab代码:
运行后:
目标函数为最小化函数,fun是一个函数,fun接受向量或数组x,并返回实数标量f,即在x处计算的目标函数值。
非线性约束条件,nonlcon是一个函数,接受向量或数组x,并返回两个数组c(x)和ceq(x)。
六、非线性约束
在边界约束下求目标函数在圆内最小的点
目标函数:
fun = (x)100*(x(2)-x(1)^2)^2+(1-x(1))^2
约束条件:
0 ≤ x (1) ≤ 0.5
0.2≤x(2)≤0.8
同时规定在以[1/3,1/3]为圆心、半径为1/3的圆内寻找
通过以上几个条件
得到匿名函数:
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
~
lb = [0,0.2];
ub = [0.5,0.8];
~
function [c,ceq] = circle(x)
c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2;
ceq = [];
~
因为没有线性约束,所以:
A = [];
b = [];
Aeq = [];
beq = [];
综上,整理如下:
运行后:
七、收获
【这次内容从上午就一直在研究,可惜怪本人太菜……】
掌握的部分:
1.了解非线性规划的模型,以及他的语法格式。
2.知道了如何创建匿名函数,和怎样能在创建函数的情况下把代码运行下来。
3.知道3种非线性规划的解决方法
没有掌握的部分
1.options=optimset('largescale','off')的含义。
2.因为创建了匿名函数,身为小白运行不出来,经过了重重阻碍,终于知道怎么运行出来了,那么想对函数创建有更深的了解。