數(shù)值求解波動(dòng)方程 [1]
????????關(guān)于這個(gè)系列的專欄,? 與其說是教程,? 不如說更像是筆記,? 因?yàn)閿?shù)值求解的內(nèi)容實(shí)在在太多太多了,? 我也只是學(xué)到什么寫什么而已,? 希望可以幫到有需要的人?

波動(dòng)方程
????????波動(dòng)方程是一個(gè)用于描述像弦振動(dòng),? 薄膜振動(dòng),? 聲波傳播和地震波等現(xiàn)象的方程,? 甚至麥克斯韋方程組也可以退化為波動(dòng)方程,? 從而使用波動(dòng)方程去研究電磁行為.
????????一般地,? 波動(dòng)方程的形式為?,? 其中
?為拉普拉斯算子,?
為波在介質(zhì)里傳播的速度,? 又叫相速度.? 那么求解函數(shù)?
?即為所求波的解.? 關(guān)于波動(dòng)方程的推導(dǎo),? 數(shù)學(xué)解等,? 在《數(shù)理方程》里就有,? 而且也不是這個(gè)專欄的重點(diǎn).? 因?yàn)椴▌?dòng)方程是二階微分方程,? 所以在給出初值條件 (一般來說是
?的
?和
) 時(shí)可以求出相應(yīng)的特解.? 另外波動(dòng)方程具有很多種變形:? 邊值條件,? 強(qiáng)迫振動(dòng),? 非均勻介質(zhì)等.
????????數(shù)值求解波動(dòng)方程就是在已知初值條件時(shí)使用計(jì)算機(jī)求得相應(yīng)的特解,? 主要實(shí)現(xiàn)方法有有限元法和有限差分法等.? 相較于有限元法,? 有限差分法更容易,? 所以這系列的專欄是使用有限差分法進(jìn)行波動(dòng)方程的數(shù)值求解.

有限差分法
????????由于計(jì)算機(jī)無法處理無限的數(shù)據(jù),? 所以當(dāng)進(jìn)行數(shù)值模擬時(shí)必須對(duì)模型進(jìn)行離散化 (避免無限小的間隔) 和截?cái)?(避免無限大的區(qū)間).
????????由導(dǎo)數(shù)的定義???可以得出有限差分法的離散化為
,? 但
?暗含著條件
,? 所以有
,? 于是更準(zhǔn)確的離散化應(yīng)為
.? 類似地可以得出二階導(dǎo)數(shù)的離散化:??
.? 雖然可以繼續(xù)推到更高階導(dǎo)數(shù)的離散化,? 但是波動(dòng)方程只需二階就足夠了.
????????函數(shù)在離散化后可以使用數(shù)組儲(chǔ)存,? 假設(shè)??在數(shù)組表示為
,? 其中下標(biāo)為索引,? 那么有
?在數(shù)組中為
.? 所以導(dǎo)數(shù)的離散化可以寫為
,? 二階導(dǎo)數(shù)為
.
????????有限差分法的區(qū)間截?cái)嗟葍r(jià)于微分問題里的邊值條件,? 通過控制邊界的行為去避免讀取區(qū)間外的數(shù)據(jù),? 從而使計(jì)算范圍限制在區(qū)間內(nèi).? 常用的邊值條件有 Dirichlet 條件和?Neumann 條件,? 假設(shè)??為邊界,? 那么 Dirichlet 條件表示為
,? Neumann 條件表示為
,? 其中
?為常數(shù).

????????在使用數(shù)值求解時(shí)需要注意一個(gè)嚴(yán)重的問題:? 數(shù)值不穩(wěn)定.? 它會(huì)造成求解誤差較大或者直接發(fā)散出現(xiàn) inf, nan.? 由于我自己并沒有太深究這個(gè)問題,? 所以并沒有具體分析過數(shù)值不穩(wěn)定,? 但從個(gè)人經(jīng)驗(yàn)來說,? 數(shù)值不穩(wěn)定與參數(shù)選擇和模型的具體實(shí)現(xiàn),? 甚至初值有關(guān).

實(shí)現(xiàn)
????????下面以一維波動(dòng)方程為例,? 一維波動(dòng)方程為?,? 其中函數(shù)
?即為所求的解.? 方程離散化得?
,? 移項(xiàng)得?
.? 其中兩塊系數(shù)可以提前計(jì)算以提升效率.
????????然后需要設(shè)置邊值條件,? 這里在左邊界使用?Dirichlet 條件 ,? 右邊界使用?Neumann 條件?
,? 假設(shè)離散化后的數(shù)組索引范圍為
?(大部分編程語言是
,? 我都老 julia 人了),? 那么根據(jù)邊值條件有?
?和
?(對(duì)于其他語言是
和
).
????????最后因?yàn)椴▌?dòng)方程是二階微分方程,? 所以至少需要提供兩個(gè)初值條件,? 這里以? 和?
?為例,? 那么有?
?和
.

????????在這個(gè)特定的實(shí)現(xiàn)里,? 當(dāng)滿足??時(shí),? 會(huì)造成空間數(shù)值不穩(wěn)定,? 值會(huì)以指數(shù)速度發(fā)散;? 當(dāng)
時(shí)為時(shí)間數(shù)值不穩(wěn)定,? 時(shí)間不穩(wěn)定不會(huì)造成值發(fā)散,? 但會(huì)產(chǎn)生類似色散的現(xiàn)象;? 只有恰好
時(shí)才是數(shù)值穩(wěn)定的.? 如下圖所示




因?yàn)閼械冒l(fā) gayhub,? 直接貼出我的 julia 實(shí)現(xiàn)了.
