Julia演習問題:数値計算の基礎

予備知識

次式で表される波動方程式を満たす\(\phi(\boldsymbol{x},t) \) \[ \frac{1}{c^2} \frac{\partial^2 \phi}{\partial t^2} = \nabla^2 \phi \] を数値的に解く.ここで,\(\boldsymbol{x}, t\)は空間,時間を表す量, \(c\) は波速(一定)である.
上式が空間的に1次元の場合,波動方程式は \[ \frac{1}{c^2} \frac{\partial^2 \phi}{\partial t^2} = \frac{\partial^2 \phi}{\partial x^2} \] となる.まずは最も簡単なこの形式で計算することを考える.
数値的に解くためには,数式にあるような連続空間から離散空間へ落としこむ近似が必要である.
その離散化の手法の一つとして,ここではテイラー展開を使う.
時間を固定して考えると, \(\phi(x\pm\Delta x)\) の値は \[\phi(x+\Delta x) = \phi(x) + \frac{\partial \phi(x)}{\partial x} \Delta x + \frac{1}{2} \frac{\partial^2 \phi(x)}{\partial x^2} (\Delta x)^2 + ... \] \[\phi(x-\Delta x) = \phi(x) - \frac{\partial \phi(x)}{\partial x} \Delta x + \frac{1}{2} \frac{\partial^2 \phi(x)}{\partial x^2} (\Delta x)^2 - ... \] と表せる.3次以上の項を無視し,この2式を辺々足して整理すると \[\frac{\partial^2 \phi(x)}{\partial x^2} = \frac{\phi(x+\Delta x) - 2\phi(x) + \phi(x-\Delta x)}{(\Delta x)^2}\] を得る.\(\phi(x)\) を \(\phi_x\),\(x\) から正の方向に \(\Delta x\) だけ離れた点の\(\phi\)を \(\phi_{x+1}\) のように表記すると, \[ \frac{\partial^2 \phi_x}{\partial x^2} = \frac{\phi_{x+1} - 2\phi_x + \phi_{x-1}}{(\Delta x)^2} \] となる.
時間 \( t\) についても同様にすると,離散化した1次元波動方程式は次のように書ける. \[ \frac{\phi^{t+1}_{x} - 2\phi^{t}_{x} + \phi^{t-1}_{x}}{(\Delta t)^2} = c^2 \left( \frac{\phi^{t}_{x+1} - 2\phi^{t}_{x} + \phi^{t}_{x-1}}{(\Delta x)^2} \right) \] 数値計算では,点 \(x\) で時間が \(\Delta t\) だけ進んだ値 \(\phi^{t+1}_{x}\) を逐次計算していくことになる.上式を \(\phi^{t+1}_{x}\) について解くと \[ \phi^{t+1}_{x} = 2(1-\lambda^2)\phi^{t}_{x} + \lambda^2\left(\phi^{t}_{x+1} + \phi^{t}_{x-1} \right) - \phi^{t-1}_{x} \] となる.ただし,\[ \lambda^2 = \left( c \frac{\Delta t}{\Delta x} \right)^2 \] である.

問題

  1. 好きな初期波形 \(\phi(x,0)\) を与え,上式を参考に1次元波動方程式を数値的に解け.
  2. \(\Delta t\) を徐々に大きくし,計算結果が異常な値となった時の \(\lambda\) の値を確認せよ.
  3. 数値的に解いた値と1次元波動方程式の解 \[ \phi(x,t) = \frac{1}{2}\phi(x-ct,0) + \frac{1}{2}\phi(x+ct,0) \] と比較せよ.

参考

解答例

初期波形 \[ \phi(x,0) = \mathrm{exp}(-10x^2) \] を波速 \(c=\pi/2 \), 区間 \( [-\pi,\pi] \)で計算した例.
2種類の境界条件で実行したものを示している.
一般解の方は境界を設定していないため外へ抜けていく.

wave1d_1.gif
wave1d_2.gif

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2019-04-06 (Sat) 17:13:44 (19d)