这段 MATLAB 代码用于生成 温室在不同灯具强度和缓冲大小场景下的四天室内温度、加热与照明输入、能量缓冲内容 的图表,并绘制相应的曲线。以下是代码的详细解释:
1. 注释部分
-
代码开头的注释说明了这段代码的用途:生成不同灯具强度和缓冲大小场景下的四天数据图表,用于绘制图5.9。
-
该图来自于 David Katzin 的博士论文,论文研究了通过 LED 照明在温室中节能的方法。
-
代码作者是 David Katzin,代码的最后更新日期是 2021 年 4 月。
2. 加载数据
-
outputFolder
定义了存储模拟输出文件的文件夹路径。 -
加载三个模拟数据文件:
-
L-450-SB_ams_led_blScr_hHarvest_noBoil_ppfd450_day270_length350.mat
:灯具强度为 450 μmol/m²/s 且带有缓冲的场景数据,存储在变量sb
中。 -
L-400_ams_led_blScr_hHarvest_noBoil_ppfd400_day270_length350.mat
:灯具强度为 400 μmol/m²/s 的场景数据,存储在变量p400
中。 -
L-450_ams_led_blScr_hHarvest_noBoil_ppfd450_day270_length350.mat
:灯具强度为 450 μmol/m²/s 的场景数据,存储在变量p450
中。
-
3. 颜色定义
-
cc = lines();
生成一组默认的 MATLAB 颜色。 -
blue
,red
,yellow
分别提取了lines
颜色集中的前三种颜色,用于后续绘图。
4. 绘制图表
-
使用
subplot
创建一个 3 行 1 列的图形布局,分别绘制室内温度、加热与照明输入、能量缓冲内容的曲线。
子图1:室内空气温度
-
subplot(3,1,1)
选择第一个子图。 -
使用
plotMeans
绘制不同场景的室内温度曲线:-
plotMeans(p450.x.tAir,12,'LineWidth',1);
绘制灯具强度为 450 μmol/m²/s 的场景的室内温度曲线。 -
plotMeans(p400.x.tAir,12);
绘制灯具强度为 400 μmol/m²/s 的场景的室内温度曲线。 -
plotMeans(sb.x.tAir,12);
绘制带有缓冲的场景的室内温度曲线。 -
plotMeans(p450.a.heatSetPoint-1,12,'--');
绘制温度设定点曲线(虚线)。
-
-
设置 x 轴范围和刻度:
-
xlim([firstDay*86400 (lastDay)*86400]-3600)
设置 x 轴范围为第 72 天到第 76 天。 -
xticks((firstDay*86400:86400:lastDay*86400)-3600)
设置 x 轴刻度为每天的起始点。 -
xticklabels(datestr(270+(firstDay:lastDay),'dd/mm'))
将刻度标签设置为日期格式(日/月)。
-
-
设置 y 轴范围和刻度:
-
ylim([10 28])
设置 y 轴范围为 10°C 到 28°C。 -
yticks(10:4:26)
设置 y 轴刻度为 10°C 到 26°C,间隔为 4°C。
-
-
添加图例、y 轴标签和 x 轴标签。
子图2:加热与照明输入
-
subplot(3,1,2)
选择第二个子图。 -
使用
plot
绘制不同场景的照明和加热输入曲线:-
plot(smooth(p450.a.qLampIn,12),'--','Color',blue);
绘制灯具强度为 450 μmol/m²/s 的场景的照明输入曲线(虚线)。 -
plot(smooth(p400.a.qLampIn,12),'--','Color',red);
绘制灯具强度为 400 μmol/m²/s 的场景的照明输入曲线(虚线)。 -
plot(smooth(p450.a.hBufHotPipe,12),'Color',blue,'LineWidth',1);
绘制灯具强度为 450 μmol/m²/s 的场景的加热输入曲线。 -
plot(smooth(p400.a.hBufHotPipe,12),'Color',red);
绘制灯具强度为 400 μmol/m²/s 的场景的加热输入曲线。 -
plot(smooth(sb.a.hBufHotPipe,12),'Color',yellow);
绘制带有缓冲的场景的加热输入曲线。
-
-
设置 x 轴范围和刻度,添加图例和 y 轴标签:
-
xlim([firstDay*86400 (lastDay)*86400]-3600)
设置 x 轴范围为第 72 天到第 76 天。 -
xticks((firstDay*86400:86400:lastDay*86400)-3600)
设置 x 轴刻度为每天的起始点。 -
xticklabels(datestr(270+(firstDay:lastDay),'dd/mm'))
将刻度标签设置为日期格式(日/月)。 -
ylim([0 200])
设置 y 轴范围为 0 W/m² 到 200 W/m²。 -
ylabel('Energy input (W m^{-2})')
设置 y 轴标签。
-
子图3:能量缓冲内容
-
subplot(3,1,3)
选择第三个子图。 -
使用
plot
绘制不同场景的能量缓冲内容曲线:-
plot(p450.x.eBufCold+p450.x.eBufHot);
绘制灯具强度为 450 μmol/m²/s 的场景的能量缓冲内容曲线。 -
plot(p400.x.eBufCold+p400.x.eBufHot);
绘制灯具强度为 400 μmol/m²/s 的场景的能量缓冲内容曲线。 -
plot(sb.x.eBufCold+sb.x.eBufHot);
绘制带有缓冲的场景的能量缓冲内容曲线。
-
-
设置 x 轴范围和刻度,添加图例和 y 轴标签:
-
xlim([firstDay*86400 (lastDay)*86400]-3600)
设置 x 轴范围为第 72 天到第 76 天。 -
xticks((firstDay*86400:86400:lastDay*86400)-3600)
设置 x 轴刻度为每天的起始点。 -
xticklabels(datestr(270+(firstDay:lastDay),'dd/mm'))
将刻度标签设置为日期格式(日/月)。 -
ylim([0 2.5])
设置 y 轴范围为 0 MJ/m² 到 2.5 MJ/m²。 -
yticks(0:0.5:3)
设置 y 轴刻度为 0 MJ/m² 到 3 MJ/m²,间隔为 0.5 MJ/m²。 -
ylabel('Heat buffers content (MJ m^{-2})')
设置 y 轴标签。
-
5. 代码的整体功能
-
这段代码的主要功能是从不同灯具强度和缓冲大小场景的模拟数据中提取室内温度、加热与照明输入、能量缓冲内容数据,并绘制它们的曲线。
-
通过这种方式,可以直观地比较不同场景下的温室环境参数变化,帮助研究人员理解灯具强度和缓冲大小对温室温度控制和能量使用的影响。
6. 代码的用途
-
这段代码用于分析温室在不同灯具强度和缓冲大小场景下的温度、加热与照明输入、能量缓冲内容的变化趋势,帮助研究人员评估不同策略对温室环境的影响。
-
通过观察这些参数的变化,可以优化温室的温度控制和节能策略。
7. 可能的改进
-
如果
plotMeans
和smooth
函数的实现不明确,可以进一步解释这些函数的具体逻辑。 -
可以添加更多的注释,解释每个步骤的目的,以便其他研究人员更容易理解和使用这段代码。
-
可以将不同年份或不同场景的数据绘制在同一图中,以便更直观地比较它们的差异。
总结来说,这段代码是一个用于分析和可视化 温室在不同灯具强度和缓冲大小场景下的温度、加热与照明输入、能量缓冲内容 的工具,帮助研究人员更好地理解温室环境的变化趋势,并为节能策略的制定提供数据支持。