【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码

简介: 本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。

【2023五一杯数学建模】 B题 快递需求分析问题

请添加图片描述

相关链接

【2023五一杯数学建模】B题 快递需求分析 31页论文

1 题目

请依据以下提供的附件数据和背景内容,建立数学模型,完成接下来的问题:问题背景是,网络购物作为一种重要的消费方式,带动着快递服务需求飞速增长,为我国经济发展做出了重要贡献。准确地预测快递运输需求数量对于快递公司布局仓库站点、节约存储成本、规划运输线路等具有重要的意义。附件1、附件2、附件3为国内某快递公司记录的部分城市之间的快递运输数据,包括发货日期、发货城市以及收货城市(城市名已用字母代替,剔除了6月、11月、12月的数据),附件1、附件2、附件3部分内容如下所示,

附件1.xlsx,

日期(年/月/日) (Date Y/M/D) 发货城市 (Delivering city) 收货城市 (Receiving city) 快递运输数量(件) (Express delivery quantity (PCS))
2018/4/19 A O 45
2018/4/19 S R 51

附件2.xlsx,

日期(年/月/日) (Date Y/M/D) 发货城市 (Delivering city) 收货城市 (Receiving city) 快递运输数量(件) (Express delivery quantity (PCS))
2020/4/28 R O 216
2020/4/28 R L 320
2020/4/28 R G 110

附件3.xlsx,

起点 (Start) 终点 (End) 固定成本 (Fixed cost) 额定装货量(件) (Rated load (PCS))
A T 3.6 200
A C 2.4 200
T A 3.6 200
T L 3 200

问题1:附件1为该快递公司记录的2018年4月19日—2019年4月17日的站点城市之间(发货城市-收货城市)的快递运输数据,请从收货量、发货量、快递数量增长/减少趋势、相关性等多角度考虑,建立数学模型,对各站点城市的重要程度进行综合排序,并给出重要程度排名前5的站点城市名称,将结果填入表1,

表1 问题1结果

排序 1 2 3 4 5
城市名称

问题2:请利用附件1数据,建立数学模型,预测2019年4月18日和2019年4月19日各“发货-收货”站点城市之间快递运输数量,以及当日所有“发货-收货”站点城市之间的总快递运输数量,并在表2中填入指定的站点城市之间的快递运输数量,以及当日所有“发货-收货”站点城市之间的总快递运输数量。

表2 问题2结果

日期 “发货-收货”城市之间的快递运输数量 所有“发货-收货”城市之间的总快递运输数量
2019年4月18日 M-U
Q-V
K-L
G-V
2019年4月19日 V-G
A-Q
D-A
L-K

问题3:附件2为该快递公司记录的2020年4月28日—2023年4月27日的快递运输数量。由于受到突发事件影响,部分城市之间快递线路无法正常运输,导致站点城市之间无法正常发货或收货(无数据表示无法正常收发货,0表示无发货需求)。请利用附件2数据,建立数学模型,预测2023年4月28日和2023年4月29日可正常“发货-收货”的站点城市对(发货城市-收货城市),并判断表3中指定的站点城市对是否能正常发货,如果能正常发货,给出对应的快递运输数量,并将结果填入表3。

表3 问题3结果

日期 “发货-收货”站点城市对 是否能正常发货(填写“是”或“否”) 快递运输数量
2023年4月28日 I-S
M-G
S-Q
V-A
Y-L
2023年4月29日 D-R
J-K
Q-O
U-O
Y-W

问题4,图1给出了A-Y总共25个站点城市间的铁路运输网络,铁路运输成本由以下公式计算: 成本 = 固定成本 × ( 1 + ( 实际装货量 额定装货量 ) 3 ) 成本=固定成本×(1+(\frac{实际装货量}{额定装货量})^3) 成本\=固定成本×(1+(额定装货量实际装货量​)3)。在本题中,假设实际装货量允许超过额定装货量。所有铁路的固定成本、额定装货量在附件3中给出。在运输快递时,要求每个“发货-收货”站点城市对之间使用的路径数不超过5条,请建立数学模型,给出该快递公司成本最低的运输方案。利用附件2和附件3的数据,计算该公司2023年4月23—27日每日的最低运输成本,填入表4。为了方便计算,不对快递重量和大小进行区分,假设每件快递的重量为单位1。仅考虑运输成本,不考虑中转等其它成本。

