日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

计算物理作业python代码_使用 Python 解决计算物理问题

發(fā)布時間:2023/12/29 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算物理作业python代码_使用 Python 解决计算物理问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Python部落(python.freelycode.com)組織翻譯,禁止轉(zhuǎn)載,歡迎轉(zhuǎn)發(fā)。

介紹

拉普拉斯方程是一種最簡單的二階偏微分方程,同樣也是一種最簡單的橢圓形偏微分方程。此方程在科學界,尤其是物理學上具有舉足輕重的地位,因為它能夠描述電勢能和熱傳導問題。在熱力學(熱傳導)中,我們將拉普拉斯方程稱為穩(wěn)態(tài)熱方程或者熱傳導方程。

在這篇文章中,我們將用數(shù)值求解代替積分求解,來求解拉普拉斯方程。當我們一提到數(shù)值方法,就意味著離散化。離散化就是將連續(xù)形式的微分方程轉(zhuǎn)化為離散形式,同時它意味著我們將積分問題轉(zhuǎn)化為線性代數(shù)問題,以便使用程序解決。

在這篇文章中,我們使用有限差分法來求解簡單的熱傳導問題。我們的編程語言是 Python,使用的庫有:Numpy(numerical library for Python) 和 matplotlib(library for plotting and visualizing data using Python)。下面將看到,我們可以使用很少的 Python 代碼來實現(xiàn)豐富的功能。

背景

在計算物理中,我們經(jīng)常編程來解決問題,因為計算機程序可以進行大型且復雜的計算。計算物理領(lǐng)域就像下圖所展示的一樣:

現(xiàn)如今,有很多編程語言可以進行數(shù)值計算,例如 MATLAB。但是此處我們使用 Python,因為它簡單易學而且還免費。它有很多非常好用的數(shù)值計算和數(shù)據(jù)可視化庫,例如 Numpy,Scipy 和 Matplotlib。Python 也提供可以實現(xiàn)并行計算,我們可以在計算機集群上運行 Python 程序。

讓我們回到拉普拉斯方程上,下一節(jié)我們將使用 Python 來計算簡單的二維熱傳導方程。首先我們默認讀者們已經(jīng)了解了關(guān)于有限差分法的基本理論知識,此處我不再詳細介紹有限差分法的內(nèi)容,離散化帶來的誤差問題,穩(wěn)定性問題,一致性問題,收斂問題以及測試優(yōu)化問題等我也不詳細說明。同樣,我們也將會跳過很多計算公式。

此處我們關(guān)注的只是如何使用 Python,Numpy 和 Matplotlib 來解決問題,當然也捎帶的講述一點計算的物理意義,但是我們不會過多的關(guān)注數(shù)值分析驗證問題。所以下面給出的源代碼對那些不懂計算物理學的讀者來說是有價值的。

準備工作

我們的實驗環(huán)境:

系統(tǒng) OS: Linux Ubuntu 14.04 LTS

Python: Python 2.7

Numpy: Numpy 1.10.4

Matplotlib: Matplotlib 1.5.1

如果你使用的是 Ubuntu 系統(tǒng),你可以使用 pip 來安裝 Numpy 和 Matplotlib,或者在你的終端上運行下面的語句:

用下面的語句安裝 Matplotlib

注意一點: Ubuntu 14.04 系統(tǒng)自帶 Python,你只需要在你的終端輸入 Python 然后按回車鍵即可。

當然我們可以在 Windows 操作系統(tǒng)上使用 Python,Numpy 和 Matplotlib,但是我更喜歡 Ubuntu。

編寫代碼

下式即為二維熱傳導問題的拉普拉斯方程

其中 T 代表了溫度,x 代表 x 軸,y 代表了 y 軸。x 和 y分別是位置坐標的函數(shù)。如果你想看這個方程的積分解,可以點擊這里。

此處我們僅僅求解二維的拉普拉斯方程。求解過程如下:

