线性规划与非线性规划的简单Matlab实现

tech2022-08-30  121

Matlab一般对于线性规划,非线性规划都有比较标准的函数。这里主要简单粘贴一下基本的一些代码,方便使用

线性规划

目标函数,约束条件标准化

m i n x   c T x s . t . A x ≤ b A e q ∗ x = B e q min_{x}\ c^{T}x\\s.t.Ax\leq{b}\\Aeq*x=Beq minx cTxs.t.AxbAeqx=Beq

Matlab程序 x,fval] = linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)

其中X0为初始值。

举例

m i n   z = − 5 x 1 − 4 x 2 − 6 x 3 x 1 − x 2 + x 3 ≤ 20 3 x 1 + 2 x 2 + 4 x 3 ≤ 40 x 1 − x 2 + x 3 = 7 0 ≤ x 1 ≤ 10 , 0 ≤ x 2 ≤ 12 , 0 ≤ x 3 ≤ 15 min\ z=-5x_{1}-4x_{2}-6x_{3}\\ x_{1}-x_{2}+x_{3}\leq20\\ 3x_{1}+2x_{2}+4x_{3}\leq40\\ x_{1}-x_{2}+x_{3}=7\\ 0\leq x_{1}\leq10,0\leq x_{2}\leq12,0\leq x_{3}\leq15 min z=5x14x26x3x1x2+x3203x1+2x2+4x340x1x2+x3=70x110,0x212,0x315 matlab代码

c = [-5;-4;-6]; A = [1 -1 3;3 2 4]; b = [20;40]; Aeq = [1;-1;1]; beq = [7]; LB = [0;0;0]; UB = [10;12;15]; [x,fval] = linprog(c,A,b,Aeq,beq,LB,UB)

使用说明

把所有的c,A,b等都按照题目要求进行填写就行

非线性规划

目标函数,约束条件标准化Matlab程序 [x,fval]=fmincon(fun,X0,A,b,Aeq,beq,LB,UB,NONLCON,OPTIONS)

其中NONLCON是非线性约束条件

举例

m i n   z = x 1 2 + x 2 2 + 6 x 3 x 1 2 − x 2 + x 3 ≤ 20 3 x 1 + 2 x 2 + 4 x 3 ≤ 40 x 1 + x 2 + x 3 = 10 x 1 − x 2 2 + x 3 = 7 0 ≤ x 1 ≤ 10 , 0 ≤ x 2 ≤ 12 , 0 ≤ x 3 ≤ 15 min\ z=x_{1}^{2}+x_{2}^{2}+6x_{3}\\ x_{1}^{2}-x_{2}+x_{3}\leq20\\ 3x_{1}+2x_{2}+4x_{3}\leq40\\ x_{1}+x_{2}+x_{3}=10\\ x_{1}-x_{2}^{2}+x_{3}=7\\ 0\leq x_{1}\leq10,0\leq x_{2}\leq12,0\leq x_{3}\leq15 min z=x12+x22+6x3x12x2+x3203x1+2x2+4x340x1+x2+x3=10x1x22+x3=70x110,0x212,0x315

首先,为了代码方便,所有非线性的条件都以单独.m形式的文件给出

目标函数 function f=fun1(x); f=x(1)^2+x(2)^2+6x(3); 约束条件 function [g,h]=fun2(x); g=-x(1)^2-x(2)+x(3); h=x(1)-x(2)^2+x(3);

其次在主程序中写代码:

fun = 'fun1'; x0 = rand(3,1); A = [3;2;4]; b = [20]; Aeq = [1;1;1]; beq = [10]; LB = [0;0;0]; UB = [10;12;15]; NONLCON = 'fun2'; [x,fval]=fmincon(fun,X0,A,b,Aeq,beq,LB,UB,NONLCON,OPTIONS)

使用说明

把所有的fun,A,b等都按照题目要求进行填写就行

最新回复(0)