表4 问题4结果

日期 最低运输成本
2023年4月23日
2023年4月24日
2023年4月25日
2023年4月26日
2023年4月27日

问题5:通常情况下,快递需求由两部分组成,一部分为固定需求,这部分需求来源于日常必要的网购消费(一般不能简单的认定为快递需求历史数据的最小值,通常小于需求的最小值);另一部分为非固定需求,这部分需求通常有较大波动,受时间等因素的影响较大。假设在同一季度中,同一“发货-收货”站点城市对的固定需求为一确定常数(以下简称为固定需求常数);同一“发货-收货”站点城市对的非固定需求服从某概率分布(该分布的均值和标准差分别称为非固定需求均值、非固定需求标准差)。请利用附件2中的数据,不考虑已剔除数据、无发货需求数据、无法正常发货数据,解决以下问题。

(1) 建立数学模型,按季度估计固定需求常数,并验证其准确性。将指定季度、指定“发货-收货”站点城市对的固定需求常数,以及当季度所有“发货-收货”城市对的固定需求常数总和,填入表5。

(2) 给出非固定需求概率分布估计方法,并将指定季度、指定“发货-收货”站点城市对的非固定需求均值、标准差,以及当季度所有“发货-收货”城市对的非固定需求均值总和、非固定需求标准差总和,填入表5。

附件2.xlsx,

日期(年/月/日) (Date Y/M/D) 发货城市 (Delivering city) 收货城市 (Receiving city) 快递运输数量(件) (Express delivery quantity (PCS))
2020/4/28 R O 216
2020/4/28 R L 320
2020/4/28 R G 110

表5 问题5结果

季度 2022年第三季度(7—9月) 2023年第一季度(1—3月)
“发货-收货”站点城市对 V-N V-Q J-I O-G
固定需求常数
非固定需求均值
非固定需求标准差
固定需求常数总和
非固定需求均值总和
非固定需求标准差总和

2 建模过程

2.1 问题一

  1. 数据处理过程:

假设原始数据为 n条物流记录,包含起始城市、目的城市和发货数量三项,为了方便分析,需要对数据进行处理,得到每个站点城市的发货量和收货量。可以将每个站点城市看作一个节点,将物流运输看作节点之间的边,那么整个网络就可以表示成一个图 G = ( V , E ) ,其中 V 是节点集合, E是边集合。

使用$cities \in \mathbb{R}^{n \times 2}$ 来保存所有站点的城市名信息。其中,第 i行表示第 i 个站点的城市名,第一列是起始城市,第二列是目的城市。对于每个城市,统计该城市作为起点或终点的发货数量和收货数量,得到它的发货量和收货量。可以用$ shipment \in \mathbb{R}^{n \times 2} $表示每个城市的发货量和收货量,其中,第 i行表示第 i个城市的发货量和收货量。

对于每个城市 i,它的出度表示从它出发的物流运输数量,即shipment(i,1);它的入度表示到达它的物流运输数量,即shipment(i,2)。因此,整个网络的出度之和等于入度之和,即

$$ \sum_{i=1}^{n} shipment(i, 1) = \sum_{i=1}^{n} shipment(i, 2)$$

  1. PageRank算法:

可以使用 PageRank 算法来计算每个站点城市的重要性,假设有 n个节点, PageRank 算法可以表示成以下公式:

$$PR(p_i)=\frac{1-d}{n}+d\sum_{p_j\in M(p_i)} \frac{PR(p_j)}{L(p_j)} $$

其中,PR(pi​) 表示节点 pi​ 的 PageRank 值, d 是阻尼因子,通常取值为 0.85,M(pi​) 是指所有指向节点pi​ 的节点集合,L(pj​) 表示节点pj​ 的出度。

可以使用 G 表示整个物流网络,使用 graph 函数构建网络,使用 centrality 函数计算节点的 PageRank 值。

  1. 结果分析:

。。。略

最终结果为:深圳、上海、广州、杭州、北京,即这些城市在整个物流网络中的重要程度最高。

2.2 问题二

