matlab实验5-MATLAB最优化工具箱的使用

  1. 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
  1. 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


posted @ 2025-06-04 23:08  vivi_vimi  阅读(16)  评论(0)    收藏  举报