matlab实验5-MATLAB最优化工具箱的使用
- linear_programming.m:
% 清除工作空间
clear;
clc;
% 定义问题参数
f = -[1500; 1200; 1800]; % 目标函数系数(求最大利润故取负)
A = [450, 600, 900; % 用工约束系数
35, 25, 30; % 粪肥约束系数
350, 400, 300]; % 化肥约束系数
b = [63000; 3300; 33000]; % 资源约束上限
% 土地约束(总种植面积不超过100公顷)
Aeq = [1, 1, 1];
beq = 100;
% 变量下界(种植面积不能为负)
lb = zeros(3, 1);
% 使用linprog求解线性规划
options = optimoptions('linprog', 'Display', 'iter');
[x, fval, exitflag, output] = linprog(f, A, b, Aeq, beq, lb, [], options);
% 显示结果
if exitflag > 0
fprintf('最优种植计划:\n');
fprintf(' 作物a: %.2f 公顷\n', x(1));
fprintf(' 作物b: %.2f 公顷\n', x(2));
fprintf(' 作物c: %.2f 公顷\n', x(3));
fprintf('最大利润: %.2f 元\n', -fval);
% 检查资源使用情况
fprintf('\n资源使用情况:\n');
fprintf(' 用工: %d/%d (%.1f%%)\n', A(1,:)*x, b(1), 100*(A(1,:)*x)/b(1));
fprintf(' 粪肥: %.1f/%.1f (%.1f%%)\n', A(2,:)*x, b(2), 100*(A(2,:)*x)/b(2));
fprintf(' 化肥: %.1f/%.1f (%.1f%%)\n', A(3,:)*x, b(3), 100*(A(3,:)*x)/b(3));
fprintf(' 土地: %.1f/%.1f (100%%)\n', sum(x), beq);
else
fprintf('未找到最优解。退出标志: %d\n', exitflag);
end
- quadratic_programming.m:
% 清除工作空间
clear;
clc;
% 定义问题参数
A = [1, 2, -1; % 超平面约束矩阵
-1, 1, -1];
b = [4; 2]; % 超平面约束向量
% 二次规划形式: min 1/2*x'*H*x + f'*x
H = 2*eye(3); % 单位矩阵(距离平方最小化)
f = zeros(3, 1); % 线性项为零
% 使用quadprog求解二次规划
options = optimoptions('quadprog', 'Display', 'iter');
[x, fval, exitflag, output] = quadprog(H, f, [], [], A, b, [], [], [], options);
% 显示结果
if exitflag > 0
fprintf('点到超平面的最短距离解:\n');
fprintf(' x = [%.4f, %.4f, %.4f]\n', x(1), x(2), x(3));
fprintf('最短距离: %.4f\n', sqrt(fval));
% 验证约束条件
fprintf('验证约束条件 Ax=b:\n');
fprintf(' A*x = [%.4f; %.4f]\n', A(1,:)*x, A(2,:)*x);
fprintf(' b = [%.4f; %.4f]\n', b(1), b(2));
else
fprintf('未找到最优解。退出标志: %d\n', exitflag);
end



浙公网安备 33010602011771号