我們求解的問題是:在給定邊界溫度的情況下,求出二維平面內(nèi)每點的穩(wěn)定溫度(即為拉普拉斯方程的解)。下面,我們將離散化整個二維平面,使用方格將其分割,然后使用有限差分法將拉普拉斯方程進行離散化。下圖展示了離散化后的平面區(qū)域。

我們設(shè)置 Δx = Δy = 1 cm,得到如下的方格圖。

其中,綠色的節(jié)點代表了我們想求解的節(jié)點,白色的節(jié)點是邊界條件,我們已知其溫度。下面給出離散化的拉普拉斯方程形式。

將上式整理后,可以得到最終的離散方程如下所示。

下面讓我求解這個方程。為了求解這個方程,首先使用為所有的綠色節(jié)點假設(shè)一個猜測值,此處的猜測值是 30 攝氏度,當然你也可以設(shè)置為 35 攝氏度,因為我們并不知道其具體是多少度,這只是一個假設(shè)值。我們將迭代這個方程,直到迭代前后值的誤差非常小為止,我們稱之為收斂。在迭代的過程中,節(jié)點的溫度值會自動的調(diào)整,所以當我們的猜測值越接近真實值,求解的速度就越快。

下面讓我們正式開始寫代碼。為了使用 Numpy,我們需要將其載入,同樣的過程適用于 Matplotlib。 我們使用 pyplot 模塊來畫最后的結(jié)果。所以,第一步是載入必要的模塊。

然后,我們?yōu)槌绦蛟O(shè)置變量初始值。

然后就是設(shè)置畫圖窗口,并將其分割。

np.meshgrid() 函數(shù)可以產(chǎn)生網(wǎng)格,用這個可以畫出最后的結(jié)果,其中第一個參數(shù)代表 x 軸,第二個參數(shù)代表了 y 軸。我們使用 np.arange() 來產(chǎn)生一個一維數(shù)組,其起始于某一個值,終止于某一個值,在本例中,起始于 0 終止于 lenX,另一個起始于 0 終止于 lenY。接下來,我們生成一個二維數(shù)組,定義其形狀,并使用猜測值對其進行初始化,然后我們設(shè)置邊界條件,使用前面給出的邊界條件進行初始化。

然后我們使用 Python 來實現(xiàn)方程,并在 for 循環(huán)中對其進行迭代。

注意代碼的縮進格式,Python 代碼使用的是空格或者縮進,而不使用大括號。截止此處,我們的主程序部分已經(jīng)完成了,接下來,我們使用 Matplotlib 來畫出最后的結(jié)果。

完成! 下面給出完整的程序。

程序很短,對吧。 好的,下面我們將程序復制粘貼到名為 findif.py 的文件中。然后打開終端,進入源代碼所在目錄,使用下面的語句運行程序。

運行后,我們會得到下面的結(jié)果圖。

我們可以改變邊界條件,例如將右側(cè)邊界的值設(shè)置為 30 攝氏度,即 Tright = 30,會得到下面的結(jié)果圖。

興趣點

Python 是一種簡單易學的動態(tài)編程語言,在計算物理和別的學科里,它有很多有用的庫。因為 Python 是一種解釋型的語言,和 C 、 C++ 相比,它可能運行的比較慢,但是必須強調(diào)的是,它很好學。我們同樣可以使用較少的 Python 代碼來實現(xiàn)更多的工作。這樣一來,我們不必糾結(jié)于如何編程,只需將精力放在想要解決的問題上面。

在計算物理中,使用 Numpy 和 Scipy(numeric and scientific library for Python)我們可以解決很多復雜的問題,因為這些庫為我們提供了矩陣運算,線性代數(shù)操作以及信號處理,傅里葉變化,統(tǒng)計分析,優(yōu)化等等現(xiàn)成的函數(shù)。

另外,不僅在計算物理領(lǐng)域, Python 還廣泛的應用于機器學習,甚至谷歌的 tensorflow 也用的是 Python。

英文原文:https://www.codeproject.com/Articles/1087025/Using-Python-to-Solve-Computational-Physics-Proble

譯者:無

總結(jié)

以上是生活随笔為你收集整理的计算物理作业python代码_使用 Python 解决计算物理问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。