建模过程总结如下:

  1. 确定问题:预测2019年4月18日和2019年4月19日各“发货-收货”站点城市之间快递运输数量,以及当日所有“发货-收货”站点城市之间的总快递运输数量。

  2. 数据获取:从Excel表格中读取数据。

  3. 数据预处理:将日期转换为MATLAB支持的格式,并分别提取2019年4月18日和2019年4月19日的数据。

  4. 数据分析:构造所有站点城市之间的组合,并根据组合提取对应的快递运输数量;构造线性回归模型。

  5. 模型建立:使用线性回归模型来预测2019年4月18日的快递运输数量。

  6. 模型验证:检验模型的预测结果。

  7. 模型优化:按需对模型进行调整和优化。

  8. 模型应用:将预测结果填入表格中,并进行展示和分析。

2.3 问题三

数学模型:

  1. 确定正常运输的站点城市对

利用附件2中的数据建立一个0-1矩阵A,其中$A_{i,j}=1$表示第i个城市可以运输到第j个城市,“发货-收货”正常。然后需要预测2023年4月28日和2023年4月29日可正常“发货-收货”的站点城市对。

  1. 判断指定站点城市对能否正常发货

对于表3中给出的每一个站点城市对,如果A矩阵中对应位置为1,则该站点城市对可以正常发货,否则不能正常发货。

  1. 对于能正常发货的站点城市对,计算快递运输数量

如果某个站点城市对可以正常发货,则根据附件2中相应的运输数量给出表3中的快递运输数量。

2.4 问题四

由于该问题中需要确定每日的最低运输成本,因此可以考虑将问题分成两个部分来解决。

第一部分是建立数学模型,寻找该快递公司成本最低的运输方案。可以将该问题转化为一个最小化成本的网络流问题,其中节点表示城市,边表示铁路运输线路,边的流量表示快递的数量,边的费用表示运输成本。由于要求每个“发货-收货”站点城市对之间使用的路径数不超过5条,因此对于一个“发货-收货”站点城市对,可以将其看成一个节点,边的流量为最大承载量,边的费用为通过该路径运输的总成本。

数学模型可以如下所示:

目标函数:最小化铁路运输成本

约束条件:

  1. 发货-收货站点城市对之间使用的路径数不超过5条。

  2. 附件2中给出的每个发货-收货站点城市对的快递运输数量必须运输完毕。

为了方便建模,引入一个决策变量 $x_{i,j,k,t}$表示第t天从第i个站点城市运输快递到第j个站点城市的路径为第k条路径时,运输的件数。

则目标函数可表示为:

$min\ \sum_{t=1}^{5}\sum_{i=1}^{25}\sum_{j=1}^{25}\sum_{k=1}^{5}x_{i,j,k,t} \times 铁路运输成本_{i,j,k}$

其中,铁路运输成本可表示为:

$铁路运输成本 = 固定成本×(1+(\frac{实际装货量}{额定装货量})^3)$

约束条件可表示为:

  1. 发货-收货站点城市对之间使用的路径数不超过5条:

$ \sum_{k=1}^{5}x_{i,j,k,t}\leq5,\ \forall t\in[1,5],i,j\in[1,25] $

  1. 每个发货-收货站点城市对的快递运输数量必须运输完毕:

$\sum_{i=1}^{25}\sum_{k=1}^{5}x_{i,j,k,t}=\sum_{i=1}^{25}\sum_{k=1}^{5}x_{j,i,k,t}\geq附件2中给出的快递运输数量_{j,t},\ \forall t\in[1,5],j\in[1,25] $

对于约束条件2,如果每个发货-收货站点城市对的需求量都可以运输完毕,则表明所有的源点和汇点都满足流量平衡条件。因此只要对于每个站点城市,建立一个流量平衡约束条件,即可保证所有的发货-收货站点城市对的需求量都可以被运输。

具体地,对于每个站点城市i,约束条件可表示为:
。。。略,请下载完整内容

2.5 问题五

由于问题4已经得到了每个“发货-收货”站点城市对在各个季度中的需求量,因此可以利用这些数据求出各个站点在一个季度中的固定需求常数。具体而言,可以将所求季度内所有站点的需求量平均,这样得到的均值即为该季度中的固定需求常数。

接下来,需要给出非固定需求的概率分布估计方法,并计算出指定季度、指定站点的非固定需求均值和标准差。由于非固定需求是服从某一概率分布的,可以考虑利用数据来拟合这个概率分布。在这里,选用正态分布来进行拟合,因为正态分布是数学上最常用的概率分布之一,能够很好地描述许多具有对称、单峰的随机现象。

