【数学建模 matlab 实验报告3】

上一篇:【数学建模 matlab 实验报告2】

目录

实验报告

代码

实验心得


实验报告

作业1:书上第47页的第1题。给出数学模型、写出MATLAB命令、给出运行结果。

数学模型:
x 为每天动物饲料的总用量(千克),y为每天谷物饲料的总用量(千克)。

目标函数: 最小化总成本。总成本 = 0.30x +0.18y

约束条件:

  • 饲料总量约束:x +y=500(1000只鸡每天0.5千克)
  • 动物饲料比例约束:x ≥0.20×(x +y)
  • 谷物饲料供应限制:y≤6000/7(每周6000千克,换算为每天)
  • 非负约束:x ,y≥0
    数学模型:

Minimize 0.30x+0.18y

subject to ​x +y=500

x ≥0.20(x +y)

y≤6000/7​/7

x ,y ≥0​

Matlab:

作业2:书上第47页的第2题。给出数学模型、写出MATLAB命令、给出运行结果。

数学模型:
定义变量:

  • xij :机床i 加工零件j 的数量,其中i =1,2表示A1和A2机床,j=1,2,3表示B1、B2、B3零件。
    目标函数:

最小化总成本。总成本 = ∑i =12​∑j =13​cijxij ​,其中cij ​是机床i 加工零件j的单位成本。

约束条件:

  • 每种零件的加工数量要满足需求:对于所有jx 1j +x 2j =dj ,其中dj 是零件j的需求量。
  • 机床工作时间限制:对于机床1,∑j =13t 1j x 1j ≤80;对于机床2,∑j =13t 2j x 2j ≤100,其中tij 是机床i 加工零件j所需的时间。
  • 非负约束:对于所有 ijxij≥0。
    数学模型:

Minimize 2x 11​+3x 12​+5x 13​+3x 21​+3x 22​+6x23

subject to ​​x 11​+x21​=70

x 12​+x22​=50

x 13​+x23​=20

x 11​+2x 12​+3x13​≤80

x 21​+x 22​+3x23​≤100

xij ​≥0 for all i =1,2 and j=1,2,3​

Matlab:

作业3:德克萨斯州海岸有一个小型炼油厂。炼油厂的原油来源于两个产地:沙特阿拉伯和委内瑞拉。炼油厂通过蒸馏等技术把原油精炼成三种产品:汽油、气体燃料以及润滑油。由于两个原产地的原油有着不同的化学构成,它们可以精炼出不同的产品组合。每桶沙特阿拉伯原油可精炼出0.3桶汽油、0.4桶气体燃料以及0.2桶润滑油,剩余0.1桶为精炼损失;而每桶委内瑞拉原油可精炼出0.4桶汽油、0.2桶气体燃料以及0.3桶润滑油,剩余0.1桶为精炼损失。同时,两个原产地原油的成本及供应量也不同。炼油厂每天最多可购得9000桶沙特阿拉伯原油,每桶单价100美金;每天最多只能购得6000桶委内瑞拉原油,每桶单价75美金。炼油厂生产出精炼产品供应给不同的批发商。批发商之间相互独立,所有批发商的需求之和为每天2000桶汽油、1500桶气体燃料以及500桶润滑油。

炼油厂应该怎样制定生产计划才能最有效地满足需求?建立相应的数学规划模型;

设x1​为每天购买的沙特阿拉伯原油数量(桶),x2​为每天购买的委内瑞拉原油数量(桶)。

目标函数: 最小化总成本。总成本 = 100x1+75x2

约束条件:

对汽油:0.3x1+0.4x2≥2000(满足2000桶的需求)

对气体燃料:0.4x1+0.2x2≥1500(满足1500桶的需求)

对润滑油:0.2x1+0.3x2≥500(满足500桶的需求)

原油购买限制:x1≤9000,x2≤6000

非负约束:x1,x2≥0

Minimize 100x1+75x2

subject to​ 100x 1​+75x2

​0.3x 1​+0.4x2​≥2000

0.4x 1​+0.2x2​≥1500

0.2x 1​+0.3x2​≥500

x1​≤9000

x2​≤6000

x 1​,x2​≥0​

(2)利用Matlab求解该模型(写出MATLAB命令、给出运行结果)。

