这段代码定义了一个名为 runGreenLight
的函数,用于创建并运行一个名为 GreenLight 的温室模型仿真。该模型模拟了现代温室(4公顷)在不同光照类型(如HPS高压钠灯、LED灯或无光照)和不同气候条件下的能耗和作物生长情况。以下是代码的详细解释:
函数功能
runGreenLight
函数的主要功能是:
- 创建并运行温室模型:
- 根据输入的光照类型(
lampType
)、气候数据(weather
)和其他参数,创建一个GreenLight模型实例。 - 运行仿真,模拟温室在不同条件下的能耗和作物生长情况。
- 根据输入的光照类型(
- 支持多种输入配置:
- 可以自定义光照类型(HPS、LED或无光照)。
- 可以输入真实的气候数据,或生成人工气候数据。
- 可以修改模型参数(如温度设定、光照时间等)。
- 可以选择是否从成熟作物状态开始仿真。
- 保存仿真结果:
- 仿真结果可以保存到指定文件中,供后续分析使用。
输入参数
lampType
(可选):- 光照类型,可以是
'hps'
(高压钠灯)、'led'
(LED灯)或'none'
(无光照)。 - 默认值为
'none'
。
- 光照类型,可以是
weather
(可选):- 气候数据,用于驱动模型仿真。
- 如果未提供或为空,函数会生成一个5天的人工气候数据。
- 如果是一个标量数字,函数会生成对应天数的人工气候数据。
- 如果提供气候数据,必须是一个9列或10列的矩阵,格式如下:
- 第1列:时间戳(
datenum
格式,5分钟间隔)。 - 第2列:辐射强度(W/m²,室外全球辐射)。
- 第3列:温度(℃,室外空气温度)。
- 第4列:湿度(kg/m³,室外水蒸气浓度)。
- 第5列:CO₂浓度(kg/m³,室外CO₂浓度)。
- 第6列:风速(m/s,室外风速)。
- 第7列:天空温度(℃)。
- 第8列:外部土壤层温度(℃)。
- 第9列:每日辐射总量(MJ/m²/day)。
- 第10列(可选):海拔高度(米,默认为0)。
- 第1列:时间戳(
filename
(可选):- 保存仿真结果的文件名。如果未提供或为空,结果不会保存。
paramNames
和paramVals
(可选):- 用于修改模型参数的名称和对应值。
paramNames
是字符串数组,表示要修改的参数名称。paramVals
是对应的参数值数组。
isMature
(可选):- 布尔值,表示是否从成熟作物状态开始仿真。
- 默认值为
false
。
输出
gl
:- 一个GreenLight模型实例,包含完整的仿真结果。
- 仿真数据以5分钟为间隔输出。
代码流程
- 设置默认值:
- 如果未提供气候数据,生成5天的人工数据。
- 如果未提供文件名,不保存结果。
- 如果未提供海拔高度,默认为0。
- 准备仿真:
- 将时间戳从
datenum
格式转换为从数据开始时刻的秒数。 - 创建GreenLight模型实例,并设置默认参数(通过
setParams4haWorldComparison
函数)。 - 根据输入参数修改模型参数(通过
setParam
函数)。 - 重置依赖参数(通过
setDepParams
函数)。
- 将时间戳从
- 设置成熟作物状态(可选):
- 如果
isMature
为true
,初始化作物的果实、叶片和茎干生物量。
- 如果
- 运行仿真:
- 使用
ode15s
求解器运行仿真。 - 将仿真结果的时间分辨率调整为5分钟。
- 使用
- 保存结果(可选):
- 如果提供了文件名,将仿真结果保存到文件中。
辅助函数
makeArtificialInput
:- 生成人工气候数据。
- 输入参数为仿真天数,输出为一个9列的气候数据矩阵。
setParams4haWorldComparison
:- 设置现代4公顷温室的默认参数。
setDepParams
:- 重置依赖参数(即那些依赖于其他参数的参数)。
代码应用
- 该函数用于研究不同光照类型(HPS、LED)和气候条件下温室的能耗和作物生长情况。
- 通过修改参数(如温度设定、光照时间、保温性能等),可以模拟不同的温室管理策略。
- 仿真结果可以保存并用于后续分析,例如比较HPS和LED的节能效果。
示例用法
% 使用HPS灯,加载真实气候数据,保存结果到文件 weather = load('calEnergyPlus.mat'); % 加载气候数据 runGreenLight('hps', weather, 'cal_hps_results.mat'); % 使用LED灯,生成10天人工气候数据,修改温度设定 paramNames = ["tSpNight" "tSpDay"]; paramVals = [18 20]; runGreenLight('led', 10, 'led_warmer_results.mat', paramNames, paramVals);
注意事项
- 仿真可能需要较长时间运行,尤其是对于长时间的气候数据。
- 需要确保输入的气候数据格式正确。
- 修改参数时,注意参数的依赖关系(通过
setDepParams
函数处理)。