ネイピア数を求めてみる 【Python】

Python

Python のプログラミングの一例として、ネイピア数を求めるスクリプトについてまとめておきます。
以下の環境で動作確認をしています。
環境: Windows パソコン、Python 3.x

背景

Python は数値計算に適しているといわれています。
そこで以前、Python プログラミングの一例として、円周率を自力で求めています。
円周率についてまとめたら、ネイピア数についても求めておきたくなります。
そこでネイピア数を求めるスクリプトと関連する式について、まとめておくことにします。

計算式

ネイピア数を求めるにあたり、オーソドックスに以下の式を使うことにします。

(式1)
$$ e = \lim_{n \to +\infty} \biggl( 1+\frac{1}{n} \biggl)^{n} $$

・ (式1)の証明やネイピア数の性質については、末尾に概要をまとめておくことにします。

サンプルコードと実行結果

上の(式1)をプログラムにします。

for n1 in range( 1, 1000000 ): 
    val1 = ( 1.0 + 1.0/n1 ) ** n1 
    print( val1 ) 

上記のプログラムを実行すると、2.71828… の数字がずらずらと表示され、真の値に収束していく動きとなります。
実質、最低1行程度のプログラムを書くだけで、ネイピア数を数値的に求められることがわかります。

サンプルコードの説明

・ (式1)に従って、ネイピア数となる val1 を求めています。
・ カッコ (…) 内は(式1)のとおりです。カッコ外の **n1 としているところで、累乗を求めています。
・ 実際は、for ループを使わなくても、任意の大きな数を n1 に入れることで、ネイピア数を求めることが可能です。しかし、ここでは、数値が収束していく様子を表示させるため、(式1)を for ループに入れて、繰り返し、表示させています。
・ n1 の範囲を range() のところで設定しています。計算結果の精度を高くするためには、n1 をより大きな範囲で設定し、実行してみてください。
・ また、スクリプトでは n1 は整数としています。しかし、(式1)の導出(下記)から、n1 は整数に限定する必要はありません。

ネイピア数の性質と証明

ネイピア数の性質について主なものをまとめておきます。
まず、以下の関数を定義しておきます。
(式2)
$$ f(x) = e^{x} $$

性質1: 式2を微分すると元の関数に戻る

よく知られているように、以下の性質があります。
(式3)
$$ \frac{df(x)}{dx} = \frac{d}{dx} e^{x} = e^{x} = f(x) $$

性質2: 切片での傾き(微分係数)が1になっている

(式3)で、x=0 とすることで、以下の式が得られます。
(式4)
$$ \frac{df(0)}{dx} = e^{0} = 1 $$

その他の性質

(式4)について微分の定義を書き出すと、つぎの式が得られます。
$$ \frac{d f(0)}{dx} = \lim_{Δx \to +0} \frac{f(0+Δx)-f(0)}{Δx} = 1 $$
この式に(式2)を用いることで、つぎのよく知られた式が得られます。
(式5)
$$ \lim_{Δx \to +0} \frac{e^{Δx}-1}{Δx} = 1 $$

同様に、(式2)について微分の定義を書き出すと、つぎのようになります。
$$ \frac{df(x)}{dx} = \lim_{Δx \to +0} \frac{f(x+Δx)-f(x)}{Δx}  = 1$$

$$ \frac{df(x)}{dx} = \lim_{Δx \to +0} \frac{e^{x+Δx}-e^{x}}{Δx} $$
右辺で lim の外に exp(x) をくくりだし、(式5)を再度使うと、つぎのようになります。
(式6)
$$ \frac{df(x)}{dx} = e^{x} \lim_{Δx \to +0} \frac{e^{Δx}-1}{Δx}= e^{x} $$
(式6)は、f(x) を x で微分すると、exp(x) が得られるという式になっています。
(式5)を使ってしまっているため、(式3)を直接的に求めていることにはなりませんが、(式5)の左辺は x の関数にはなっていないため係数とみなすと、いずれにせよ(式6)の右辺は exp(x) に比例することになります。微分の定義を考慮しても、(式3)には矛盾が生じないことがわかります。

(式1)の導出

つぎに、上記の性質を使って(式1)を導出してみます。
式の形が似ている(式5)を使います。
(式5)
$$ \lim_{Δx \to +0} \frac{e^{Δx}-1}{Δx} = 1 $$

分子分母はともに +0 に漸近しており(ロピタルの定理を使って分子分母をΔxで微分すると)、右辺の1となることがわかります。また、全体の逆数を取っても、同様の計算が成り立つため、1となることがわかります。
そこで、全体の逆数を取るとつぎのようになります。
(式7)
$$ \lim_{Δx \to +0} {\frac{1}{e^{Δx}-1}Δx} = 1 $$

分数の部分を変数 n と書くことにします。
(式8)
$$ \frac{1}{e^{Δx}-1} = n $$
すると、以下の式が得られます。
$$ e^{Δx}=1+\frac{1}{n} $$
両辺について e を底とする log を取ると、Δx は、つぎのようになります。
(式9)
$$ Δx= \log_{e}{ \biggl(1+\frac{1}{n} \biggl)} $$
(式8)と(式9)を(式7)に代入すると、つぎの式が得られます。
$$ \lim_{n \to +\infty } n \log_{e}{\biggl(1+\frac{1}{n} \biggl)} = 1 $$
$$ \lim_{n \to +\infty } \log_{e}{\biggl(1+\frac{1}{n} \biggl)}^{n} = 1 $$
lim を log の中に入れ、右辺を変形します。
$$ \log_{e}{\lim_{n \to +\infty } \biggl(1+\frac{1}{n} \biggl)^{n}} = 1 = \log_{e}{e} $$
右辺と左辺に log があるので外してしまうと、つぎの式、(式2)が得られます。
$$ e = \lim_{n \to +\infty } \biggl(1+\frac{1}{n} \biggl)^{n} $$

★ ポイント
微分の定義(式5)から得られる(式7)で、分数の部分を n とおくと、残りの部分が log で書けます。すると、n を log の肩に入れることで log 自体を外してしまえる、という点がポイントといえます。

まとめ

Python プログラミングの一例として、ネイピア数を求めるスクリプトと関連する式についてまとめました。
スクリプトは数行で書けますが、計算式が長くなりました。導出をするだけでなく実際に数値計算をしてみると、よく理解ができます。周波数解析などを行う際の基本だと思います。

関連リンク
・ Python で自由曲線を描く 【HTML & SVG】
・ 円周率を求めてみる 【Python】
・ WordPress で数式を扱う 【LaTeX】

タイトルとURLをコピーしました