evaluateClimateModelHps脚本

这段代码与之前的evaluateClimateModelLed代码非常相似,但它是用于评估在HPS(高压钠灯)补光条件下GreenLight模型的气候模拟性能。代码通过加载2010年在荷兰Bleiswijk进行的试验数据,模拟温室中的气候条件(如温度、湿度和CO₂浓度),并将模拟结果与试验数据进行比较。以下是代码的详细解释:


1. 代码背景

  • 研究背景:代码基于Katzin等人的研究(2020),该研究评估了在LED和HPS(高压钠灯)补光条件下温室的气候模拟性能。
  • 数据来源:代码需要从外部数据文件(dataLED.matdataHPS.mat)加载试验数据,这些数据可以通过DOI链接访问。
  • 模型用途:GreenLight模型是一个开源的温室模型,用于模拟温室环境中的能量流动、作物生长等。

2. 代码结构

(1) 初始化

matlab
复制
simType = 'hps';
seasonLength = 112; % season length in days (data length is 112 days)
firstDay = 1; % days since beginning of data
  • simType:模拟类型,这里设置为'hps',表示使用HPS补光。
  • seasonLength:模拟的季节长度(112天)。
  • firstDay:从试验数据的第几天开始模拟。

(2) 加载试验数据

matlab
复制
[outdoor, indoor, controls, startTime, filtInd] = loadGreenhouseData(firstDay, seasonLength, simType);
  • 加载温室试验数据,包括室外环境数据(outdoor)、室内环境数据(indoor)、控制数据(controls)、模拟开始时间(startTime)以及过滤索引(filtInd)。

(3) 数据预处理

matlab
复制
indoor(:,3) = vaporDens2pres(indoor(:,2), indoor(:,3)); % 将水汽密度转换为水汽压力
indoor(:,4) = 1e6*co2ppm2dens(indoor(:,2),indoor(:,4)); % 将CO₂浓度从ppm转换为mg/m³
  • 对室内环境数据进行单位转换,以便模型使用。

(4) 创建动态元素

matlab
复制
v.tAir = DynamicElement('v.tAir', [floor(indoor(:,1)) indoor(:,2)]); % 温度
v.vpAir = DynamicElement('v.vpAir', [floor(indoor(:,1)) indoor(:,3)]); % 水汽压力
v.co2Air = DynamicElement('v.co2Air', [floor(indoor(:,1)) indoor(:,4)]); % CO₂浓度
  • 将试验数据中的温度、水汽压力和CO₂浓度封装为动态元素(DynamicElement),以便与模拟结果进行比较。

(5) 计算天空温度和土壤温度

matlab
复制
outdoor(:,7) = skyTempRdam(outdoor(:,3), datenum(startTime)+outdoor(:,1)/86400); % 计算天空温度
outdoor(:,8) = soilTempNl(secsInYear+outdoor(:,1)); % 计算土壤温度
  • 使用函数skyTempRdamsoilTempNl计算天空温度和土壤温度,并将其添加到室外环境数据中。

(6) 创建GreenLight模型

matlab
复制
hps = createGreenLightModel('none', outdoor, startTime, controls, indoor);
setParamsBleiswijk2010(hps);
setBleiswijk2010HpsParams(hps); % 设置HPS补光参数
  • 创建GreenLight模型,并设置Bleiswijk 2010试验的参数和HPS补光参数。

(7) 设置初始作物状态

matlab
复制
hps.x.cLeaf.val = 0.7*6240*10; % 初始叶片干重
hps.x.cStem.val = 0.25*6240*10; % 初始茎干重
hps.x.cFruit.val = 0.05*6240*10; % 初始果实干重
  • 设置作物的初始状态,包括叶片、茎和果实的干重。

3. 求解模型

matlab
复制
solveFromFile(hps, 'ode15s'); % 使用ode15s求解模型
mesInterval = v.tAir.val(2,1)-v.tAir.val(1,1); % 获取测量数据的时间间隔
hps = changeRes(hps,mesInterval); % 设置输出分辨率与测量数据一致
  • 使用MATLAB的ode15s求解器求解模型,并将输出时间分辨率设置为与试验数据一致。

4. 比较模拟结果与试验数据

(1) 计算相对均方根误差(RRMSE)

matlab
复制
mesLength = length(v.tAir.val(:,1)); % 测量数据的长度
simLength = length(hps.x.tAir.val(:,1)); % 模拟数据的长度
compareLength = min(mesLength, simLength); % 取较短的长度进行比较

rrmseTair = sqrt(mean((hps.x.tAir.val(1:compareLength,2)-v.tAir.val(:,2)).^2))./mean(v.tAir.val(1:compareLength,2)); % 温度的RRMSE
rrmseVpair = sqrt(mean((hps.x.vpAir.val(1:compareLength,2)-v.vpAir.val(1:compareLength,2)).^2))./mean(v.vpAir.val(1:compareLength,2)); % 水汽压力的RRMSE
rrmseCo2air  = sqrt(mean((hps.x.co2Air.val(1:compareLength,2)-v.co2Air.val(1:compareLength,2)).^2))./mean(v.co2Air.val(:,2)); % CO₂浓度的RRMSE
  • 计算模拟结果与试验数据之间的相对均方根误差(RRMSE),用于评估模型的准确性。

(2) 保存结果

matlab
复制
save hpsClimate
  • 将模拟结果和误差指标保存到文件hpsClimate.mat

5. 总结

这段代码的主要功能是:

  1. 加载试验数据并预处理。
  2. 创建GreenLight模型并设置参数。
  3. 模拟温室在HPS补光条件下的气候条件(温度、湿度和CO₂浓度)。
  4. 将模拟结果与试验数据进行比较,并计算相对均方根误差(RRMSE)。
  5. 保存结果。

通过这段代码,用户可以评估GreenLight模型在HPS补光条件下的气候模拟性能,并验证模型的准确性。与evaluateClimateModelLed代码的主要区别在于补光类型(HPS vs. LED)和相应的参数设置。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