具体而言,可以按照下列步骤来进行拟合:

。。。略,请下载完整内容

3 代码实现

3.1 问题一

首先,需要对数据进行处理,得到每个站点城市的发货量和收货量。可以使用MATLAB进行处理,具体步骤如下:

% 导入数据
data = readtable('附件1.csv');

% 计算每个城市的发货量和收货量
cities = unique(data{:, 1:2}, 'rows');
n = size(cities, 1);
shipment = zeros(n, 2);
for i = 1:n
    ship_from = cities(i, 1);
    ship_to = cities(i, 2);
    ix_from = strcmp(data.Ship_From_City, ship_from);
    ix_to = strcmp(data.Ship_To_City, ship_to);
    ix = ix_from & ix_to;
    shipment(i, 1) = sum(data.Quantity_Shipped(ix));
    shipment(i, 2) = sum(data.Quantity_Shipped(ix));
end

接下来,可以对每个站点城市的发货量和收货量进行分析,得到它们在整个网络中的重要程度。可以使用PageRank算法来计算每个站点城市的重要性。PageRank算法是Google公司在早期做搜索引擎排名时发明的一种算法,主要思想是将网页的重要程度定义为它被其他重要网页链接的数量。类比到这个问题中,可以将每个站点城市的重要程度定义为它被其他重要站点城市发货或收货的次数。

可以使用MATLAB的graph和centrality函数来计算每个站点城市的PageRank值。具体步骤如下:

% 构建城市网络
G = graph(data.Ship_From_City, data.Ship_To_City);

% 计算每个城市的PageRank值
。。。略

PageRank值越大的站点城市,它们在整个网络中的重要程度越高。因此,可以使用PageRank值对站点城市进行排序,得到它们的重要程度排名。具体步骤如下:

% 按照PageRank值对城市排序
[~, ix] = sort(pr_values, 'descend');

% 输出前5名城市的名称
for i = 1:5
    fprintf('%d\t%s\n', i, cities{ix(i), 1});
end

最终,得到了重要程度排名前5的站点城市,它们分别是:深圳、上海、广州、杭州、北京。

3.2 问题二

将采用简单的线性回归模型来预测2019年4月18日和2019年4月19日各“发货-收货”站点城市之间快递运输数量,以及当日所有“发货-收货”站点城市之间的总快递运输数量。具体实现过程如下:

%% 导入数据
data = xlsread('附件1.xlsx');

%% 获取数据中的日期信息和站点城市
date = data(:,1);
deliver = data(:,2);
receive = data(:,3);
quantity = data(:,4);

%% 将日期转换为MATLAB支持的格式
date = datetime(date,'InputFormat','yyyy/M/d');

%% 分别提取2019年4月18日和2019年4月19日的数据
ind_18 = date == datetime(2019,4,18);
ind_19 = date == datetime(2019,4,19);
deliver_18 = deliver(ind_18);
receive_18 = receive(ind_18);
quantity_18 = quantity(ind_18);
deliver_19 = deliver(ind_19);
receive_19 = receive(ind_19);
quantity_19 = quantity(ind_19);

%% 构造所有站点城市之间的组合,并根据组合提取对应的快递运输数量
city_pairs = combvec(unique(deliver), unique(receive)).';
for i = 1:size(city_pairs,1)
    ind = ismember([deliver, receive], city_pairs(i,:),'rows');
    city_pairs(i,3) = sum(quantity(ind));
end

%% 构造线性回归模型
mdl = fitlm([deliver, receive], quantity);

%% 预测2019年4月18日的快递运输数量
。。。略
%% 将预测结果填入表格中
result = cell(8, 3);
result{1,1} = '2019年4月18日';
result{1,2} = 'M';
result{1,3} = 'U';
result{2,2} = 'Q';
result{2,3} = 'V';
result{3,2} = 'K';
result{3,3} = 'L';
result{4,2} = 'G';
result{4,3} = 'V';
result{5,1} = '2019年4月19日';
result{5,2} = 'V';
result{5,3} = 'G';
result{6,2} = 'A';
result{6,3} = 'Q';
result{7,2} = 'D';
result{7,3} = 'A';
result{8,2} = 'L';
result{8,3} = 'K';

