AT's Blog

趣味のプログラミングに関する技術メモがメインです。

Python3+SciPyで第二種楕円積分を計算してみた

そうだ、sin(x) [ 0, \pi ] の経路長を計算してみよう

なかなか寝つけなかった私は、何をトチ狂ったか深夜1時過ぎにそう思いついたのでした。

モルダー、あなた疲れてるのよ

脳内スカリー捜査官になだめられつつ、これぐらい高校生でも解けんだろ、と思ってつらつらと計算していったのですが、


\int dl = \int (dx^{2} + dy^{2}) = \int^{\pi}_{0} \sqrt{1 - \sin^{2} x} dx

!?

一見簡単そうに見える積分式ですが、どうやってもこれが解けない解けない。

それもそのはず。この積分式、第二種楕円積分だったのです。

楕円積分 - Wikipedia

どうりで解けないと思ったぜ!

楕円積分ってあれでしょ?フェルマーの最終定理的なアレでしょ?ぐらいの知識しかない私は、 解析的に解くのをさっさとあきらめてSciPyで数値計算させることにしたのでした。

フェルマーの最終定理 (新潮文庫)

フェルマーの最終定理 (新潮文庫)

SciPyのintegrateモジュールを利用して計算してみると、

>>> import numpy as np
>>> from scipy import integrate
>>> integrate.quad(lambda x:(1-np.sin(x)**2)**0.5, 0, np.pi)
(2.0, 2.220446049250313e-14)
>>> 

というわけで、あっさりとsin(x) [ 0, \pi ] の経路長が2であることがわかりました。スッキリ!