Python求解偏微分方程

更新於 發佈於 閱讀時間約 3 分鐘

1 引言

微分方程是描述一個系統的狀態隨時間和空間演化的最基本的數學工具之一,其在物理、經濟、工程、社會等各方面都有及其重要的應用。 然而,只有很少的微分方程式可以解析求解,尤其對於偏微分方程,能解析求解的種類更是寥寥可數。 更多的微分方程式可以用數值法來求解,只要精確度夠高,就可以滿足科學和工程上的需求。


數值解微分方程的基本想法是先把時間和空間離散化,再將微分化為差分,建立遞推關係,再利用電腦強大的重複運算能力,快速得到任意格點處的值。 Python的Numpy、Scipy工具包可以很好地實現此功能,Matplotlib工具包則可以將求解結果畫為非常直觀的圖形。


接下來,我們先以常微分方程的數值解為例,引入差分的思想,再推廣到偏微分方程。

2 常微分方程的差分求解

一般地,一階常微分方程式可以寫成

raw-image

上述微分方程可以化為差分方程

raw-image


從而我們得到遞推關係

raw-image

有了遞推關係和初始條件以後,就可以利用Python的強大運算功能來求解了


2.1 RC迴路放電問題

對於一個 RC 迴路,我們有

raw-image

其中,I R Q C 分別為電流,電阻,電量和電容,利用 I=dQ/dt並定義

τ=RC,我們得到一個含初始條件的一階常微分方程

raw-image


這個方程式當然可以解析求解,得到

raw-image

另一方面依照差分法,可以得到遞推關係

raw-image


下面我們用Python進行數值求解,並和解析結果做比較。

import numpy as np
import matplotlib.pyplot as plt
rc = 2.0 #設置常數
dt = 0.5 #設置步長
n = 1000 #設置分割段數
t = 0.0 #設置初始時間
q = 1.0 #設置初始電量

qt=[] #用來存放差分得到的q值
qt0=[] #用來存放解析得到的q值
time = [] #用來存放時間值

for i in range(n):
    t = t + dt
    q1 = q - q*dt/rc #qn+1的近似值
    q = q - 0.5*(q1*dt/rc + q*dt/rc) #差分遞推關係
    q0 = np.exp(-t/rc) #解析關係
    qt.append(q) #差分得到的q值列表
    qt0.append(q0) #解析得到的q值列表
    time.append(t) #時間列表

plt.plot(time,qt,'o',label='Euler-Modify') #差分得到的電量隨時間的變化
plt.plot(time,qt0,'r-',label='Analytical') #解析得到的電量隨時間的變化
plt.xlabel('time')
plt.ylabel('charge')
plt.xlim(0,20)
plt.ylim(-0.2,1.0)
plt.legend(loc='upper right')
plt.show()
raw-image

在COLAB跑了一下

差分法得到的結果與解析法得到結果的比較,發現兩者符合得很好

這說明對於這個問題,改進的歐拉法已經可以給出足夠精確的結果。

要注意的是,這個微分方程本身比較簡單,可以解析求解,

而對於複雜得多的微分方程,沒辦法解析求解,

但是上述數值求解差分法仍然是適用的。


