技術系サラリーマン勉強記

数学、物理、プログラミングなど日々勉強した内容を取り扱っていきます。

数値計算をする上で安定性を確認することは重要

微分方程式数値計算をする際に、空間や時間方向に離散化を行いますが、これらのサンプリング間隔がある条件を満たさないと、解が発散することがあります。この条件が安定性の条件と呼ばれています。

たとえば、以前実施した1次元波動方程式の数値計算 (両端を固定した弦の振動を想定)で、空間方向の点間隔を \Delta x、時間方向の間隔を \Delta tとし、 \Delta x = 1/20 \Delta t = 1/50と設定した場合、以下のアニメーションに示す通り、正解(微分解)と同じような挙動をしています。

f:id:mysciphmt:20191207180238g:plain

一方、時間方向の間隔を少し荒くし、 \Delta x = 1/20 \Delta t = 1/10と設定した場合、数値計算結果は、以下のアニメーションのようにすぐに発散してしまいます。この場合は、上述した安定性の条件を満たしていないことが分かっています。

f:id:mysciphmt:20191208184822g:plain

闇雲にデータ間隔を小さくすると、それだけデータ数は増え計算時間がかかるので、安定性を保ちつつ、計算量が少なくなるようなパラメータ設定をするというのが数値計算をする上で重要なのだと実感しました。どのように安定性の条件を調べるかについては、色々難しそうなのでこれから勉強していきたいと思います。

参考文献