这段 MATLAB 代码用于生成 温室在不同场景下的年度能量流入和流出 的图表,并绘制相应的堆叠水平柱状图。以下是代码的详细解释:
1. 注释部分
-
代码开头的注释说明了这段代码的用途:生成温室在不同场景下的年度能量流入和流出图表,用于绘制图5.12。
-
该图来自于 David Katzin 的博士论文,论文研究了通过 LED 照明在温室中节能的方法。
-
代码作者是 David Katzin,代码的最后更新日期是 2021 年 4 月。
-
注释中还提到,运行此代码时会触发一个警告,这是由于使用了热回收(heat harvesting),但不会影响结果。
2. 文件夹和文件路径
-
outputFolder
定义了存储模拟输出文件的文件夹路径。
3. 加载数据
-
加载三个模拟数据文件:
-
N-HH_ams_noLamp_hHarvest_day350_length350.mat
:无灯具场景,带有热回收,存储在变量nlhh
中。 -
L-450_ams_led_blScr_hHarvest_noBoil_ppfd450_day270_length350.mat
:灯具强度为 450 μmol/m²/s 的场景,存储在变量p450
中。 -
L-200_ams_led_blScr_hHarvest_day270_length350.mat
:灯具强度为 200 μmol/m²/s 的场景,存储在变量p200
中。
-
4. 定义偏移量
-
offset = 70;
定义了文本标签在柱状图上的偏移量。
5. 调用绘图函数
-
plotBars(nlhh,p200,p450,offset,0);
调用plotBars
函数,绘制堆叠水平柱状图。 -
axis([0 6000 0.25 6.75])
设置图表的 x 轴和 y 轴范围。
6. 绘图函数 plotBars
-
plotBars
函数用于绘制堆叠水平柱状图,显示不同场景的能量流入和流出。
6.1 能量分析
-
使用
energyAnalysis
函数计算每个场景的能量流入和流出:-
[inGl1,outGl1] = energyAnalysis(gl1);
计算无灯具场景的能量流入和流出。 -
[inGl2,outGl2] = energyAnalysis(gl2);
计算灯具强度为 200 μmol/m²/s 场景的能量流入和流出。 -
[inGl3,outGl3] = energyAnalysis(gl3);
计算灯具强度为 450 μmol/m²/s 场景的能量流入和流出。
-
6.2 能量流出重新排序
-
对能量流出数据进行重新排序:
-
outGl1 = outGl1([2 5 4 3 1]);
将无灯具场景的能量流出重新排序。 -
outGl2 = outGl2([2 5 4 3 1]);
将灯具强度为 200 μmol/m²/s 场景的能量流出重新排序。 -
outGl3 = outGl3([2 5 4 3 1]);
将灯具强度为 450 μmol/m²/s 场景的能量流出重新排序。
-
6.3 能量流入和流出调整
-
将热回收和冷却的能量流入和流出添加到数据中:
-
inGl1 = [inGl1 1e-6*trapz(gl1.a.hBufHotPipe) zeros(1,7)];
将无灯具场景的热回收能量流入添加到数据中。 -
inGl2 = [inGl2 1e-6*trapz(gl2.a.hBufHotPipe) zeros(1,7)];
将灯具强度为 200 μmol/m²/s 场景的热回收能量流入添加到数据中。 -
inGl3 = [inGl3 1e-6*trapz(gl3.a.hBufHotPipe) zeros(1,7)];
将灯具强度为 450 μmol/m²/s 场景的热回收能量流入添加到数据中。 -
outGl1 = [zeros(1,4) outGl1 -1e-6*trapz(gl1.a.hAirMech) -1e-6*trapz(gl1.a.lAirMech)];
将无灯具场景的冷却能量流出添加到数据中。 -
outGl2 = [zeros(1,4) outGl2 -1e-6*trapz(gl2.a.hAirMech) -1e-6*trapz(gl2.a.lAirMech)];
将灯具强度为 200 μmol/m²/s 场景的冷却能量流出添加到数据中。 -
outGl3 = [zeros(1,4) outGl3 -1e-6*trapz(gl3.a.hAirMech) -1e-6*trapz(gl3.a.lAirMech)];
将灯具强度为 450 μmol/m²/s 场景的冷却能量流出添加到数据中。
-
6.4 绘制堆叠水平柱状图
-
使用
barh
绘制堆叠水平柱状图:-
b = barh(1:6, [-outGl3; -outGl2; -outGl1; inGl3; inGl2; inGl1],'stacked');
绘制能量流入和流出的堆叠水平柱状图。 -
yticks(1:6);
设置 y 轴刻度。 -
yticklabels({'L 450 outgoing', 'L 200 outgoing','N HH outgoing', 'L 450 incoming', 'L 200 incoming', 'N HH incoming'});
设置 y 轴标签。 -
legend
添加图例,说明每种能量流的含义。
-
6.5 添加数值标签
-
使用
text
在柱状图上添加数值标签:-
text(barSum(k)+b(j).YData(k)/2-offset,b(j).XData(k),num2str(b(j).YData(k),numFormat),'FontSize', 7);
在每个柱状图上添加数值标签。
-
6.6 设置颜色和图例
-
为每种能量流设置颜色和图例:
-
set(b(1),'DisplayName','Solar radiation');
设置太阳辐射的颜色和图例。 -
set(b(2),'DisplayName','Heating from boiler');
设置锅炉加热的颜色和图例。 -
set(b(3),'DisplayName','Lighting');
设置照明的颜色和图例。 -
set(b(4),'DisplayName','Heating from buffer', 'FaceColor',[0.82 0.43 0.91]);
设置缓冲加热的颜色和图例。 -
其他能量流的颜色和图例设置类似。
-
7. 代码的整体功能
-
这段代码的主要功能是从不同场景的模拟数据中提取能量流入和流出数据,并绘制堆叠水平柱状图。
-
通过这种方式,可以直观地比较不同场景下的能量流动情况,帮助研究人员理解不同策略对温室能量使用的影响。
8. 代码的用途
-
这段代码用于分析温室在不同场景下的年度能量流入和流出,帮助研究人员评估不同策略对温室能量使用的影响。
-
通过观察这些能量流的变化,可以优化温室的能量管理和节能策略。
9. 可能的改进
-
如果
energyAnalysis
函数的实现不明确,可以进一步解释该函数的具体逻辑。 -
可以添加更多的注释,解释每个步骤的目的,以便其他研究人员更容易理解和使用这段代码。
-
可以将不同年份或不同场景的数据绘制在同一图中,以便更直观地比较它们的差异。
总结来说,这段代码是一个用于分析和可视化 温室在不同场景下的年度能量流入和流出 的工具,帮助研究人员更好地理解温室能量流动的变化趋势,并为节能策略的制定提供数据支持。