• <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>

    python有限差分求解拉普拉斯方程

    拉普拉斯方程是一種簡單的二階偏微分方程,形式如圖,本文用python語言,有限差分的方法求解一個二維矩形平板上的定態傳熱問題。

    工具/原料

    • python3
    • matplotlib
    • numpy
    • 如果你使用anaconda套裝,那么上面的包應該都已經預裝好了
    • 請注意這篇文章的撰寫日期為2018年2月

    方法/步驟

    1. 1

      這是拉普拉斯方程,T是溫度,x,y分別是坐標。在這個傳熱問題中可以理解為平衡態下傳入一個點的熱量與傳出這個點的熱量相等。

    2. 2

      首先解釋一下我們的問題。

      一個二維平板,上邊緣為100攝氏度,左右和下邊緣是0攝氏度,有傳熱的拉普拉斯方程求解平衡時平板上各點的溫度。

      拉普拉斯方程較為簡單,比較容易上手,代碼編寫比較容易

    3. 3

      應該也容易想象,最后的結果應該類似于這樣(這幅圖是我的計算結果)

    4. 4

      求解偏微分方程數值解首先需要離散化

      離散化包含三個部分

      1·求解區域的離散化

      2·微分方程的離散化

      3·定解條件的離散化

    5. 5

      求解區域的離散化

      我們只對格點上的溫度進行求解,若果把平面劃分為0到10的二維格點,如圖,那么我們需要求解的就是綠色的9*9的81個點上的溫度值

    6. 6

      定解條件就是邊緣上的溫度

    7. 7

      然后是微分方程的離散化

    8. 8

      有了這些離散化,再加上對中間待求的點進行初始化,我們就可以開始計算了,我們可以將中間的點先初始化為30攝氏度。然后由上一部的離散化的方程逐步迭代,畢竟結果。

      雖然這種方法逼近速度不快,但是簡介直接。

    9. 9

      下面是python代碼

      首先導入必要的包

      import numpy as npimport matplotlib.pyplot as pltimport copy

    10. 10

      然后設定參數

      #最大循環次數maxIter = 500

      #矩形大小lenX = 20lenY = 20delta = 1

      #邊界條件Ttop = 100Tbot = 0Tleft = 0Tright = 0

      #初始猜測值Tguess = 30

      #設置顏色插值和顏色映射colorinterpolation = 50colourMap = plt.cm.jet

    11. 11

      然后進行各變量的初始化

      #設立網格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)

    12. 12

      然后循環迭代計算溫度,每次計算完與上次做差比較,輸出變化的最大值

      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")

    13. 13

      最后進行畫圖和保存,保存為一張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()

    14. 14

      前面已經展示過這個問題的結果圖了,下面展示一張將右側邊緣溫度調整為30攝氏度的結果圖片。

    注意事項

    • 注意python的縮進
    • You can do it!
    • 發表于 2018-02-20 00:00
    • 閱讀 ( 1868 )
    • 分類:其他類型

    你可能感興趣的文章

    相關問題

    0 條評論

    請先 登錄 后評論
    admin
    admin

    0 篇文章

    作家榜 ?

    1. xiaonan123 189 文章
    2. 湯依妹兒 97 文章
    3. luogf229 46 文章
    4. jy02406749 45 文章
    5. 小凡 34 文章
    6. Daisy萌 32 文章
    7. 我的QQ3117863681 24 文章
    8. 華志健 23 文章

    聯系我們:uytrv@hotmail.com 問答工具
  • <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>
    久久久久精品国产麻豆