这段 MATLAB 代码用于生成 温室在不同光照和加热场景下的能量输入、光合有效辐射(PAR)、产量和能量效率 的图表,并绘制相应的柱状图。以下是代码的详细解释:
1. 注释部分
-
代码开头的注释说明了这段代码的用途:生成能量输入、PAR、产量和能量效率的图表,用于绘制图5.7。
-
该图来自于 David Katzin 的博士论文,论文研究了通过 LED 照明在温室中节能的方法。
-
代码作者是 David Katzin,代码的最后更新日期是 2021 年 4 月。
2. 数据收集
-
outputFolder
定义了存储模拟输出文件的文件夹路径。 -
如果路径末尾没有反斜杠(
\
),则自动添加。 -
files = dir(outputFolder);
获取文件夹中的所有文件。 -
files = files(3:end);
去掉前两个条目(.
和..
),保留实际文件。 -
heatByLightSummary
是一个空单元格数组,用于存储每个文件的能量输入、PAR、产量和能量效率数据。
3. 遍历文件并提取数据
-
使用
for
循环遍历文件夹中的每个文件:-
fileName = files(k).name;
获取当前文件名。 -
load([outputFolder fileName],'gl');
加载文件中的数据到变量gl
。 -
[lampIn, boilIn, hhIn, parSun, parLamps, yield, efficiency] = energyYieldAnalysis(gl);
调用自定义函数energyYieldAnalysis
,从gl
数据中提取以下信息:-
lampIn
:灯具能量输入。 -
boilIn
:锅炉能量输入。 -
hhIn
:热回收电力输入。 -
parSun
:来自太阳的光合有效辐射(PAR)。 -
parLamps
:来自灯具的光合有效辐射(PAR)。 -
yield
:产量。 -
efficiency
:能量效率(单位产量的能量输入)。
-
-
将文件名、能量输入、PAR、产量、能量效率和标签存储在
heatByLightSummary
中。 -
使用
strrep
对标签进行格式化(例如,将-
替换为空格,将LL
替换为L/L
,将HL
替换为H/L
)。
-
4. 重新排序数据
-
heatByLightSummary = heatByLightSummary([16 15 5 12 14 10 9 7 8 11 6 13 2 1 4 3],:);
对数据进行重新排序,以确保图表中的顺序符合预期。
5. 绘制图表
-
cc = lines();
生成一组默认的 MATLAB 颜色。 -
labels=heatByLightSummary(:,9);
提取场景描述的标签。
图1:能量输入
-
创建一个新的图形窗口。
-
使用
bar
绘制堆叠柱状图,显示灯具能量输入、锅炉能量输入和热回收电力输入:-
bar(cell2mat(heatByLightSummary(:,2:4)),'stacked');
-
添加图例,说明每种能量输入的含义。
-
设置 y 轴标签和范围:
-
ylabel('Energy input (MJ m^{-2} year^{-1})')
-
ylim([0 4000])
-
-
设置 x 轴范围和标题:
-
xlim([0 17])
-
title('A')
-
-
图2:光合有效辐射(PAR)
-
创建一个新的图形窗口。
-
使用
bar
绘制堆叠柱状图,显示来自太阳和灯具的 PAR:-
bar(cell2mat(heatByLightSummary(:,5:6)),'stacked');
-
添加图例,说明每种 PAR 的来源。
-
设置 y 轴标签和范围:
-
ylabel('PAR above the canopy (mol m^{-2} year^{-1})')
-
ylim([0 18000])
-
-
设置 x 轴范围和标题:
-
xlim([0 17])
-
title('B')
-
-
图3:产量
-
创建一个新的图形窗口。
-
使用
bar
绘制柱状图,显示产量:-
bar(cell2mat(heatByLightSummary(:,7)),'stacked');
-
添加图例,说明柱状图的含义。
-
设置 y 轴标签和范围:
-
ylabel('Yield (kg m^{-2} year^{-1})')
-
ylim([0 180])
-
-
设置 x 轴刻度和标签:
-
xticks(1:16)
-
xticklabels(labels)
-
-
设置 x 轴范围和标题:
-
xlim([0 17])
-
title('C')
-
-
图4:能量效率
-
创建一个新的图形窗口。
-
使用
bar
绘制柱状图,显示能量效率:-
bar(cell2mat(heatByLightSummary(:,8)),'stacked');
-
添加图例,说明柱状图的含义。
-
设置 y 轴标签和范围:
-
ylabel('Energy input per product (MJ kg^{-1})')
-
ylim([0 25])
-
-
设置 x 轴刻度和标签:
-
xticks(1:16)
-
xticklabels(labels)
-
-
设置 x 轴范围和标题:
-
xlim([0 17])
-
title('D')
-
-
6. 代码的整体功能
-
这段代码的主要功能是从多个模拟文件中提取能量输入、PAR、产量和能量效率数据,并绘制柱状图。
-
通过这种方式,可以直观地比较不同场景下的能量使用、光照、产量和能量效率,帮助研究人员评估不同光照和加热策略的效果。
7. 代码的用途
-
这段代码用于分析温室在不同光照和加热场景下的能量输入、PAR、产量和能量效率,帮助研究人员理解不同策略对温室生产的影响。
-
通过观察这些指标的变化,可以评估温室的节能潜力和生产效率。
8. 可能的改进
-
如果
energyYieldAnalysis
函数的实现不明确,可以进一步解释该函数的具体逻辑。 -
可以添加更多的注释,解释每个步骤的目的,以便其他研究人员更容易理解和使用这段代码。
-
可以将不同年份或不同场景的数据绘制在同一图中,以便更直观地比较它们的差异。
总结来说,这段代码是一个用于分析和可视化 温室在不同光照和加热场景下的能量输入、PAR、产量和能量效率 的工具,帮助研究人员更好地理解不同策略对温室生产的影响,并为节能策略的制定提供数据支持。