留言
avatar-img
留言分享你的想法!
avatar-img
于正龍(Ricky)的沙龍
37會員
58內容數
人工智能工作經驗跟研究
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
本文是筆者在查反電動勢公式時,赫然發現並未詳細描述,故進行補完。 反電動勢的數學公式,最常出現在馬達電器方程式當中,是用來描述馬達運作時的電能狀態的數學表示式;如下列所式,其中V為馬達輸入電壓,i為馬達電流,Rm則是馬達電阻,Lm是馬達電感,di/dt代表電流對時間的微分,因為馬達電感的作用僅在電
Thumbnail
本文是筆者在查反電動勢公式時,赫然發現並未詳細描述,故進行補完。 反電動勢的數學公式,最常出現在馬達電器方程式當中,是用來描述馬達運作時的電能狀態的數學表示式;如下列所式,其中V為馬達輸入電壓,i為馬達電流,Rm則是馬達電阻,Lm是馬達電感,di/dt代表電流對時間的微分,因為馬達電感的作用僅在電
Thumbnail
1.0 從函數到函算語法 1.2 函數概念小史 1.2.1 中譯的來源 1.2.2 一個速度問題 1.2.3 幾何的方法 1.2.4 微積分的記法  三 有些讀者大概都知道,微積分學有兩個分科﹕一為微分學 (differential calculus),一為積分學 (integ
Thumbnail
1.0 從函數到函算語法 1.2 函數概念小史 1.2.1 中譯的來源 1.2.2 一個速度問題 1.2.3 幾何的方法 1.2.4 微積分的記法  三 有些讀者大概都知道,微積分學有兩個分科﹕一為微分學 (differential calculus),一為積分學 (integ
Thumbnail
直觀理解 導數:考慮的是單一變數的函數,描述的是函數在某點的斜率或變化率。 偏導數:考慮的是多變數函數,描述的是函數在某個變數變化時的變化率,其他變數保持不變。  (針對各維度的調整 或者稱變化 你要調多少) 應用 導數:在物理學中應用廣泛,例如描述速度和加速度。 偏導數:在多變量分析、優
Thumbnail
直觀理解 導數:考慮的是單一變數的函數,描述的是函數在某點的斜率或變化率。 偏導數:考慮的是多變數函數,描述的是函數在某個變數變化時的變化率,其他變數保持不變。  (針對各維度的調整 或者稱變化 你要調多少) 應用 導數:在物理學中應用廣泛,例如描述速度和加速度。 偏導數:在多變量分析、優
Thumbnail
1 引言 微分方程是描述一個系統的狀態隨時間和空間演化的最基本的數學工具之一,其在物理、經濟、工程、社會等各方面都有及其重要的應用。 然而,只有很少的微分方程式可以解析求解,尤其對於偏微分方程,能解析求解的種類更是寥寥可數。 更多的微分方程式可以用數值法來求解,只要精確度夠高,就可以滿足科學和工程
Thumbnail
1 引言 微分方程是描述一個系統的狀態隨時間和空間演化的最基本的數學工具之一,其在物理、經濟、工程、社會等各方面都有及其重要的應用。 然而,只有很少的微分方程式可以解析求解,尤其對於偏微分方程,能解析求解的種類更是寥寥可數。 更多的微分方程式可以用數值法來求解,只要精確度夠高,就可以滿足科學和工程
Thumbnail
数学对于计算机编程来说重要性是毋庸置疑的,更何况我们现在不仅仅是编程,而是走在「人工智能」的路上。可以说,数学应该是最重要的基础。 我们在学习AI的过程当中可能会遇到的一些关于数学方面的一些东西,比如说线性代数里面的矩阵运算,比如说求导,还有一些概率统计,图论方面的一些东西。
Thumbnail
数学对于计算机编程来说重要性是毋庸置疑的,更何况我们现在不仅仅是编程,而是走在「人工智能」的路上。可以说,数学应该是最重要的基础。 我们在学习AI的过程当中可能会遇到的一些关于数学方面的一些东西,比如说线性代数里面的矩阵运算,比如说求导,还有一些概率统计,图论方面的一些东西。
Thumbnail
Python是一種廣泛使用的程式語言,它有許多內建的模組可以幫助我們進行各種數學運算,其中一個就是math模組,它提供了許多標準的數學函數,例如三角函數、對數函數、指數函數等,在這篇文章中,我們將介紹如何使用math模組。 導入math模組並計算圓周率的值: # 計算圓周率的值 math模組中
Thumbnail
Python是一種廣泛使用的程式語言,它有許多內建的模組可以幫助我們進行各種數學運算,其中一個就是math模組,它提供了許多標準的數學函數,例如三角函數、對數函數、指數函數等,在這篇文章中,我們將介紹如何使用math模組。 導入math模組並計算圓周率的值: # 計算圓周率的值 math模組中
Thumbnail
數學為我們提供了豐富多彩的素材用以學習程式設計:從讀者已掌握的知識(例如繪製一個抛物線,計算一個函數的導數)到未知的領域(如求一個複雜函數的極值),這期間有驗證的快樂,也有探索的艱辛,在不斷重複這些活動的過程中學會熟練運用這一工具,工具的熟練使用反過來也會幫助我們對特定問題進行更為深入的探討與研究。
Thumbnail
數學為我們提供了豐富多彩的素材用以學習程式設計:從讀者已掌握的知識(例如繪製一個抛物線,計算一個函數的導數)到未知的領域(如求一個複雜函數的極值),這期間有驗證的快樂,也有探索的艱辛,在不斷重複這些活動的過程中學會熟練運用這一工具,工具的熟練使用反過來也會幫助我們對特定問題進行更為深入的探討與研究。
Thumbnail
  至今為止,本文都使用代數的方式來討論微分,並以生活、科學中的瞬間變化率,如:速度等,對微分的定義做出詮釋。這一系列主題文章「函數微分的幾何意義」將分多集探討,用幾何角度來了解函數微分。本文章第一集將先引入代數和幾何的觀念;在概略介紹函數的圖形定義。
Thumbnail
  至今為止,本文都使用代數的方式來討論微分,並以生活、科學中的瞬間變化率,如:速度等,對微分的定義做出詮釋。這一系列主題文章「函數微分的幾何意義」將分多集探討,用幾何角度來了解函數微分。本文章第一集將先引入代數和幾何的觀念;在概略介紹函數的圖形定義。
Thumbnail
這篇文章中將延續上文脈絡,先回顧某一定值的導數和可微分的定義,讓讀者發現x=n時的導數與某個給定的定值n已經形成函數關係;接著透過同一個人的不同裝扮與不同稱呼,來說明數學變換符號的意義。第三段將導數的符號作變換,表示導函數的概念與定義,最後總結導函數即是微分,以及重新回顧微分的意義。
Thumbnail
這篇文章中將延續上文脈絡,先回顧某一定值的導數和可微分的定義,讓讀者發現x=n時的導數與某個給定的定值n已經形成函數關係;接著透過同一個人的不同裝扮與不同稱呼,來說明數學變換符號的意義。第三段將導數的符號作變換,表示導函數的概念與定義,最後總結導函數即是微分,以及重新回顧微分的意義。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News