2023年五一杯数学建模
C题 双碳目标下低碳建筑研究
原题再现:
“双碳”即碳达峰与碳中和的简称,我国力争2030年前实现碳达峰,2060年前实现碳中和。“双碳”战略倡导绿色、环保、低碳的生活方式。我国加快降低碳排放步伐,大力推进绿色低碳科技创新,以提高产业和经济的全球竞争力。
低碳建筑是指在建筑材料与设备制造、施工建造和建筑物使用的整个生命周期内,减少化石能源的使用,提高能效,降低二氧化碳排放量。
请查找相关资料,解决以下问题:
问题1:现在有一间长4米、宽3米、高3米的单层平顶单体建筑,墙体为砖混结构,厚度30厘米(热导系数 ),屋顶钢筋混凝土浇筑,厚度30厘米(热导系数 ),门窗总面积5平方(热导系数 ),地面为混凝土 (热导系数 )。该建筑物所处地理位置一年(按365天计算)的月平均温度(单位:摄氏度)见下表。
假设该建筑物内温度需要一直保持在18-26度,在温度不适宜的时候要通过电来调节温度,消耗一度电相当于0.28千克碳排放。请计算该建筑物通过空调(假设空调制热性能系数COP为3.5,制冷性能系数EER为2.7)调节温度的年碳排放量。(尽量使用本题所给条件计算碳排放,不考虑其他损耗)
问题2:在居住建筑的整个生命周期 (建造、运行、拆除)中,影响碳排放的因素有很多,如建筑设计标准、气候、建材生产运输、地区差异、建造拆除能耗、装修风格、使用能耗、建筑类型等。请查找、分析资料,建立数学模型,找出与上述因素相关度大且易于量化的指标,基于这些指标对居住建筑整个生命周期的碳排放进行综合评价。
问题3:在问题2的基础上,分别考虑建筑生命周期三个阶段的碳排放问题,查找相关资料,建立数学模型,对2021年江苏省13个地级市的居住建筑碳排放进行综合评价,并对所建评价模型的有效性进行验证。
问题4:准确的碳排放预测能够为制定减排政策、优化低碳建筑设计提供重要的参考依据。建立碳排放预测模型,基于江苏省建筑全过程碳排放的历史数据,对2023年江苏省建筑全过程的碳排放量进行预测。
问题5:请结合前面的讨论给出江苏省建筑碳减排的政策建议。
整体求解过程概述(摘要)
研究双碳背景下住宅建筑全生命周期碳排放,运用相关分析和主成分分析方法,建立灰色预测模型,旨在促进中国到2030年实现碳峰值,到2060年实现炭中和,促进低碳科技创新,提高人民生活水平。
针对问题1:本课题研究了通过空调调节建筑物室内温度所产生的碳排放,基于导热系数与面积、厚度、温差的关系,建立了热传导数学模型,计算了不同月份建筑物的热流,得出空调年耗电量为1324.71kW,由于每千瓦的耗电量产生0.28kg的碳,通过空调调温的建筑物年碳排放量为370.9192kg。
针对问题2:本课题综合评价了影响住宅建筑全生命周期碳排放的因素。施工阶段选择的指标包括降水量、气温、建筑能耗、建筑面积、建筑材料中的生铁和水泥用量、运营阶段的水耗、电耗和天然气耗、拆迁阶段的建筑垃圾。通过相关性分析,确定这10个指标的相关性大于0.3,表明所选指标与住宅建筑生命周期碳排放量具有一定的相关性。然后利用主成分分析方法,得到了10个指标的综合得分,其中建筑面积对住宅建筑碳排放的影响最大,得分为0.136。
针对第三个问题,在第二个问题的基础上,对江苏省13个地级市的住宅建筑碳排放进行了综合评价。第二个问题是找到12个与碳排放相关的指标,使用Matlab对其进行主成分分析,绘制相关热力学图,并得到综合得分排名:南京碳排放量最多,宿迁最少。找到12个与碳排放相关的指标,使用Matlab对其进行主成分分析,绘制相关热力学图,得到综合得分排序为:南京、苏州、南通、无锡、常州、扬州、徐州、台州、盐城、淮安、连云港、镇江、宿迁,表明南京碳排放量最多,宿迁最少。
对于问题4:基于江苏省建设全过程碳排放的历史数据,本课题对2023年的碳排放进行了预测。基于江苏省2015-2022年全建设过程碳排放的历史数据,利用灰色预测中的GM(1,1)模型,预测2023年江苏省全建设过程的碳排放量为155.76万吨。
针对问题5:在分析前四个问题的基础上,从材料、施工、运营、拆迁指标、区域差异和碳排放发展趋势等方面提出了江苏省碳减排的建议,如适当增加墙体厚度、控制建筑面积和提高绿化率、减少建筑垃圾排放、平衡各区域经济发展。
模型假设:
结合本题的实际,为确保模型求解的准确性和合理性,本文排除一些因素的干扰,提出以下几点假设:
1.假设计算相关建筑的能耗,门窗面积对其无影响;
2.假设计算建筑物热损失时不存在极端因素;
3.在计算调节能耗时,假设空调调节不高于18度或低于26度。
问题分析:
问题1分析
问题1需要研究通过空调温度计算建筑物的年碳排放量。首先,由于空调有制冷和制热两种模式,不需要打开空调,十二个月分为三个部分。第一部分是:11月至4月,空调需要开启暖风;第二部分是6月至8月。空调需要开启冷风;第三部分是5月、9月和10月,不需要打开空调。如果高于26度,则需要调整到26度;对于低于18度的情况,需要打结到18度。地面、墙壁和屋顶的厚度为30cm,门窗面积太小。通过建筑物与外界换热功率与导热系数、接触面积、厚度和温差、建筑物传热热流、热流比和热(冷)性能系数的关系,可以计算出空调器的工作功率、空调器的电耗和年碳排放量。
问题2分析
问题2需要分析一些指标,以全面评估住宅建筑在其整个生命周期中的碳排放量。建筑物的整个生命周期包括三个阶段:建造、运营和拆除。本文寻找了2018年至2021年中国住宅建筑的年度碳排放量,并选取了10个指标,其中包括建设、运营和拆迁三个阶段的重要影响因素。首先,利用相关性分析来判断碳排放量与这六个指标之间是否存在相关性。然后利用主成分分析方法对数据进行降维,给出不同主成分对应贡献率的权重,最后得出各指标对碳排放的重要性。
问题3分析
问题3需要根据对问题2中获得的相关结果的分析,并考虑建筑生命周期三个阶段的相关排放,于2021年对江苏省13个地级市的住宅建筑的碳排放进行综合评估。寻找建筑生命周期三个阶段的相关指标,对相关指标采用主成分分析方法,使用Matlab制作相关热图,观察相关性,并对指标进行降维处理,最终确定主成分,通过贡献率对主成分赋权,得出13个地级市住宅建筑碳排放综合得分,并对其进行评价。
问题4分析
问题4要求基于江苏省建设全过程碳排放的历史数据,开展江苏省2023年建设全过程二氧化碳排放预测研究。查阅相关文献,找出江苏省历年住宅建筑碳排放量,利用灰色预测中的GM(1,1)模型对历年住宅建筑物碳排放量进行预测,得到2023年江苏省建筑全过程碳排放量。
问题5分析
在前面讨论的基础上,本课题提出了江苏省建筑碳减排的建议。为了实现我国双碳目标下的低碳建筑,应从多方面提出建议。通过问题1、问题2、问题3和问题4,可以分别得出材料对碳排放的影响、不同指标对碳排放量的影响、区域差异对碳排放总量的影响以及历年碳排放的发展趋势。
模型的建立与求解整体论文缩略图
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
程序代码:
部分程序如下:
import numpy as np
import matplotlib.pyplot as plt
# 定义居住建筑碳排放模型
def building_carbon_emission_model(weight_coeff, index_values):
return np.dot(weight_coeff, index_values)
# 设置模拟次数
n_simulations = 10000
# 设置权重系数概率分布范围(示例)
weight_coeff_dist = np.array([[0.2, 0.4],[0.3, 0.5],[0.1, 0.3],[0.2, 0.4]])
# 设置指标取值概率分布范围
index_values_dist = np.array([[10, 50],[20, 100],[5, 25],[10, 50]])
# 初始化存储模型输出的数组
model_outputs = np.zeros(n_simulations)
# 进行蒙特卡洛模拟
for i in range(n_simulations):
# 对权重系数进行随机抽样
weight_coeff_sample = np.random.uniform(weight_coeff_dist[:, 0], weight_coeff_dist[:, 1]
# 对指标取值进行随机抽样
index_values_sample = np.random.uniform(index_values_dist[:, 0], index_values_dist[:, 1])
# 计算模型输出
model_outputs[i] = building_carbon_emission_model(weight_coeff_sample, index_values_sample)
# 分析模型输出
mean_output = np.mean(model_outputs)
std_output = np.std(model_outputs)
confidence_interval = np.percentile(model_outputs, [2.5, 97.5])
print(f"Mean: {mean_output}")
print(f"Standard Deviation: {std_output}")
print(f"95% Confidence Interval: {confidence_interval}")
# 绘制模型输出的直方图
plt.hist(model_outputs, bins=50)
plt.xlabel("Carbon Emission")
plt.ylabel("Frequency")
plt.show()
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_squared_error
import itertools
# ACF和PACF图
plot_acf(df['log_emission_diff'])
plt.title('ACF')
plot_pacf(df['log_emission_diff'])
plt.title('PACF')
# 确定参数范围
p_range = range(0, 3)
d_range = range(0, 2)
q_range = range(0, 3)# 计算所有参数组合的AIC
best_aic = float('inf')
best_order = None
for p, d, q in itertools.product(p_range, d_range, q_range):
if p == 0 and d == 0 and q == 0:
continue
try:
model = ARIMA(df['log_emission'], order=(p, d, q))
results = model.fit()
if results.aic < best_aic:
best_aic = results.aic
best_order = (p, d, q)
except:
continue
print(f'Best ARIMA parameters: {best_order}, AIC: {best_aic}')
clear; clc
year = 2015:1:2022; %年份
x0 = [102.3 108.7 115.2 121.6 128.1 134.5 140.96 147.41] ;%原始数据序列
n = length(x0);
year = year' ;
x0 = x0' ;
%画出时序图,观察是否是以年份为度量的非负数据
figure(1) ;
plot(year, x0, 'o-') ;
grid on ;
set(gca,'xtick',year(1:1:end)) ; %设置x轴的间隔为1
xlabel('年份'); ylabel('碳排放量');
%GM模型适用于数据较短的非负序列,所以要进行非负检验
ERROR = 0; % 建立一个错误指标,一旦出错就指定为1
% 判断是否有负数元素,当然数据量要4~10期才考虑使用GM
if sum(x0<0) > 0
disp('原始数据有负值,不能使用GM')
ERROR = 1;
end
%进行准指数规律检验和进行级比检验
if ERROR == 0
disp('------------------------------------------------------------')
disp('准指数规律检验')
x1 = cumsum(x0); % 一次累加
rho = x0(2:end) ./ x1(1:end-1) ; % 计算光滑度rho(k) = x0(k)/x1(k-1)
% 画出光滑度的图形,并画上0.5的直线,表示临界值
figure(2)
plot(year(2:end),rho,'o-',[year(2),year(end)],[0.5,0.5],'-'); grid on;
text(year(end-1)+0.2,0.55,'临界线') % 在坐标(year(end-1)+0.2,0.55)上添加文本
set(gca,'xtick',year(2:1:end)) % 设置x轴横坐标的间隔为1
xlabel('年份'); ylabel('原始数据的光滑度'); % 给坐标轴加上标签
disp(strcat('指标1:光滑比小于0.5的数据占比为',num2str(100*sum(rho<0.5)/(n-1)),'%'))
disp(strcat('指标2:除去前两个时期外,光滑比小于0.5的数据占比为',num2str(100*sum(rho(3:end)<0.5)/(n-3)),'%'))
disp('参考标准:指标1一般要大于60%, 指标2要大于90%,你认为本例数据可以通过检验吗?')
flag = 1 ;
end
for k = 2 : n
lamda(k) = x0(k-1) / x0(k) ;
if (lamda(k) < exp(-2 / (n+1)) || lamda(k) > exp(2 / (n+1)))
disp('不通过级比检验!!!') ;
flag = 0 ;
end
end
if flag == 1
disp('通过级比检验!!!') ;
end