C++で、グラフは Matplot++を利用。調和振動子のシュレディンガー方程式を4次R-K法で数値解。2階線形微分方程式であるぞの。心地よい響き(笑)
左側では粒子は存在しないとかで初期値は0として計算始めて右側で一旦は収束しているので解なのであるが、なおも計算を進めると発散するのである。
この発散は4次R-K法のアルゴリズムではしゃーないわねえ・・・ですかねえ。詳しくは知らんけど。
サイト記事を真似て実行したのだがサイト記事では右側をあるところで計算止めているので図のような発散を表示しないのである。
誤差の蓄積があって発散するらしいぞの。4次R-K法を改善したアルゴリズムもあるらしいのだが、コードは知らんのである。
PythonのScipyに odeint()という微分方程式の数値解を求める関数があって、それでやっても同じように右側では発散した。odeint()も4次R-K法なのであろう。詳しくは知らん。
とりあえずC++でグラフ描画はMatplot++を使うのである。それ知らなかった時は計算結果をText Fileに落としてgnuplotで描画したのである。それでもいいのである。
グラフ描画の方法を2つ知ったのである。
そして肝心の何を計算するか? そこがダイジあるよ、ソレ ワタシ ナニスルカ シラン アル。
このような計算をする場合には微分方程式の無次元化というものを先にやるようだ。微分方程式そのもので計算するわけではない。やってもいいだろうけど。ものごとは単純化するほうがよいのである。詳しくは知らん。
ただ、変数変換して無次元化して解を得ても、それを実際の物理の数字に戻してね、だよよん。無次元化した微分方程式の解が出たから終わりってのは物理の学徒としては落第なのだよよん。
てなわけでワタクシは落第ですわ(´・ω・`)