調和振動子のエネルギー固有状態の式についてオーバーフローを起こさない計算法
この前の続きです
この前はをオーバーフローを起こさずに計算する方法についてと
それが量子的な調和振動子のエネルギー固有状態に出てくるという話をしました。
↓エネルギー固有状態の式
ここで
としてみました。
Cとかx0が何かはここに書いてる
調和振動子 - Wikipedia
Hnはエルミート多項式なのですが、これがやべーやつ
なのでが計算できるようになっても結局オーバーフローします
さっきのΦについての式をHnについて書き直してみましょう
これをさっきの
に代入してまとめると
なのでn=0 とn=1について計算すれば計算出来ちゃいます
def zenka_oscn(n, x): if (n == 1 or n == 0): return occeogenfanclist[n](x) else: return ((2 / n) ** 0.5) * x/x0 * zenka_oscn(n - 1, x) - (((n - 1) / n) ** 0.5) * zenka_oscn(n - 2, x)
これを単純に計算しようとすると重いのでフィボナッチ数列の場合のようにメモ化(キャッシュ化?)してみましょう
pythonのメモ化はクッソ簡単です
頭に@lru_cache(maxsize=hoge)をつけるだけです。やっぱりpython便利
from functools import lru_cache @lru_cache(maxsize=None) def zenka_oscn(n, x): if (n == 1 or n == 0): return occeogenfanclist[n](x) else: return ((2 / n) ** 0.5) * x/x0 * zenka_oscn(n - 1, x) - (((n - 1) / n) ** 0.5) * zenka_oscn(n - 2, x)
これめっちゃ賢いなぁ~~と感心したのですがどうでしょう?