不通风情况下的日光温室温度动态机理模型,输入参数温室结构、位置、墙体厚度和导热系数、温室内外温湿度、光照强度、土壤温湿度、植物蒸腾、蒸发散热、大气透明度、风速、风向等参数,输出温度随时间变化曲线图,MATLAB完整代码案例实现
时间: 2023-07-03 07:09:43 浏览: 51
以下是一个简单的MATLAB代码实现,用于模拟日光温室内部温度的动态变化。这个模型基于基本的物理原理和经验规律,将温室作为一个封闭系统,考虑了诸如太阳辐射、气体传热、土壤传热、植物蒸腾、蒸发散热、大气透明度、风速和风向等因素。
```matlab
% 日光温室温度动态机理模型
% 输入参数
structure = struct('length', 10, 'width', 5, 'height', 3, 'wall_thickness', 0.2, 'wall_conductivity', 0.5); % 温室结构
location = struct('latitude', 40, 'longitude', -105); % 温室位置
indoor_temp = 20; % 室内温度
outdoor_temp = 10; % 室外温度
indoor_humidity = 50; % 室内湿度
outdoor_humidity = 30; % 室外湿度
solar_radiation = 800; % 太阳辐射
soil_temp = 15; % 土壤温度
soil_humidity = 25; % 土壤湿度
plant_transpiration = 0.02; % 植物蒸腾
evaporative_heat_loss = 0.1; % 蒸发散热
atmospheric_transparency = 0.6; % 大气透明度
wind_speed = 3; % 风速
wind_direction = 45; % 风向
% 初始化参数
time_step = 60; % 时间步长(秒)
num_steps = 24*60*60/time_step; % 总时间步数
wall_area = 2*(structure.length*structure.height + structure.width*structure.height); % 墙面积
wall_volume = structure.length*structure.width*structure.height; % 墙体体积
air_volume = wall_volume; % 空气体积
air_density = 1.2; % 空气密度
air_specific_heat = 1005; % 空气比热
air_heat_capacity = air_volume*air_density*air_specific_heat; % 空气热容量
wall_heat_capacity = wall_volume*structure.wall_thickness*structure.wall_conductivity; % 墙体热容量
total_heat_capacity = air_heat_capacity + wall_heat_capacity; % 总热容量
heat_transfer_coefficient = 10; % 传热系数
solar_heat_gain_coefficient = 0.7; % 太阳热增益系数
ground_heat_loss_coefficient = 0.1; % 地面散热系数
radiative_heat_loss_coefficient = 5; % 辐射散热系数
convection_heat_loss_coefficient = 5; % 对流散热系数
% 初始化温度
air_temp = indoor_temp;
wall_temp = indoor_temp;
% 初始化时间和温度数组
times = linspace(0, 24*60*60, num_steps);
air_temps = zeros(1, num_steps);
wall_temps = zeros(1, num_steps);
% 模拟每个时间步
for i = 1:num_steps
% 计算太阳辐射
day_angle = 2*pi*(times(i)/24/60/60 - floor(times(i)/24/60/60)); % 日角
declination_angle = 23.45*sin(2*pi*(284+floor(times(i)/24/60/60))/365); % 倾角
solar_altitude_angle = asin(cos(location.latitude)*cos(declination_angle)*cos(day_angle) + sin(location.latitude)*sin(declination_angle)); % 太阳高度角
solar_azimuth_angle = atan2(-cos(declination_angle)*sin(day_angle), sin(declination_angle)*cos(location.latitude) - cos(declination_angle)*sin(location.latitude)*cos(day_angle)); % 太阳方位角
if solar_altitude_angle > 0
direct_solar_radiation = solar_radiation*exp(-0.17/air_density*exp(-0.7*atmospheric_transparency/cos(solar_altitude_angle))); % 直接太阳辐射
diffuse_solar_radiation = 0.3*solar_radiation*(1 - exp(-0.7*atmospheric_transparency/cos(solar_altitude_angle))); % 漫反射太阳辐射
total_solar_radiation = direct_solar_radiation + diffuse_solar_radiation; % 总太阳辐射
else
total_solar_radiation = 0;
end
% 计算传热
air_wall_heat_transfer = heat_transfer_coefficient*wall_area*(wall_temp - air_temp); % 空气和墙体之间的传热
solar_heat_gain = total_solar_radiation*solar_heat_gain_coefficient; % 太阳热增益
ground_heat_loss = ground_heat_loss_coefficient*wall_area*(wall_temp - soil_temp); % 地面散热
radiative_heat_loss = radiative_heat_loss_coefficient*wall_area*(wall_temp^4 - outdoor_temp^4); % 辐射散热
convection_heat_loss = convection_heat_loss_coefficient*wall_area*wind_speed*(wall_temp - outdoor_temp); % 对流散热
total_heat_loss = air_wall_heat_transfer + ground_heat_loss + radiative_heat_loss + convection_heat_loss + evaporative_heat_loss; % 总散热
% 计算蒸发散热
vapor_pressure_inside = indoor_humidity/100*exp(17.27*indoor_temp/(indoor_temp+237.3)); % 室内水蒸气压力
vapor_pressure_outside = outdoor_humidity/100*exp(17.27*outdoor_temp/(outdoor_temp+237.3)); % 室外水蒸气压力
saturation_vapor_pressure = 6.11*exp(17.27*wall_temp/(wall_temp+237.3)); % 饱和水蒸气压力
vapor_pressure_gradient = vapor_pressure_inside - vapor_pressure_outside; % 水蒸气压力梯度
evaporation_rate = plant_transpiration + evaporative_heat_loss/2.45*vapor_pressure_gradient/(air_pressure/1000 - 0.378*vapor_pressure_outside); % 蒸发散热速率
% 计算温度变化
total_heat_gain = solar_heat_gain + evaporation_rate*2.45*10^6; % 总热增益
d_temp = (total_heat_gain - total_heat_loss)/total_heat_capacity*time_step; % 温度变化率
air_temp = air_temp + d_temp; % 更新空气温度
wall_temp = wall_temp + d_temp; % 更新墙体温度
% 记录温度
air_temps(i) = air_temp;
wall_temps(i) = wall_temp;
end
% 绘制温度随时间变化曲线图
plot(times/60/60, air_temps, 'r', times/60/60, wall_temps, 'b');
xlabel('时间(小时)');
ylabel('温度(摄氏度)');
legend('空气温度', '墙体温度');
```
上述代码的输出是一个温度随时间变化的曲线图,其中包含了空气和墙体的温度数据。这个模型可以被进一步扩展和改进,以考虑更多的因素和复杂的情形。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)