6.15打卡
工程数学实验5
• 所花时间:5
• 代码行数:174
• 博客容量:1
• 代码如下:
实验五:MATLAB最优化工具箱的使用
一、实验目的
通过一个农业生产计划优化安排的实例求解,培养学生解决实际线性规划问题的初步能力;熟悉线性规划的建模过程;掌握Matlab优化工具箱中线性规划函数的调用。
二、实验内容
某村计划在100公顷的土地上种植a、b、c三种农作物。可以提供的劳力、粪肥和化肥等资源的数量,种植每公顷农作物所需这三种资源的数量,以及能够获得的利润如表所示。
种植投入产出表
用 工 粪肥(吨) 化肥(千克) 利润(元)
a 450 35 350 1500
b 600 25 400 1200
c 900 30 300 1800
可提供资源 63000 3300 33000
其中一个劳动力干一天为1个工。现在要求为该村制定一个农作物的种植计划,确定每种农作物的种植面积,使得总利润最大。
第二题
求解从一点(0,0,0)到超平面 的最短距离,
其中, , 。
通过建模构造二次规划问题,求解以上问题的最优解和最优值。
三、算法步骤、代码、及结果
1. 算法步骤
目标函数maxZ=1500x1+1200x2+1800x3
约束条件:
450x1+600x2+900x3≤63000
35x1+25x2+30x3≤3300
350x1+400x2+300x3≤33000
x1+x2+x3≤100
x1≥0,x2≥0,x3≥0
第二题
决策变量 x1 x2 x3
目标函数:minf(x)=x1^2+x2^2+x3^2
约束条件:x1+2x2+x3=4
−x1+x2−x3=2
2. 代码
第一题
% 定义线性规划问题的参数
f = [-1500, -1200, -1800]; % 目标函数系数 (求最大化,转换为最小化)
A = [450, 600, 900;
35, 25, 30;
350, 400, 300;
1, 1, 1]; % 不等式约束系数矩阵
b = [63000; 3300; 33000; 100]; % 不等式约束的右侧向量
% 下界
lb = [0, 0, 0];
% 求解线性规划问题
[x, fval] = linprog(f, A, b, [], [], lb);
% 输出最优解和最优值
fprintf('最优解:\n');
fprintf('种植面积a: %.2f 公顷\n', x(1));
fprintf('种植面积b: %.2f 公顷\n', x(2));
fprintf('种植面积c: %.2f 公顷\n', x(3));
fprintf('\n对应的最优值(总利润): %.2f 元\n', -fval);
第二题代码
% 定义目标函数的系数矩阵 (二次项系数矩阵) 和线性项系数向量
H = 2 * eye(3); % 由于目标函数为 x1^2 + x2^2 + x3^2, 故H为单位矩阵乘2
f = zeros(3, 1); % 目标函数中线性项系数向量为0
% 定义等式约束
Aeq = [1 2 1; -1 1 -1]; % 系数矩阵
beq = [4; 2]; % 右侧常数向量
% 求解二次规划问题
options = optimoptions('quadprog', 'Display', 'off');
[x, fval] = quadprog(H, f, [], [], Aeq, beq, [], [], [], options);
% 输出最优解和最优值
fprintf('最优解:\n');
fprintf('x1: %.4f\n', x(1));
fprintf('x2: %.4f\n', x(2));
fprintf('x3: %.4f\n', x(3));
fprintf('\n对应的最优值(最短距离的平方): %.4f\n', fval);
3. 结果
四、心得体会
通过这次实验,我学习并掌握了MATLAB优化工具箱中二次规划函数的调用方法,并通过一个实际的投资组合优化问题的实例,培养了解决实际线性规划问题的初步能力。二次规划在目标函数中包含二次项,可以更准确地描述某些实际问题的优化需求。
浙公网安备 33010602011771号