緩募: Rust・Gnuplot・ffmpeg による 1 次元波動方程式の差分解法のバグ潰し

この記事は2分で読めます

このサイトは学部では早稲田で物理を, 修士では東大で数学を専攻し, 今も非アカデミックの立場で数学や物理と向き合っている一市民の奮闘の記録です. 運営者情報および運営理念についてはこちらをご覧ください.

中高の数学の復習から専門的な数学・物理までいろいろな情報を発信しています.
中高数学に関しては自然を再現しよう役に立つ中高数学 中高数学お散歩コース
大学数学に関しては現代数学観光ツアーなどの無料の通信講座があります.
その他にも無料の通信講座はこちらのページにまとまっています.
ご興味のある方はぜひお気軽にご登録ください!


追記

次のツイートの指摘を受けて修正した.

差分化の仕方を変えれば挙動も当然変わってしまいます。 pic.twitter.com/EJLcgVdPP1— 黒木玄 Gen Kuroki (@genkuroki) March 31, 2020

既に黒木氏からのコメントがありますが、まずvをアップデートした後にuをv(t,x)ではなくv(t+dt,x)でアップデートする必要があるようです。僕が間違っていなければ、いわゆるvon Neumannの安定性解析でv(t,x)だと解が必ず不安定になることが示せます(僕はみょんちゃんが言っていたので気づきました)— Q (@life_wont_wait) March 31, 2020

これも結論を言うと, そもそもの離散化の仕方・計算の仕方がまずかった.
詳しくは上記黒木さんのツイートまたは GitHub 参照.
Julia も気になっているが, まずは Rust でベクトル計算できないかが気になる.
てらモスの兄貴に聞くのがいいだろうか?

結論から

結論から言うと, 次のコードが意図通りに動かない.

これが次のような挙動をする.

意図しているのは次のような挙動.

バグなしコードの説明

まずはバグなしコードから.

このページを参考にして,
素直に波動方程式を解いている.
初期条件は $u = 0, u_t = 0$ で,
原点で波を $(1/2) \sin (2 \pi f t)$ で駆動していて,
次のように離散化している.

\begin{align}
u(t + \Delta t, x) =
2 u(t,x) – u(t – \Delta t, x) + \left( \frac{\Delta t}{\Delta x} \right)^2 (u(t,x + \Delta x) – 2 u(t,x) + u(t,x)).
\end{align}

意図通りに動いているので問題ないだろうと思っている.

バグありコードの説明

追記: 最初にも追記したように, 修正済.
詳しくは上記黒木さんのツイートまたは GitHub 参照.

初期条件や波の駆動は 1dim_wave_eq_only_u.rs と同じ設定にしている.
2 階の常微分方程式でよくやるように, $u, v = u_t$ として,
次の連立の偏微分方程式を解く形にしている.

\begin{align}
u_t = v, \quad v_t = u_{xx}.
\end{align}

これを次のように離散化した.

\[
u(t + \Delta t, x) =
u(t, x) + v(t, x) \Delta t,\]

\[v(t + \Delta t, x) =
v(t, x) + \frac{u(t, x – \Delta x) – 2 u(t,x) + u(t, x + \Delta x)}{(\Delta x)^2} \Delta t.\]

  • 追記:$2 \Delta x$ は $(\Delta x)^2$ だという指摘を受け, 式を修正. 実装も直したら発散した. つらい.

実際には次のように実装している.

どこがまずいのかがよくわかっていない.
どなたかわかる方, ぜひ教えてほしい.


中高の数学の復習から専門的な数学・物理までいろいろな情報を発信しています.
中高数学に関しては自然を再現しよう役に立つ中高数学 中高数学お散歩コース
大学数学に関しては現代数学観光ツアーなどの無料の通信講座があります.
その他にも無料の通信講座はこちらのページにまとまっています.
ご興味のある方はぜひお気軽にご登録ください!

  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

このサイトについて

数学・物理の情報を中心にアカデミックな話題を発信しています。詳しいプロフィールはこちらから。通信講座を中心に数学や物理を独学しやすい環境づくりを目指して日々活動しています。
  • このエントリーをはてなブックマークに追加
  • LINEで送る

YouTube チャンネル登録

講義など動画を使った形式の方が良いコンテンツは動画にしています。ぜひチャンネル登録を!

メルマガ登録

メルマガ登録ページからご登録ください。 数学・物理の専門的な情報と大学受験向けのメルマガの 2 種類があります。

役に立つ・面白い記事があればクリックを!

記事の編集ページから「おすすめ記事」を複数選択してください。