代码

Matlab 复制代码
%% 线性规划作业 完整MATLAB代码
% 清空环境变量
clear; clc; close all;
fprintf('========== 线性规划作业求解 ==========\n');

%% ==================== 作业1:饲料配比问题 ====================
fprintf('\n--- 作业1:饲料配比问题 ---\n');
% 数学模型
% min 0.30x + 0.18y
% s.t.
% x + y = 500
% -0.8x + 0.2y <= 0  (由x>=0.2(x+y)转换)
% y <= 6000/7
% x>=0, y>=0

% 目标函数系数
f1 = [0.30; 0.18];
% 不等式约束 A1*x <= b1
A1 = [-0.8, 0.2;
       0,   1];
b1 = [0; 6000/7];
% 等式约束 Aeq1*x = beq1
Aeq1 = [1, 1];
beq1 = 500;
% 变量上下界
lb1 = [0; 0];
ub1 = [];
% 求解
[x1, fval1] = linprog(f1, A1, b1, Aeq1, beq1, lb1, ub1);
% 输出结果
fprintf('最优解:\n');
fprintf('动物饲料用量x = %.4f 千克\n', x1(1));
fprintf('谷物饲料用量y = %.4f 千克\n', x1(2));
fprintf('最小总成本 = %.4f 元\n', fval1);

%% ==================== 作业2:机床加工调度问题 ====================
fprintf('\n--- 作业2:机床加工调度问题 ---\n');
% 决策变量向量化:x11,x12,x13,x21,x22,x23
% 目标函数 min 2x11+3x12+5x13+3x21+3x22+6x23
f2 = [2;3;5;3;3;6];
% 不等式约束(工时限制)
A2 = [1,2,3,0,0,0;
      0,0,0,1,1,3];
b2 = [80; 100];
% 等式约束(需求满足)
Aeq2 = [1,0,0,1,0,0;
        0,1,0,0,1,0;
        0,0,1,0,0,1];
beq2 = [70;50;20];
% 变量非负约束
lb2 = zeros(6,1);
ub2 = [];
% 求解
[x2, fval2] = linprog(f2, A2, b2, Aeq2, beq2, lb2, ub2);
% 输出结果
fprintf('最优解:\n');
fprintf('机床1加工B1:x11 = %.4f\n', x2(1));
fprintf('机床1加工B2:x12 = %.4f\n', x2(2));
fprintf('机床1加工B3:x13 = %.4f\n', x2(3));
fprintf('机床2加工B1:x21 = %.4f\n', x2(4));
fprintf('机床2加工B2:x22 = %.4f\n', x2(5));
fprintf('机床2加工B3:x23 = %.4f\n', x2(6));
fprintf('最小加工总成本 = %.4f\n', fval2);

%% ==================== 作业3:炼油厂生产计划问题 ====================
fprintf('\n--- 作业3:炼油厂生产计划问题 ---\n');
% 数学模型
% min 100x1 +75x2
% s.t.
% 0.3x1+0.4x2 >=2000
% 0.4x1+0.2x2 >=1500
% 0.2x1+0.3x2 >=500
% x1<=9000, x2<=6000
% x1,x2>=0

% 目标函数
f3 = [100; 75];
% 不等式约束(≥转换为≤)
A3 = [-0.3, -0.4;
      -0.4, -0.2;
      -0.2, -0.3;
       1,    0;
       0,    1];
b3 = [-2000; -1500; -500; 9000; 6000];
% 无等式约束
Aeq3 = [];
beq3 = [];
% 变量边界
lb3 = [0; 0];
ub3 = [];
% 求解
[x3, fval3] = linprog(f3, A3, b3, Aeq3, beq3, lb3, ub3);
% 输出结果
fprintf('最优解:\n');
fprintf('沙特阿拉伯原油采购量x1 = %.4f 桶\n', x3(1));
fprintf('委内瑞拉原油采购量x2 = %.4f 桶\n', x3(2));
fprintf('最小总成本 = %.4f 美元\n', fval3);

fprintf('\n========== 所有作业求解完成 ==========\n');

实验心得

