maximaから移行するにあたって色々と読み替え。pythonでは楕円関数はscipyに入っているらしい。あまり情報がないのでメモ。まず楕円関数は\(y={\rm sn}(u,k)\)は次の楕円積分の逆関数として定める:
\[u=\int_0^{\arcsin(y)} {\rm d}t \frac{1}{\sqrt{1-k^2\sin^2(t)}}\]
この\(k\)が母数(elliptic modulus)となる。 他にも\({\rm cn}(u,k),{\rm dn}(u,k)\)があるけど、調べればわかるので割愛。
さて、このヤコビ楕円関数をpython上で扱いたい場合にはscipyパッケージを使う。ただしelliptic modulus \(k^2\)の代わりにmを用いて表す。\((m=k^2)\)
import scipy
scipy.special.ellipj(u,m)
そうすると答えがリストとして返ってくる。その中身は \(({\rm sn(u,\sqrt m)},{\rm cn(u,\sqrt m)},{\rm dn(u,\sqrt m)},\phi)\) となるので必要に応じて取り出す。
最後の項目\(\phi\)は楕円積分の結果を返してくる(らしい)。
それにしてもelliptic modulus の表記が色々あってややこしいと思うのは僕だけだろうか。
たまに\(m\)の代わりに\(\sin \theta\)を使う表記も見かけた気がする。
数値計算をしてみると、半年ぐらい前に解析的に求めた結果が実は間違っていたことが分かった。\(\arcsin\)の値域は\([-\pi/2,\pi/2]\)なのに\([-\pi,\pi]\)だと勘違いしていた。恥ずかしい...。
とはいえ予備的に始めた計算が割と順調に行き始めたのでちょっと満足。久しぶりに酒でも飲もうかな。
0 件のコメント:
コメントを投稿