这段 MATLAB 代码用于生成 温室在模拟中的每日加热和照明输入 的图表,并绘制相应的曲线。以下是代码的详细解释:
1. 注释部分
-
代码开头的注释说明了这段代码的用途:生成温室模拟中的每日加热和照明输入图表,用于绘制图5.11。
-
该图来自于 David Katzin 的博士论文,论文研究了通过 LED 照明在温室中节能的方法。
-
代码作者是 David Katzin,代码的最后更新日期是 2021 年 4 月。
2. 文件夹和文件路径
-
outputFolder
定义了存储模拟输出文件的文件夹路径。 -
seasonLength
定义了模拟的季节长度(350 天)。 -
firstDay
定义了模拟的起始天数(第 270 天)。
3. 加载数据
-
加载三个模拟数据文件:
-
N-HH_ams_noLamp_hHarvest_day350_length350.mat
:无灯具场景,带有热回收,存储在变量nlhh
中。 -
L-200_ams_led_blScr_hHarvest_day270_length350.mat
:灯具强度为 200 μmol/m²/s 的场景,存储在变量p200
中。 -
L-450_ams_led_blScr_hHarvest_noBoil_ppfd450_day270_length350.mat
:灯具强度为 450 μmol/m²/s 的场景,存储在变量p450
中。
-
4. 数据对齐
-
nlhhShift = 80;
定义了无灯具场景(nlhh
)的起始天数比其他场景晚 80 天(第 350 天)。 -
为了对齐数据,需要对无灯具场景的数据进行偏移处理。
5. 颜色定义
-
cc = lines();
生成一组默认的 MATLAB 颜色。 -
blue
,red
,yellow
,purple
,green
分别提取了lines
颜色集中的前五种颜色,用于后续绘图。
6. 计算每日均值
-
使用
getMeans
函数计算每日加热和照明输入的均值:-
[xNl, dayHeatNl] = getMeans(86400e-6*nlhh.a.hBoilPipe,288);
计算无灯具场景的每日加热输入。 -
[x200, dayLamp200] = getMeans(86400e-6*p200.a.qLampIn,288);
计算灯具强度为 200 μmol/m²/s 场景的每日照明输入。 -
[~, dayHeat200] = getMeans(86400e-6*p200.a.hBoilPipe,288);
计算灯具强度为 200 μmol/m²/s 场景的每日加热输入。 -
[x450, dayLamp450] = getMeans(86400e-6*p450.a.qLampIn,288);
计算灯具强度为 450 μmol/m²/s 场景的每日照明输入。
-
7. 绘制图表
-
使用
plot
绘制不同场景的每日加热和照明输入曲线:-
plot(0:(seasonLength+nlhhShift-365),dayHeatNl((365-nlhhShift):end));
绘制无灯具场景的每日加热输入曲线(从第 365 天开始)。 -
plot((nlhhShift+1):seasonLength,dayHeatNl(1:firstDay),'HandleVisibility','off','Color',blue);
绘制无灯具场景的每日加热输入曲线(从第 1 天到第 270 天)。 -
plot(dayLamp200,'Color',red,'LineWidth',1);
绘制灯具强度为 200 μmol/m²/s 场景的每日照明输入曲线。 -
plot(dayHeat200+dayLamp200,'Color',yellow);
绘制灯具强度为 200 μmol/m²/s 场景的每日加热和照明输入总和曲线。 -
plot(dayLamp450,'Color',purple);
绘制灯具强度为 450 μmol/m²/s 场景的每日照明输入曲线。
-
-
设置 x 轴刻度和标签:
-
xticks(0:seasonLength);
设置 x 轴刻度为 0 到 350 天。 -
xticklabels(datestr(firstDay+1+(0:seasonLength),'dd/mm'))
将刻度标签设置为日期格式(日/月)。 -
xticks(0:25:seasonLength);
设置 x 轴刻度为每 25 天显示一个标签。
-
-
添加图例、y 轴标签和 x 轴标签:
-
legend('Heating N HH', 'Lighting L 200', 'Heating+lighting L 200', 'Lighting L 450');
添加图例,说明每条曲线的含义。 -
ylim([0 10.5])
设置 y 轴范围为 0 MJ/m²/d 到 10.5 MJ/m²/d。 -
xlabel('Date')
设置 x 轴标签为日期。 -
ylabel('Energy input (MJ m^{-2} d^{-1})')
设置 y 轴标签为每日能量输入。
-
8. 代码的整体功能
-
这段代码的主要功能是从不同场景的模拟数据中提取每日加热和照明输入数据,并绘制它们的曲线。
-
通过这种方式,可以直观地比较不同场景下的能量输入变化,帮助研究人员理解灯具强度和热回收对温室能量使用的影响。
9. 代码的用途
-
这段代码用于分析温室在不同场景下的每日加热和照明输入的变化趋势,帮助研究人员评估不同策略对温室能量使用的影响。
-
通过观察这些参数的变化,可以优化温室的能量管理和节能策略。
10. 可能的改进
-
如果
getMeans
函数的实现不明确,可以进一步解释该函数的具体逻辑。 -
可以添加更多的注释,解释每个步骤的目的,以便其他研究人员更容易理解和使用这段代码。
-
可以将不同年份或不同场景的数据绘制在同一图中,以便更直观地比较它们的差异。
总结来说,这段代码是一个用于分析和可视化 温室在不同场景下的每日加热和照明输入 的工具,帮助研究人员更好地理解温室能量使用的变化趋势,并为节能策略的制定提供数据支持。