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−6x3x1−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等都按照题目要求进行填写就行
其中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+6x3x12−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等都按照题目要求进行填写就行