通俗易懂的Matlab线性规划求解详解

线性规划(Linear Programming LP)问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。

在matlab中,线性规划的标准形式如下
{ A x ≤ b a e q ⋅ x = b e q l b ≤ x ≤ u b \begin{cases} Ax\le b \\ aeq·x=beq \\ lb\le x\le ub \end{cases} Axbaeqx=beqlbxub
它的标准形式求得都是最小值,若是最大值要转化为求最小值
matlab函数为

[x, fval] = linprog(f, A, b, aeq, beq, lb, ub, options)

这里的各参数对应上的公式,举个例子来说明
m a x z = 2 x 1 + 3 x 2 − 5 x 3 max\quad z=2x_1+3x_2-5x_3 maxz=2x1+3x25x3
{ x 1 + x 2 + x 3 = 7 2 x 1 − 5 x 2 + x 3 ≥ 10 x 1 + 3 x 2 + x 3 ≤ 12 x 1 , x 2 , x 3 ≥ 0 \begin{cases} x_1+x_2+x_3=7 \\ 2x_1-5x_2+x_3\ge 10 \\ x_1+3x_2+x_3\le 12 \\ x_1,x_2,x_3\ge 0 \end{cases} x1+x2+x3=72x15x2+x310x1+3x2+x312x1,x2,x30
求解代码:

clc,clear;
f = [2; 3; -5];
a = [-2 5 -1; 1 3 1];
b = [-10; 12];
aeq = [1 1 1];
beq = 7;
lb = zeros(3, 1);
%//f取-f意为取反的最小值
[x, fval] = linprog(-f, a, b, aeq, beq, lb);
fprintf('x1=%.4f, x2=%.4f, x3=%.4f\nz=%.4f\n', x, -fval);

结果为:

x1=6.4286, x2=0.5714, x3=0.0000
z=14.5714

猜你喜欢

转载自blog.csdn.net/UCB001/article/details/112884032
今日推荐