稳态
#工程数学,稳态
from numpy import *
from numpy.linalg import *
import pandas as pd
#室外空气温度
tw = [25.6, 24.5, 23.9, 23.5, 22, 23.2, 24, 25.5, 26, 28.1, 31, 32.8, 33.9, 35, 36.8, 35.1, 34, 32, 31, 29.5, 28, 27.2, 26.3, 26]
#太阳到外墙的总辐射
G = [0,0,0,0,0,0,0,236,504,671,769,802,769,671,504,236,0,0,0,0,0,0,0,0]
#外墙外表面热状况
hcw = 17
a = 0.8
#外墙内表面热状况
hcn = 4
hrn = 3
#室内空气温度
tn = 23.5
#墙体信息
c = [790, 1000, 840, 1090]
p = [1600, 1, 91, 800]
K = [0.87, 0.58, 0.04, 0.16]
dx = [0.1016, 0.0206, 0.055, 0.015875]
n = 9 #墙体划分网格数
# 对单个小时进行迭代
def single_hour_iteration(hour):
A = zeros((n, n)) # 创建零数组
B = zeros((n, 1))
# 外表面边界节点
A[0][0] = 2*K[0]/dx[0] + hcw
A[0][1] = -2*K[0]/dx[0]
B[0][0] = hcw*tw[hour] + a*G[hour]
# 内部节点
for j in range(2, n):
A[j-1][j-2] = -2*K[int((j-2)/2)]/dx[int((j-2)/2)]
A[j-1][j-1] = 2*K[int((j-1)/2)]/dx[int((j-1)/2)] + 2*K[int((j-2)/2)]/dx[int((j-2)/2)]
A[j-1][j] = -2*K[int((j-1)/2)]/dx[int((j-1)/2)]
B[j-1][0] = 0
# 内表面边界节点
A[n-1][n-2] = -2*K[3]/dx[3]
A[n-1][n-1] = 2*K[3]/dx[3] + hcn + hrn
B[n-1][0] = (hcn+hrn)*tn
result = solve(A, B)
result_list = []
for re in result:
result_list.append(re[0])
result_list.insert(0, tw[hour])
result_list.append(23.5)
return result_list
ti_list = []
# 循环24小时进行迭代
for hour in range(24):
result_list = single_hour_iteration(hour)
ti_list.append(result_list)
df = pd.DataFrame(ti_list)
#横向最多显示多少个字符, 一般80不适合横向的屏幕,平时多用200
pd.set_option('display.width', 200)
#显示所有列
pd.set_option('display.max_columns',None)
print(df)
# 将数据结果保存到excel表格中
# df.to_excel('工程数学稳态数值传热.xlsx')
结果:
0 1 2 3 4 5 6 7 8 9 10
0 25.6 25.532431 25.465359 25.398287 25.377888 25.357490 24.567778 23.778066 23.721081 23.664096 23.5
1 24.5 24.467824 24.435885 24.403946 24.394233 24.384519 24.008466 23.632412 23.605277 23.578141 23.5
2 23.9 23.887130 23.874354 23.861579 23.857693 23.853808 23.703386 23.552965 23.542111 23.531256 23.5
3 23.5 23.500000 23.500000 23.500000 23.500000 23.500000 23.500000 23.500000 23.500000 23.500000 23.5
4 22.0 22.048264 22.096172 22.144080 22.158651 22.173222 22.737302 23.301382 23.342085 23.382789 23.5
5 23.2 23.209653 23.219234 23.228816 23.231730 23.234644 23.347460 23.460276 23.468417 23.476558 23.5
6 24.0 23.983912 23.967943 23.951973 23.947116 23.942259 23.754233 23.566206 23.552638 23.539070 23.5
7 25.5 36.184192 35.765603 35.347014 35.219707 35.092400 30.163890 25.235380 24.879743 24.524106 23.5
8 26.0 48.874076 48.036711 47.199346 46.944675 46.690004 36.830771 26.971538 26.260105 25.548672 23.5
9 28.1 58.512468 57.357028 56.201588 55.850180 55.498771 41.894490 28.290209 27.308536 26.326864 23.5
10 31.0 65.782536 64.387178 62.991820 62.567445 62.143069 45.713964 29.284859 28.099349 26.913840 23.5
11 32.8 69.027594 67.525147 66.022699 65.565754 65.108809 47.418819 29.728829 28.452336 27.175842 23.5
12 33.9 68.589227 67.101246 65.613265 65.160719 64.708174 47.188514 29.668854 28.404652 27.140449 23.5
13 35.0 65.190456 63.814637 62.438818 62.020385 61.601952 45.402903 29.203853 28.034945 26.866036 23.5
14 36.8 59.326579 58.144273 56.961967 56.602387 56.242808 42.322199 28.401591 27.397092 26.392594 23.5
15 35.1 45.475305 44.750102 44.024899 43.804340 43.583782 35.045160 26.506538 25.890398 25.274259 23.5
16 34.0 33.662155 33.326796 32.991437 32.889442 32.787448 28.838889 24.890329 24.605404 24.320480 23.5
17 32.0 31.726507 31.455025 31.183544 31.100977 31.018410 27.821957 24.625504 24.394851 24.164198 23.5
18 31.0 30.758682 30.519140 30.279598 30.206745 30.133892 27.313492 24.493092 24.289575 24.086057 23.5
19 29.5 29.306946 29.115312 28.923678 28.865396 28.807113 26.550793 24.294474 24.131660 23.968846 23.5
20 28.0 27.855209 27.711484 27.567759 27.524047 27.480335 25.788095 24.095855 23.973745 23.851634 23.5
21 27.2 27.080950 26.962776 26.844601 26.808661 26.772720 25.381323 23.989925 23.889523 23.789122 23.5
22 26.3 26.209908 26.120479 26.031050 26.003851 25.976653 24.923704 23.870754 23.794775 23.718795 23.5
23 26.0 25.919561 25.839713 25.759866 25.735582 25.711297 24.771164 23.831031 23.763192 23.695352 23.5
非稳态
单小时迭代
以时刻1为例
#工程数学,非稳态
from numpy import *
from numpy.linalg import *
import pandas as pd
#室外空气温度
tw = [25.6, 24.5, 23.9, 23.5, 22, 23.2, 24, 25.5, 26, 28.1, 31, 32.8, 33.9, 35, 36.8, 35.1, 34, 32, 31, 29.5, 28, 27.2, 26.3, 26]
#太阳到外墙的总辐射
G = [0,0,0,0,0,0,0,236,504,671,769,802,769,671,504,236,0,0,0,0,0,0,0,0]
#外墙外表面热状况
hcw = 17
a = 0.8
#外墙内表面热状况
hcn = 4
hrn = 3
tn = 23.5
#墙体信息
c = [790, 1000, 840, 1090]
p = [1600, 1, 91, 800]
K = [0.87, 0.58, 0.04, 0.16]
dx = [0.1016, 0.0206, 0.055, 0.015875]
#假设的初始温度迭代值
ti_list = [[25.6, 25.5, 25.2, 25, 24.8, 24.6, 24.2, 24, 23.8, 23.6, 23.5]] #由外向内
#循环24小时进行迭代
for hour in range(1):
#对单个小时进行迭代
n= 9
A = zeros((n,n)) #创建零数组
B = zeros((n,1))
dt = 3600
T = 3600*20 #总时长,单位为s
t_list = [0] #时间
nT = int(T/dt) #时间次数
times = 0
old_list = []
for i in range(nT):
t = t_list[i] + dt
t_list.append(t)
#外表面边界节点
A[0][0] = p[0]*c[0]*dx[0]/4/dt + 2*K[0]/dx[0] + hcw
A[0][1] = -2*K[0]/dx[0]
B[0][0] = p[0]*c[0]*dx[0]/4/dt*ti_list[i][1] + hcw*tw[hour] + a*G[hour]
#内部节点
for j in range(2,n):
A[j-1][j-2] = -2*K[int((j-2)/2)]/dx[int((j-2)/2)]
A[j-1][j-1] = (p[int((j-1)/2)]*c[int((j-1)/2)]*dx[int((j-1)/2)]+p[int((j-2)/2)]*c[int((j-2)/2)]*dx[int((j-2)/2)])/4/dt + 2*K[int((j-1)/2)]/dx[int((j-1)/2)] + 2*K[int((j-2)/2)]/dx[int((j-2)/2)]
A[j-1][j] = -2*K[int((j-1)/2)]/dx[int((j-1)/2)]
B[j-1][0] = (p[int((j-1)/2)]*c[int((j-1)/2)]*dx[int((j-1)/2)]+p[int((j-2)/2)]*c[int((j-2)/2)]*dx[int((j-2)/2)])/4/dt * ti_list[i][j]
#内表面边界节点
A[n-1][n-2] = -2*K[3]/dx[3]
A[n-1][n-1] = p[3]*c[3]*dx[3]/4/dt + 2*K[3]/dx[3] + hcn + hrn
B[n-1][0] = p[3]*c[3]*dx[3]/4/dt*ti_list[i][n] + (hcn+hrn)*ti_list[i][n+1]
result = solve(A, B)
result_list = []
for re in result:
result_list.append(re[0])
result_list.insert(0, tw[hour])
result_list.append(23.5)
ti_list.append(result_list)
#求迭代误差
if times >= 1:
max_error = 0
for i in range(n+2):
error = abs(result_list[i] - old_list[i]) / abs(old_list[i])
if error > max_error:
max_error = error
if max_error <= 10 ** (-6):
break
else:
pass
old_list = result_list
times += 1
df = pd.DataFrame(ti_list)
#横向最多显示多少个字符, 一般80不适合横向的屏幕,平时多用200
pd.set_option('display.width', 200)
#显示所有列
pd.set_option('display.max_columns',None)
print(df)
结果:
0 1 2 3 4 5 6 7 8 9 10
0 25.6 25.500000 25.200000 25.000000 24.800000 24.600000 24.200000 24.000000 23.800000 23.600000 23.5
1 25.6 25.441745 25.254320 25.123467 25.103227 25.083003 24.397476 23.791224 23.734497 23.671522 23.5
2 25.6 25.447703 25.299629 25.198745 25.179987 25.161233 24.450967 23.762174 23.710665 23.656883 23.5
3 25.6 25.463633 25.336566 25.247966 25.228817 25.209670 24.478191 23.757641 23.705364 23.652583 23.5
4 25.6 25.478541 25.365739 25.283322 25.263856 25.244392 24.497878 23.759268 23.706071 23.652943 23.5
5 25.6 25.490662 25.388440 25.309861 25.290166 25.270472 24.513327 23.762383 23.708389 23.654616 23.5
6 25.6 25.500161 25.406002 25.330134 25.310271 25.290409 24.525509 23.765500 23.710852 23.656439 23.5
7 25.6 25.507523 25.419561 25.345721 25.325733 25.305745 24.535050 23.768185 23.713015 23.658052 23.5
8 25.6 25.513212 25.430024 25.357733 25.337650 25.317567 24.542477 23.770367 23.714788 23.659378 23.5
9 25.6 25.517602 25.438096 25.366998 25.346842 25.326687 24.548235 23.772096 23.716198 23.660434 23.5
10 25.6 25.520990 25.444324 25.374145 25.353934 25.333722 24.552691 23.773447 23.717302 23.661262 23.5
11 25.6 25.523603 25.449129 25.379660 25.359405 25.339151 24.556133 23.774497 23.718161 23.661906 23.5
12 25.6 25.525620 25.452837 25.383915 25.363627 25.343340 24.558792 23.775311 23.718826 23.662404 23.5
13 25.6 25.527176 25.455697 25.387198 25.366885 25.346572 24.560844 23.775939 23.719340 23.662790 23.5
14 25.6 25.528376 25.457904 25.389731 25.369398 25.349066 24.562427 23.776425 23.719737 23.663088 23.5
15 25.6 25.529302 25.459607 25.391685 25.371338 25.350990 24.563649 23.776799 23.720044 23.663318 23.5
16 25.6 25.530017 25.460921 25.393193 25.372834 25.352475 24.564592 23.777089 23.720281 23.663496 23.5
17 25.6 25.530568 25.461935 25.394357 25.373989 25.353620 24.565320 23.777312 23.720464 23.663633 23.5
18 25.6 25.530994 25.462717 25.395255 25.374879 25.354504 24.565881 23.777484 23.720605 23.663739 23.5
19 25.6 25.531322 25.463321 25.395947 25.375567 25.355186 24.566315 23.777617 23.720713 23.663820 23.5
20 25.6 25.531575 25.463786 25.396482 25.376097 25.355712 24.566649 23.777719 23.720797 23.663883 23.5
时刻1迭代了20个小时到达了稳态。
单天迭代
#工程数学,非稳态
from numpy import *
from numpy.linalg import *
import matplotlib.pyplot as plt
import pandas as pd
#室外空气温度
tw = [25.6, 24.5, 23.9, 23.5, 22, 23.2, 24, 25.5, 26, 28.1, 31, 32.8, 33.9, 35, 36.8, 35.1, 34, 32, 31, 29.5, 28, 27.2, 26.3, 26]
#太阳到外墙的总辐射
G = [0,0,0,0,0,0,0,236,504,671,769,802,769,671,504,236,0,0,0,0,0,0,0,0]
#外墙外表面热状况
hcw = 17
a = 0.8
#外墙内表面热状况
hcn = 4
hrn = 3
tn = 23.5
#墙体信息
c = [790, 1000, 840, 1090]
p = [1600, 1, 91, 800]
K = [0.87, 0.58, 0.04, 0.16]
dx = [0.1016, 0.0206, 0.055, 0.015875]
#假设的初始温度迭代值
ti_list = [[25.6, 25.5, 25.2, 25, 24.8, 24.6, 24.2, 24, 23.8, 23.6, 23.5]] #由外向内
#循环24小时进行迭代
for hour in range(24):
#对单个小时进行迭代
n= 9
A = zeros((n,n)) #创建零数组
B = zeros((n,1))
dt = 3600
T = 3600 #总时长,单位为s
t_list = [0] #时间
nT = int(T/dt) #时间次数
for i in range(nT):
t = t_list[i] + dt
t_list.append(t)
#外表面边界节点
A[0][0] = p[0]*c[0]*dx[0]/4/dt + 2*K[0]/dx[0] + hcw
A[0][1] = -2*K[0]/dx[0]
B[0][0] = p[0]*c[0]*dx[0]/4/dt*ti_list[i][1] + hcw*tw[hour] + a*G[hour]
#内部节点
for j in range(2,n):
A[j-1][j-2] = -2*K[int((j-2)/2)]/dx[int((j-2)/2)]
A[j-1][j-1] = (p[int((j-1)/2)]*c[int((j-1)/2)]*dx[int((j-1)/2)]+p[int((j-2)/2)]*c[int((j-2)/2)]*dx[int((j-2)/2)])/4/dt + 2*K[int((j-1)/2)]/dx[int((j-1)/2)] + 2*K[int((j-2)/2)]/dx[int((j-2)/2)]
A[j-1][j] = -2*K[int((j-1)/2)]/dx[int((j-1)/2)]
B[j-1][0] = (p[int((j-1)/2)]*c[int((j-1)/2)]*dx[int((j-1)/2)]+p[int((j-2)/2)]*c[int((j-2)/2)]*dx[int((j-2)/2)])/4/dt * ti_list[i][j]
#内表面边界节点
A[n-1][n-2] = -2*K[3]/dx[3]
A[n-1][n-1] = p[3]*c[3]*dx[3]/4/dt + 2*K[3]/dx[3] + hcn + hrn
B[n-1][0] = p[3]*c[3]*dx[3]/4/dt*ti_list[i][n] + (hcn+hrn)*ti_list[i][n+1]
result = solve(A, B)
result_list = []
for re in result:
result_list.append(re[0])
result_list.insert(0, tw[hour])
result_list.append(23.5)
ti_list.append(result_list)
df = pd.DataFrame(ti_list)
#横向最多显示多少个字符, 一般80不适合横向的屏幕,平时多用200
pd.set_option('display.width', 200)
#显示所有列
pd.set_option('display.max_columns',None)
print(df)
结果:
0 1 2 3 4 5 6 7 8 9 10
0 25.6 25.500000 25.200000 25.000000 24.800000 24.600000 24.200000 24.000000 23.800000 23.600000 23.5
1 25.6 25.441745 25.254320 25.123467 25.103227 25.083003 24.397476 23.791224 23.734497 23.671522 23.5
2 24.5 24.921386 25.038364 24.987001 24.969320 24.951649 24.338440 23.780806 23.726940 23.666105 23.5
3 23.9 24.637554 24.920570 24.912565 24.896281 24.880001 24.306238 23.775124 23.722818 23.663150 23.5
4 23.5 24.448332 24.842041 24.862941 24.847587 24.832236 24.284771 23.771336 23.720070 23.661180 23.5
5 22.0 23.738752 24.547556 24.676851 24.664987 24.653117 24.204267 23.757130 23.709764 23.653792 23.5
6 23.2 24.306416 24.783144 24.825723 24.811067 24.796412 24.268670 23.768494 23.718009 23.659702 23.5
7 24.0 24.684859 24.940203 24.924971 24.908454 24.891942 24.311605 23.776071 23.723505 23.663642 23.5
8 25.5 30.648120 27.415028 26.488854 26.443009 26.397247 24.988153 23.895458 23.810111 23.725727 23.5
9 26.0 36.850691 29.989171 28.115497 28.039146 27.962960 25.691852 24.019637 23.900192 23.790304 23.5
10 28.1 41.561750 31.944318 29.350987 29.251466 29.152172 26.226335 24.113954 23.968612 23.839352 23.5
11 31.0 45.115219 33.419051 30.282895 30.165898 30.049174 26.629485 24.185096 24.020220 23.876348 23.5
12 32.8 46.701341 34.077310 30.698860 30.574062 30.449558 26.809435 24.216851 24.043255 23.892861 23.5
13 33.9 46.487075 33.988388 30.642668 30.518924 30.395471 26.785126 24.212562 24.040144 23.890631 23.5
14 35.0 44.825821 33.298947 30.206999 30.091426 29.976121 26.596652 24.179303 24.016017 23.873335 23.5
15 36.8 41.959672 32.109460 29.455343 29.353865 29.252619 26.271480 24.121921 23.974391 23.843495 23.5
16 35.1 35.189437 29.299730 27.679828 27.611648 27.543611 25.503378 23.986378 23.876065 23.773008 23.5
17 34.0 29.415398 26.903434 26.165569 26.125786 26.086071 24.848298 23.870779 23.792208 23.712893 23.5
18 32.0 28.469290 26.510787 25.917449 25.882320 25.847245 24.740959 23.851837 23.778467 23.703043 23.5
19 31.0 27.996236 26.314464 25.793390 25.760587 25.727832 24.687290 23.842366 23.771597 23.698118 23.5
20 29.5 27.286655 26.019980 25.607300 25.577987 25.548713 24.606786 23.828160 23.761291 23.690730 23.5
21 28.0 26.577075 25.725495 25.421210 25.395387 25.369594 24.526282 23.813954 23.750986 23.683343 23.5
22 27.2 26.198632 25.568437 25.321962 25.298000 25.274063 24.483347 23.806377 23.745490 23.679403 23.5
23 26.3 25.772883 25.391746 25.210309 25.188440 25.166592 24.435044 23.797854 23.739306 23.674970 23.5
24 26.0 25.630967 25.332849 25.173091 25.151920 25.130768 24.418944 23.795013 23.737245 23.673492 23.5
多天迭代
#工程数学,非稳态
from numpy import *
from numpy.linalg import *
import matplotlib.pyplot as plt
import pandas as pd
#室外空气温度
tw = [25.6, 24.5, 23.9, 23.5, 22, 23.2, 24, 25.5, 26, 28.1, 31, 32.8, 33.9, 35, 36.8, 35.1, 34, 32, 31, 29.5, 28, 27.2, 26.3, 26]
#太阳到外墙的总辐射
G = [0,0,0,0,0,0,0,236,504,671,769,802,769,671,504,236,0,0,0,0,0,0,0,0]
#外墙外表面热状况
hcw = 17
a = 0.8
#外墙内表面热状况
hcn = 4
hrn = 3
tn = 23.5
#墙体信息
c = [790, 1000, 840, 1090]
p = [1600, 1, 91, 800]
K = [0.87, 0.58, 0.04, 0.16]
dx = [0.1016, 0.0206, 0.055, 0.015875]
n = 9 #墙体划分网格数
# 对单个小时进行迭代
def single_hour_iteration(ti_list):
A = zeros((n, n)) # 创建零数组
B = zeros((n, 1))
dt = 3600
T = 3600 # 总时长,单位为s
t_list = [0] # 时间
nT = int(T / dt) # 时间次数
for i in range(nT):
t = t_list[i] + dt
t_list.append(t)
# 外表面边界节点
A[0][0] = p[0]*c[0]*dx[0]/4/dt + 2*K[0]/dx[0] + hcw
A[0][1] = -2*K[0]/dx[0]
B[0][0] = p[0]*c[0]*dx[0]/4/dt*ti_list[i][1] + hcw*tw[hour] + a*G[hour]
# 内部节点
for j in range(2, n):
A[j-1][j-2] = -2*K[int((j-2)/2)]/dx[int((j-2)/2)]
A[j-1][j-1] = (p[int((j-1)/2)]*c[int((j-1)/2)]*dx[int((j-1)/2)]+p[int((j-2)/2)]*c[int((j-2)/2)]*dx[int((j-2)/2)])/4/dt + 2*K[int((j-1)/2)]/dx[int((j-1)/2)] + 2*K[int((j-2)/2)]/dx[int((j-2)/2)]
A[j-1][j] = -2*K[int((j-1)/2)]/dx[int((j-1)/2)]
B