記ㄍ一下
先放一維的
穩定度分析和二維的之後再放
---
notebook放在這
一維波動方程長這樣
第2、3個式子是Boundary Condition
第4、5則是Initial Condition
使用最簡單的有限差分法來解
利用有限差分法,可以把原本的方程式離散化
利用最後離散化的結果,就可以去迭代算出結果了
但是從最後那個式子可以看出
如果想要知道某個時間點 i+1 的值,那麼需要 i 和 i-1 的值才能夠把它算出來
也就是說至少一開始需要t = 0和t = 1的資料,這樣才可以推出t = 2的資料
然後才可以再根據t = 1、t = 2算出t = 3的資料,以此類推
而最一開始的t=0、t=1的資料
就需要靠前面的Initial Condition去得到
其中f(x)可以得到t = 0時的資料
t = 1時則是用另一個IC,搭配g(x)算出來
假設一個例子
這個例子裡,初始情況是f(x) = 0.5 * (cos(2pi * x) - 1)
而g(x) = 0,也就是代表t = 0時和t = 1時,兩個時間的資料是一模一樣的
另外BC則設定固定,也就是邊界不會跟著震盪
那計算大概是這樣
畫成圖的話是這樣
如果用3D的圖來畫會長這樣
畫成gif來表示
GIF在這
如果換一個IC
改成是一個Impulse
也就是這樣
結果會變成
GIF在這
另一個情況是free boundary
我這邊設定只有其中一個邊界固定
另外一個邊界讓它自由移動
所以寫成這樣
只需要改這ㄍ其他都不變
最後的結果變成這樣
GIF
如果IC改成Impulse,然後同樣讓一個邊界自由移動
會是這樣
GIF
-------
穩定性的部分
依據Von Neumann Stability Analysis,可以得到穩定條件為c < dx / dt
所以假設dx = dt = 0.1時
如果c = 0.94,那麼會是穩定的
而如果同樣dx = dt = 0.1
但是c = 1.01
因c = 1.01 > (0.1/0.1),所以會是數值不穩定
發生不穩定時,可以直接透過調整dx、dt,讓式子滿足穩定條件
或是改用其他方法解PDE
比方說如果改用隱式的做法
同樣利用Von Neumann Stability Analysis,可以證明在任何情況下都是數值穩定的
------
結論:
用latex打公式好累....