MATLAB学习打卡第三天——非线性规划(1)

目录

1,引文

2,分析

3,线性不等式约束

4,线性不等式和等式约束

5,带有非线性约束的求最值

6,非线性约束


1,引文

原文教程为川川菜鸟的《第二天打卡-整数规划(1)》

链接为第三天打卡--非线性规划(1)_python菜鸟-CSDN博客

有需要者自取。

2,分析

前两天,我们系统地学习了线性规划。我们现在已经能够熟练地利用MATLAB对线性规划的模型进行处理了。

但实际生活中,能让我们恰好使用线性规划模型去解决的问题又有多少呢?
归根结底,能够恰好线性规划的问题终究是少数,那不能用线性规划,我们该用什么?那自然是非线性规划了。

非线性规划的模型如下所示

第一行和第二行自然无需多说,那么第三行和第四行,可能有同学看到就懵了。其实很好理解,第三行和第四行就是非线性状态下的前两行。举个实例,X^2+2X<=6,X^2-X=12就可以分别放在第三行第四行中。

同时,为了解决非线性规划这个问题,咱们前两天的普通式子就有点捉襟见肘了。为此,给大家介绍一个新函数:fmincon函数。fmincon函数用于寻找约束非线性多变量函数的最小值。这个函数怎么用?

这是语法格式:

x = fmincon(fun,x0,A,b) 从 x0 开始,尝试在满足线性不等式 A*x ≤ b 的情况下寻找 fun 中所述的函数的最小值点 x。x0 可以是标量、向量或矩阵。
x = fmincon(fun,x0,A,b,Aeq,beq) 在满足线性等式 Aeq*x = beq 以及不等式 A*x ≤ b 的情况下最小化 fun。如果不存在不等式,则设置 A = [] 和 b = []。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) 对 x 中的设计变量定义一组下界和上界,使解始终在 lb ≤ x ≤ ub 范围内。如果不存在等式,请设置 Aeq = [] 和 beq = []。如果 x(i) 无下界,请设置 lb(i) = -Inf,如果 x(i) 无上界,请设置 ub(i) = Inf。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 使用 options 所指定的优化选项执行最小化。使用 optimoptions 可设置这些选项。如果没有非线性不等式或等式约束,请设置 nonlcon = []。

而这其中的参数

b 和 beq 是向量,A 和 Aeq 是矩阵,c(x) 和 ceq(x) 是返回向量的函数,f(x) 是返回标量的函数。f(x)、c(x) 和 ceq(x) 可以是非线性函数。
x、lb 和 ub 可以作为向量或矩阵传递

看不懂?不要紧,让我们结合题目来好好地学一学它。

3,线性不等式约束

目标函数:

fun =   (x)100*(x(2)-x(1)^2)^2+(1-x(1))^2

约束方程:X(1)+2X(2)<=1

所以,咱们MATLAB就写成

 看,是不是很简单?

4,线性不等式和等式约束

大家看题,这比咱们上面多了啥?

多了个等式,对吧。

所以类比线性规划,咱们可以

同样可以类比线性规划来记。 

5,带有非线性约束的求最值

目标函数:

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)。

6,非线性约束

当我们要求你在以(1/3,1/3)为圆心,1/3为半径的范围内找一个目标函数的最小值

目标函数:

fun =   (x)100*(x(2)-x(1)^2)^2+(1-x(1))^2

匿名后

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

约束条件:

 0 ≤ x (1) ≤ 0.5 0
 0.2≤x(2)≤0.8

于是

函数代码为

function [c,ceq] = circle(x)
c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2;
ceq = [];
end

主代码为

clc 
clear all
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
lb = [0,0.2];
ub = [0.5,0.8];
A = [];
b = [];
Aeq = [];
beq = [];
x0 = [1/4,1/4];


nonlcon = @circle;
[x,y] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_57011726/article/details/121260530