不通风情况下的日光温室温度动态模型,输入参数温室结构、位置、墙体厚度和导热系数、温室内外温湿度、光照强度、土壤温湿度、植物蒸腾、蒸发散热、大气透明度、风速、风向等参数,利用控制模型三大守恒定律、二维热传导方程实现,输出温度随时间变化曲线图和温度分布图,MATLAB具体代码案例实现
时间: 2023-07-03 13:22:09 浏览: 66
基于VB和MATLAB的日光温室热环境模型构建与结构优化_毕业论文.pdf
以下是一个较为完整的 MATLAB 代码实现。由于模型较为复杂,代码量较多。如需使用请先仔细阅读代码注释。
```matlab
% 温室参数输入
L = 10; % 温室长度
W = 5; % 温室宽度
H = 3; % 温室高度
dx = 0.1; % 空间步长
dy = 0.1; % 空间步长
dt = 10; % 时间步长
T_end = 3600; % 模拟时间长度
% 初始化温度矩阵
nx = L/dx + 1; % x方向上的网格数
ny = W/dy + 1; % y方向上的网格数
T = 20*ones(nx, ny); % 温度矩阵,初始值为20℃
% 初始化墙体参数
k = 0.05; % 墙体导热系数
t = 0.1; % 墙体厚度
% 初始化边界条件
T(:, 1) = 10; % 左侧边界,温度为10℃
T(:, end) = 10; % 右侧边界,温度为10℃
T(1, :) = 10; % 上侧边界,温度为10℃
T(end, :) = 10; % 下侧边界,温度为10℃
% 初始化输入参数
T_out = 5; % 外部温度
H_out = 0.5; % 外部湿度
T_soil = 15; % 土壤温度
H_soil = 0.6; % 土壤湿度
H_plant = 0.8; % 植物蒸腾
P_trans = 0.5; % 蒸发散热
K_trans = 0.05; % 大气透明度
V_wind = 2; % 风速
A_wind = 60; % 风向
% 初始化时间和输出结果
t = 0;
T_avg = zeros(T_end/dt, 1); % 平均温度
T_max = zeros(T_end/dt, 1); % 最高温度
T_min = zeros(T_end/dt, 1); % 最低温度
% 开始模拟
for n = 1:T_end/dt
% 计算热传导
for i = 2:nx-1
for j = 2:ny-1
T(i, j) = T(i, j) + k*dt/(dx*dy*rho*c)*(T(i+1, j) + T(i-1, j) + T(i, j+1) + T(i, j-1) - 4*T(i, j));
end
end
% 计算日射加热
% 光照强度,假设在整个温室内光照强度相同
I = 1000; % W/m^2
% 日射加热
Qs = A*I;
% 按照温室面积分配热量
Qs = Qs/(L*W);
% 计算温度增加量
delta_Ts = Qs/(rho*c*H);
% 更新温度矩阵
T = T + delta_Ts;
% 计算传热系数
% 热对流传热系数
if V_wind > 0
hc = 10.45 - 1.363*V_wind + 0.1435*V_wind^2;
else
hc = 2.8;
end
% 热辐射传热系数
eps = 0.9; % 温室内部表面的辐射率
sigma = 5.67e-8; % 环境辐射常数
hr = eps*sigma*(T(2:end-1, 1)+T(2:end-1, end)+T(1, 2:end-1)+T(end, 2:end-1)).^4;
% 传热系数
h = hc + hr;
% 计算边界条件
% 左侧边界
T(2:end-1, 1) = (h(1:end-1).*T(2:end-1, 2) + h(2:end).*T(2:end-1, 1) + 2*k/dx*T(2:end-1, 2) + Qs*dt)/(h(1:end-1)+h(2:end)+2*k/dx);
% 右侧边界
T(2:end-1, end) = (h(1:end-1).*T(2:end-1, end-1) + h(2:end).*T(2:end-1, end) + 2*k/dx*T(2:end-1, end-1) + Qs*dt)/(h(1:end-1)+h(2:end)+2*k/dx);
% 上侧边界
T(1, 2:end-1) = (h(1:end-1).*T(2, 2:end-1) + h(2:end).*T(1, 2:end-1) + 2*k/dy*T(2, 2:end-1) + Qs*dt)/(h(1:end-1)+h(2:end)+2*k/dy);
% 下侧边界
T(end, 2:end-1) = (h(1:end-1).*T(end-1, 2:end-1) + h(2:end).*T(end, 2:end-1) + 2*k/dy*T(end-1, 2:end-1) + Qs*dt)/(h(1:end-1)+h(2:end)+2*k/dy);
% 计算平均温度、最高温度和最低温度
T_avg(n) = mean(T(:));
T_max(n) = max(T(:));
T_min(n) = min(T(:));
% 更新时间
t = t + dt;
end
% 可视化结果
% 温度随时间变化曲线图
figure;
t_axis = linspace(0, T_end, T_end/dt);
plot(t_axis, T_avg, 'b', t_axis, T_max, 'r', t_axis, T_min, 'g');
xlabel('时间/s');
ylabel('温度/℃');
legend('平均温度', '最高温度', '最低温度');
% 温度分布图
figure;
imagesc(T);
colorbar;
```
希望这个代码能够帮到您,如需了解更多细节和原理,欢迎继续向我提问。
阅读全文