拉普拉斯方程是一種簡單的二階偏微分方程,形式如圖,本文用python語言,有限差分的方法求解一個二維矩形平板上的定態傳熱問題。
這是拉普拉斯方程,T是溫度,x,y分別是坐標。在這個傳熱問題中可以理解為平衡態下傳入一個點的熱量與傳出這個點的熱量相等。
首先解釋一下我們的問題。
一個二維平板,上邊緣為100攝氏度,左右和下邊緣是0攝氏度,有傳熱的拉普拉斯方程求解平衡時平板上各點的溫度。
拉普拉斯方程較為簡單,比較容易上手,代碼編寫比較容易
應該也容易想象,最后的結果應該類似于這樣(這幅圖是我的計算結果)
求解偏微分方程數值解首先需要離散化
離散化包含三個部分
1·求解區域的離散化
2·微分方程的離散化
3·定解條件的離散化
求解區域的離散化
我們只對格點上的溫度進行求解,若果把平面劃分為0到10的二維格點,如圖,那么我們需要求解的就是綠色的9*9的81個點上的溫度值
定解條件就是邊緣上的溫度
然后是微分方程的離散化
有了這些離散化,再加上對中間待求的點進行初始化,我們就可以開始計算了,我們可以將中間的點先初始化為30攝氏度。然后由上一部的離散化的方程逐步迭代,畢竟結果。
雖然這種方法逼近速度不快,但是簡介直接。
下面是python代碼
首先導入必要的包
import numpy as npimport matplotlib.pyplot as pltimport copy
然后設定參數
#最大循環次數maxIter = 500
#矩形大小lenX = 20lenY = 20delta = 1
#邊界條件Ttop = 100Tbot = 0Tleft = 0Tright = 0
#初始猜測值Tguess = 30
#設置顏色插值和顏色映射colorinterpolation = 50colourMap = plt.cm.jet
然后進行各變量的初始化
#設立網格X, Y = np.meshgrid(np.arange(0, lenX), np.arange(0, lenY))
#初始化溫度T = np.empty((lenX,lenY))T.fill(Tguess)
#邊界條件T[(lenY-1):, :] = TtopT[:1, :] = TbotT[:, (lenX-1):] = TrightT[:, :1] = Tleft
Tlast = copy.deepcopy(T)
然后循環迭代計算溫度,每次計算完與上次做差比較,輸出變化的最大值
print("Solving,Please wait")for iteration in range(0, maxIter): for i in range(1, lenX-1, delta): for j in range(1, lenY-1, delta): T[i, j] = 0.25 * (T[i+1][j] + T[i-1][j] + T[i][j+1] + T[i][j-1]) print(abs(T-Tlast).max()) Tlast = copy.deepcopy(T)print("Iteration finished")
最后進行畫圖和保存,保存為一張pdf
# Configure the contour
plt.title("Contour of Temperature")
plt.contourf(X, Y, T, colorinterpolation, cmap=colourMap)
# Set Colorbar
plt.colorbar()
#保存圖片
plt.savefig('plt1.pdf')
# Show the result in the plot window
plt.show()
前面已經展示過這個問題的結果圖了,下面展示一張將右側邊緣溫度調整為30攝氏度的結果圖片。
0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!