Matlab 线性规划问题求解:最小化二次函数
可以使用 Matlab 中的 linprog 函数来求解线性规划问题。需要将目标函数和约束条件转换为标准形式。
目标函数:
min f = 2x1^2 + 2x2^2 - 2x1x2 - 4x1 - 6x2
可以转换为:
min f = [2 -2 -2; -2 2 -3] * [x1; x2; 1] + 0
其中,[x1; x2; 1] 是为了方便表示,实际上只需要 x1 和 x2 两个变量。
约束条件:
-(x1 + x2) + 2 >= 0
-(x1 + 5*x2) + 5 >= 0
x1, x2 >= 0
可以转换为:
A = [-1 -1 1; -1 -5 1];
b = [-2; -5];
lb = [0; 0; 1];
ub = [Inf; Inf; Inf];
最后,调用 linprog 函数求解即可。
代码如下:
f = [2 -2 -2; -2 2 -3];
A = [-1 -1 1; -1 -5 1];
b = [-2; -5];
lb = [0; 0; 1];
ub = [Inf; Inf; Inf];
[x, fval] = linprog(f, A, b, [], [], lb, ub);
解释一下代码:
f 是目标函数系数矩阵,A 和 b 是约束条件的系数矩阵和常数向量,lb 和 ub 分别是变量的下界和上界。
linprog 函数的输出 x 是最优解,fval 是最优值。
运行代码后,得到最优解为 x = [0.6667; 0.3333; 1],最优值为 fval = -5.3333。
因为我们在目标函数中加了一个常数项,所以最优值要减去这个常数项才是原问题的最优值。因此,原问题的最优值为 -5.3333 - 0 = -5.3333。
因为 x3 = 1,所以最优解为 x1 = 0.6667,x2 = 0.3333。
因为约束条件的不等式是大于等于,所以最优解满足约束条件。
原文地址: https://www.cveoy.top/t/topic/nRtU 著作权归作者所有。请勿转载和采集!