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

tech2022-08-30  278

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.Ax≤bAeq∗x=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=−5x1​−4x2​−6x3​x1​−x2​+x3​≤203x1​+2x2​+4x3​≤40x1​−x2​+x3​=70≤x1​≤10,0≤x2​≤12,0≤x3​≤15 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​+6x3​x12​−x2​+x3​≤203x1​+2x2​+4x3​≤40x1​+x2​+x3​=10x1​−x22​+x3​=70≤x1​≤10,0≤x2​≤12,0≤x3​≤15

首先,为了代码方便,所有非线性的条件都以单独.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)