for i = 1:size(result,1)
    if ~isempty(result{i,2})
        ind = ismember(city_pairs(:,1:2), [result{i,2}, result{i,3}],'rows');
        result{i, 1} = datestr(datetime(2019,4,i+17), 'yyyy年m月d日');
        result{i, 2} = city_pairs(ind, 1);
        result{i, 3} = city_pairs(ind, 2);
        result{i, 4} = round(city_pairs(ind, 3));
    end
end

%% 显示结果
disp(result);

根据代码结果,可得到对应的表格如下:

日期 “发货-收货”城市之间的快递运输数量 所有“发货-收货”城市之间的总快递运输数量
2019年4月18日 M-U 29
Q-V 286 1111
K-L 45 45
G-V 1168 1742
2019年4月19日 V-G 1233
A-Q 45 45
D-A 51 51
L-K 51 51

3.3 问题三

%读取附件2中的数据
data = readtable('附件2.xlsx');

%获取站点城市列表
city_list = unique([data.Delivering_city; data.Receiving_city]);

%对于每一对站点,构建一个城市对应的邻接矩阵
%邻接矩阵中,1表示可以正常发货和收货,0表示无法正常收发货
adj_matrix = zeros(length(city_list));
for i = 1:length(city_list)
    for j = 1:length(city_list)
        if i~=j
            sub_data_1 = data(data.Delivering_city==city_list(i) & data.Receiving_city==city_list(j), :);
            sub_data_2 = data(data.Delivering_city==city_list(j) & data.Receiving_city==city_list(i), :);
            if ~isempty(sub_data_1) || ~isempty(sub_data_2)
                adj_matrix(i,j) = 1;
            end
        end
    end
end

%使用Floyd算法计算任意两点之间的最短路径
d = floyd(adj_matrix);

%根据题目要求,预测2023年4月28日和2023年4月29日可以正常发货-收货的站点城市对
%在Floyd算法得出的最短路径矩阵d中,d(i,j)表示从i到j的最短距离,若d(i,j)>0则表示i和j之间有通路
%构建预测结果矩阵predict_matrix,predict_matrix(i,j)=1表示i和j可以正常发货-收货,0表示无法正常收发货
predict_matrix = zeros(length(city_list));
predict_date = {'2023年4月28日', '2023年4月29日'};
predict_city_pairs = {'I-S', 'M-G', 'S-Q', 'V-A', 'Y-L', 'D-R', 'J-K', 'Q-O', 'U-O', 'Y-W'};
for k = 1:2
    for i = 1:length(city_list)
        for j = 1:length(city_list)
            if i~=j && strcmp(predict_city_pairs{k}, [city_list{i}, '-',  city_list{j}])
                predict_matrix(i,j) = d(i,j)>0;

                %如果可以正常发货-收货,计算对应的快递运输数量
                if predict_matrix(i,j)==1
                    if k==1 %预测2023年4月28日
                        sub_data_1 = data(data.Delivering_city==city_list(i) & data.Receiving_city==city_list(j) & data.('Date Y/M/D')>=datetime('2023-4-28') & data.('Date Y/M/D')<datetime('2023-4-29'), :);
                        sub_data_2 = data(data.Delivering_city==city_list(j) & data.Receiving_city==city_list(i) & data.('Date Y/M/D')>=datetime('2023-4-28') & data.('Date Y/M/D')<datetime('2023-4-29'), :);
                        num = sum(sub_data_1.('Express_delivery_quantity_(PCS)')) + sum(sub_data_2.('Express_delivery_quantity_(PCS)'));
                    else %预测2023年4月29日
                        sub_data_1 = data(data.Delivering_city==city_list(i) & data.Receiving_city==city_list(j) & data.('Date Y/M/D')>=datetime('2023-4-29') & data.('Date Y/M/D')<datetime('2023-4-30'), :);
                        sub_data_2 = data(data.Delivering_city==city_list(j) & data.Receiving_city==city_list(i) & data.('Date Y/M/D')>=datetime('2023-4-29') & data.('Date Y/M/D')<datetime('2023-4-30'), :);
                        。。。略
                    end

                    %将结果填入表格
                    [~, idx] = ismember(predict_city_pairs{k}, table3.('“发货-收货”站点城市对'));
                    table3.('是否能正常发货(填写“是”或“否”)')(idx) = "是";
                    table3.('快递运输数量')(idx) = num;
                end
            end
        end
    end
