求具有隔热材料的外围护结构墙体的温度分布得Python程序

本文探讨使用Python进行稳态和非稳态下外围护结构墙体的温度分布模拟。通过单小时和单天迭代,展示空气温度变化对墙体温度的影响。在最终代码中,空气温度非定值,特别是距离墙体0.5m处空气温度的变化,与墙体内部表面温度接近。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

稳态

#工程数学,稳态
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值