本次实验围绕线性规划建模与 MATLAB 优化求解展开,通过完成饲料配比、机床加工调度、炼油厂生产计划三道典型实际问题,系统掌握了线性规划的建模方法、MATLAB 求解流程及结果分析能力,深刻体会到数学规划在工程、生产、资源配置中的实用价值。

实验核心是将实际问题转化为标准线性规划模型,这是求解的关键前提。建模过程中,我学会了明确决策变量、构建目标函数、梳理约束条件的完整步骤:决策变量代表待优化的未知量,需结合问题需求精准定义;目标函数根据成本最小化或收益最大化目标构建,是优化的核心导向;约束条件则对应资源限制、需求满足、比例要求等实际规则,必须全面且严谨。在饲料配比问题中,需将每周供应量换算为每日约束,修正比例约束的等价形式,保证模型的准确性;机床调度问题涉及多变量建模,需将二维决策变量向量化,适配 MATLAB 求解格式;炼油厂问题需结合产品产出比例、原料供应上限、市场需求构建约束,让我理解了复杂实际问题的建模逻辑。

MATLAB 线性规划求解是实验的核心操作环节,通过linprog函数的应用,我掌握了标准线性规划的求解方法。实验中明确了linprog函数的参数规则:目标函数系数向量、不等式约束矩阵与右端向量、等式约束矩阵与右端向量、变量上下界,同时掌握了将≥约束转化为标准≤形式、等式约束单独定义、多变量向量化处理等关键技巧。调试代码时,我解决了约束条件符号错误、变量维度不匹配、参数输入错误等问题,提升了代码调试与问题排查能力,理解了编程严谨性对求解结果的重要性。

结果分析环节让我认识到建模与求解的最终意义。通过解读最优解和最优目标函数值,能够得到实际问题的最优决策方案:饲料配比问题确定了动物饲料与谷物饲料的最佳用量,实现总成本最低;机床调度问题得到了各机床加工各零件的最优数量,平衡了加工成本与工时限制;炼油厂问题明确了两种原油的最佳采购量,在满足市场需求的前提下最小化生产成本。所有求解结果均满足全部约束条件,验证了模型的合理性与求解的正确性,让我切实感受到数学规划将实际问题量化、优化决策的强大作用。

本次实验也让我理解了线性规划的适用场景与核心价值,它是解决资源有限条件下最优配置问题的高效工具,广泛应用于生产管理、物流调度、化工生产等领域。建模过程培养了逻辑思维与抽象概括能力,将复杂实际问题简化为数学模型;求解过程提升了编程实操能力,熟练运用软件工具解决数学问题;结果分析则建立了数学模型与实际应用的连接,让优化结果服务于实际决策。

通过本次实验,我不仅掌握了线性规划建模与 MATLAB 求解的专业技能,更培养了理论联系实际、用数学方法解决工程问题的思维。未来在面对各类资源配置、成本优化问题时,能够快速建立数学模型,借助软件工具高效求解,为实际生产和决策提供科学依据,同时也认识到建模的严谨性、参数设置的准确性是保证优化结果可靠的关键,为后续更复杂的优化问题学习奠定了坚实基础。

相关推荐
小樱花的樱花2 小时前
C++访问权限:封装的艺术
开发语言·c++
bcbobo21cn2 小时前
C#使用一维数组作为参数传递
开发语言·数据库·c#·一维数组
yuanlaile2 小时前
想转后端,java和go学哪个更好?
java·开发语言·golang
盐水冰2 小时前
【WEB模型】CS架构&BS架构&HTML&CSS&JS
开发语言·前端·javascript
阿凤212 小时前
js文件怎么引入到vue3的项目中
开发语言·前端·javascript·vue.js
荒川之神2 小时前
Hive 拉链表实例
开发语言·数据库
王者鳜錸2 小时前
闲鱼商品自动发布实战:基于Java实现API轮询与批量上架
java·开发语言·python·商品自动发布
源码之家2 小时前
计算机毕业设计:汽车数据可视化分析系统 Django框架 Scrapy爬虫 可视化 数据分析 大数据 大模型 机器学习(建议收藏)✅
大数据·python·信息可视化·flask·汽车·课程设计·美食
551只玄猫2 小时前
【数学建模 matlab 实验报告2】
开发语言·数学建模·matlab·课程设计·实验报告