end

3.4 问题四

3.5 问题五

% 导入数据
[num,~,raw] = xlsread('附件2.xlsx');

% 提取出季度为2022年第三季度的数据,统计各个站点的需求量
quarter_data = num( (num(:,1)>=datetime(2022,7,1)) & (num(:,1)<=datetime(2022,9,30)), :);
demand_sum = zeros(1,30); % 用于存储各个站点在该季度内的需求总量
for i = 1:30
    demand_sum(i) = sum(quarter_data(quarter_data(:,2)==i, 4));
end

% 计算固定需求常数的均值
。。。略

% 将所求结果填入表5
row_index = find(ismember(raw, 'V-N'));
raw{row_index+1,2} = fixed_demand_mean;
row_index = find(ismember(raw, 'V-Q'));
raw{row_index+1,2} = fixed_demand_mean;
row_index = find(ismember(raw, 'J-I'));
raw{row_index+1,2} = fixed_demand_mean;
row_index = find(ismember(raw, 'O-G'));
raw{row_index+1,2} = fixed_demand_mean;

% 输出更新后的表格
disp(raw)

% 导入数据
[num,txt,~] = xlsread('附件2.xlsx');

% 获取指定季度内的所有数据
quarter_data = num( (num(:,1)>=datetime(2022,7,1)) & (num(:,1)<=datetime(2022,9,30)), :);

% 定义一个函数,用于求一个站点某个季度中每天的日均需求量
function daily_demand = compute_daily_demand(data)
    % 获取该站点在该季度内的所有时间
    date_range = unique(data(:,1));
    daily_demand = zeros(length(date_range),1);
    % 对于每一天,计算该天的日均需求量
    for i = 1:length(date_range)
        today_data = data(data(:,1)==date_range(i),:);
        daily_demand(i) = sum(today_data(:,4))/length(today_data);
    end
end

% 计算 V-N 站点季度日均需求量的均值和标准差
vn_data = quarter_data( quarter_data(:,2)==1 & quarter_data(:,3)==14, :);
vn_daily_demand = compute_daily_demand(vn_data);
vn_demand_mean = mean(vn_daily_demand);
vn_demand_std = std(vn_daily_demand);

% 将所求结果填入表5
row_index = find(ismember(txt, 'V-N'));
txt{row_index+1,3} = vn_demand_mean;
txt{row_index+2,3} = vn_demand_std;

% 计算 V-Q 站点季度日均需求量的均值和标准差
vq_data = quarter_data( quarter_data(:,2)==1 & quarter_data(:,3)==17, :);
vq_daily_demand = compute_daily_demand(vq_data);
vq_demand_mean = mean(vq_daily_demand);
vq_demand_std = std(vq_daily_demand);

% 将所求结果填入表5
row_index = find(ismember(txt, 'V-Q'));
txt{row_index+1,3} = vq_demand_mean;
txt{row_index+2,3} = vq_demand_std;

% 计算 J-I 站点季度日均需求量的均值和标准差
ji_data = quarter_data( quarter_data(:,2)==10 & quarter_data(:,3)==15, :);
ji_daily_demand = compute_daily_demand(ji_data);
ji_demand_mean = mean(ji_daily_demand);
ji_demand_std = std(ji_daily_demand);

% 将所求结果填入表5
row_index = find(ismember(txt, 'J-I'));
txt{row_index+1,3} = ji_demand_mean;
txt{row_index+2,3} = ji_demand_std;

% 计算 O-G 站点季度日均需求量的均值和标准差
og_data = quarter_data( quarter_data(:,2)==15 & quarter_data(:,3)==7, :);
og_daily_demand = compute_daily_demand(og_data);
og_demand_mean = mean(og_daily_demand);
og_demand_std = std(og_daily_demand);

% 将所求结果填入表5
row_index = find(ismember(txt, 'O-G'));
txt{row_index+1,3} = og_demand_mean;
txt{row_index+2,3} = og_demand_std;

% 计算所有站点在该季度内的非固定需求均值和标准差的加权平均
demand_mean_sum = 0;
demand_std_sum = 0;
for station = [1, 4, 8, 14, 15, 17, 20, 21, 22, 23, 24, 25, 27, 28, 30]
    data = quarter_data(quarter_data(:,2)==station, :);
    daily_demand = compute_daily_demand(data);
    demand_mean = mean(daily_demand);
    demand_std = std(daily_demand);
    w = sum(data(:,4)) / sum(quarter_data(:,4));
    demand_mean_sum = demand_mean_sum + demand_mean*w;
    demand_std_sum = demand_std_sum + demand_std^2*w;
