用 Python 做導熱問題的數值計算
這是菜鳥學Python的粉絲第8篇原創投稿
閱讀本文大概需要3.5 分鐘
本篇作者:小匡同學
作為科研go,MATLAB一直是做數值計算的標配。然而目前Python的火爆程度、豐富的第三方庫、靈活便捷的編程方式,也讓科研go們垂涎不已。本篇文章從NHT(數值傳熱學)的基本原理與Python代碼實現兩個方面帶領NHT小白入坑,老司機自動略過
要點:
工具Pycharm
第三方庫為Numpy和matplotlib
Py3
01
開發環境準備
1).Python用於科學計算
要先安裝第三方的科學計算庫,這裡我們主要做數值計算,Numpy就可以啦。數值計算結果需要以圖形曲線的形式輸出,在Python中matplotlib庫可用於繪製類似於MATLAB的圖表
2).對於習慣了MATLAB編程的人員來說
MATLAB安裝的時候直接安裝了所有庫,非常便捷。然而Python的所有庫都需要自己安裝
3).可以安裝Anaconda
它基本包括了市面上所有常用庫,然後將pycharm的解釋器修改為anaconda的解釋器,相當於MATLAB了。由於安裝的庫多,相應的軟體的啟動運行都非常慢,想想MATLAB啟動就知道了
4).第三方庫的安裝
對於新手比較麻煩。這裡推薦一種簡單的方法。在FileSettingsProject Interpreter中,可以看到已安裝的庫
右邊紅框中,減號表示卸載選中的庫,箭頭表示升級庫,如果要安裝新庫,
則選擇加號
在上方可以在線搜索所需要的庫,右下角可以選擇版本,點擊安裝就可以在 線安裝庫。全程傻瓜式操作,方便快捷!
02
導熱問題分析
1).金屬導熱問題
假設一根等截面的直金屬棒,長度2m,受到內熱源加熱,線熱流密度為1000W/m,金屬棒兩端為定壁溫邊界,溫度300K。穩態導熱下,溫度分布滿足如下的控制方程。
2).如果將坐標原點選擇在金屬棒的中心,則本問題的解析解為:
3).在數值傳熱學的計算中
需要在金屬棒上劃分網格節點,本例中我們在金屬棒上均勻布置n個節點,考慮到兩端各需要一個節點,因此金屬棒實際被分成了n-1段微元。這n各節點上的溫度值組成了一個一維數組,因此可以用一個一維數組保存各節點的溫度信息
有了這個離散方程,基本就可以開始進行數值計算中最常用的迭代計算了。然而還需要一個判斷迭代結束的條件,在CFD/NHT中,叫做收斂準則
事實上數值計算的基本原理就是通過設計好的演算法不斷迭代,從而構建一個柯西列,如果這個數列依範數收斂了,則可以認為它收斂於真實解。
依範數收斂可以簡單的認為就是相鄰兩次迭代之差的範數(1,2,無窮範數都可)趨於,就可以認為收斂。
因此內存中要始終保持兩個一維數組,一個保存當前迭代得到的溫度值,一個是上一次迭代得到的溫度值。最後,完整的程序代碼如下:
迭代結果如下 :
多次迭代結果都是在300K附近,迭代似乎沒有進行就結束了。事實上,觀察第14行,是將當前的溫度數組賦值給上一步的溫度數組,然後迭代計算更新當前的溫度數組
這個過程中,出現了數組的拷貝操作,不同於MATLAB,在Python中數組的拷貝並不是創建一個新數組,而只是將新的數組名指向原數組在內存中的地址
這樣做的結果就是temp和temp_up在內存中其實是存儲了相同的數據,二者同步改變,二者之差的範數因此始終是,程序認為迭代已收斂,直接跳出了
4).多次迭代的結果
迭代10次
數值結果在不斷趨近於解析結果
迭代200次
數值結果與解析結果已經完全重合,計算完成。
熟悉MATLAB的同學可能發現,Python繪圖與MATLAB十分類似,不僅是操作代碼近似,圖片風格也一樣。這是因為matplotlib庫的開發初衷就是為了 像MATLAB那樣方便快捷的繪製圖形曲線
03
關於Pycharm斷點調試
1).首先設置斷點
然後alt+shift+F9,進入調試模式。注意這裡需要鍵盤操作。直接點擊pycharm界面的debug按鈕,無法進行下一步的操作。進入調試後,從下面的debugger進入console界面
2).點擊那個「show Python prompt」按鈕
3).就可以在console中輸入想要查看的變數的數值了
比如本例中的xxline存儲的是所有網格節點的x坐標,是個一維數組
歡迎大家關注 菜鳥學Python",更多好玩有趣的Python原創教程,趣味演算法,經驗技巧,行業動態,盡在菜鳥學Python,一起來學python吧
※2 雖然我用來切西瓜,但Python其實是把屠龍刀
※高盛最新調查:Python超過漢語成為未來最重要技能,你準備學哪種編程語言?
※數據專家必知必會的 7款Python 工具
※為什麼說Python會成為最流行的編程語言?
※全棧工程師親自打造全面的多線程資料大全!從零到進階,謝謝大牛
TAG:Python |