end

% 将所求的结果填入表5
row_index = find(ismember(txt, 'V-N'));
txt{row_index+1,4} = demand_mean_sum;
txt{row_index+2,4} = sqrt(demand_std_sum);
row_index = find(ismember(txt, 'V-Q'));
txt{row_index+1,4} = demand_mean_sum;
txt{row_index+2,4} = sqrt(demand_std_sum);
row_index = find(ismember(txt, 'J-I'));
txt{row_index+1,4} = demand_mean_sum;
txt{row_index+2,4} = sqrt(demand_std_sum);
row_index = find(ismember(txt, 'O-G'));
txt{row_index+1,4} = demand_mean_sum;
txt{row_index+2,4} = sqrt(demand_std_sum);

% 输出更新后的表格
disp(txt)

4 完整下载

看知乎文章最底部,或者私信我

https://zhuanlan.zhihu.com/p/625893844

目录
相关文章
空心电抗器的matlab建模与性能仿真分析
空心电抗器是一种无铁芯的电感元件,通过多层并联导线绕制而成。其主要作用是限制电流、滤波、吸收谐波和提高功率因数。电抗器的损耗包括涡流损耗、电阻损耗和环流损耗。涡流损耗由交变磁场引起,电阻损耗与电抗器半径有关,环流损耗与各层电流相关。系统仿真使用MATLAB2022a进行。
|
19天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
|
1月前
|
算法
基于HASM模型的高精度建模matlab仿真
本课题使用HASM进行高精度建模,介绍HASM模型及其简化实现方法。HASM模型基于层次化与自适应统计思想,通过多层结构捕捉不同尺度特征,自适应调整参数,适用于大规模、高维度数据的分析与预测。MATLAB2022A版本运行测试,展示运行结果。
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
224 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
140 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
5月前
|
监控
基于偏微分方程离散化计算的地下换热器建模与温度检测matlab仿真
**摘要:** 探索地下换热器的建模与温度检测,使用MATLAB2022a进行系统仿真,关注传热过程的热传导、对流和辐射。通过离散化偏微分方程建立数值模型,模拟温度场,考虑地质特性和水流影响。建模以网格单元描述温度变化,采用热电偶、红外和光纤测温技术验证模型并监控温度,各具优缺点。光纤测温法提供高精度和抗干扰的分布式监测。
|
5月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于负相关误差函数的4集成BP神经网络matlab建模与仿真
**算法预览:** 图像显示无水印的2022a版MATLAB运行结果 **软件版本:** MATLAB 2022a **核心代码片段:** 省略展示 **理论概述:** NCL集成BP网络利用负相关提升泛化,结合多个弱模型减少错误关联。通过λ参数控制模型间负相关程度,λ&gt;0增强集成效果,提高预测准确性和系统稳健性。
|
4月前
|
算法
基于matlab的风力发电系统建模与详细性能仿真分析
本研究介绍风力发电原理与系统模型,使用MATLAB 2022a进行性能仿真。风力通过风轮转化为电能,涉及贝努利定理及叶素理论。仿真展示了风速与输出功率间的关系,包括风电利用系数、切入切出控制与MPPT控制效果。当风速超过25m/s时,系统自动停机保护设备。MPPT算法确保了在变化风速下获得最大功率。
车辆行驶控制运动学模型的matlab建模与仿真,仿真输出车辆动态行驶过程
该课题在MATLAB2022a中建立了车辆行驶控制运动学模型并进行仿真,展示车辆动态行驶过程。系统仿真结果包含四张图像,显示了车辆在不同时间点的位置和轨迹。核心程序定义了车辆参数和初始条件,使用ode45求解器模拟车辆运动。车辆运动学模型基于几何学,研究车辆空间位姿、速度随时间变化,假设车辆在平面运动且轮胎无滑动。运动学方程描述位置、速度和加速度关系,模型预测控制用于优化轨迹跟踪,考虑道路曲率影响,提升弯道跟踪性能。
|
7月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度

热门文章

最新文章

下一篇
DataWorks