指数関数の計算プログラム(補足)

このページでは、テイラー展開 $$ e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!} $$ を使って指数関数の値を計算するプログラムを、いくつかのステップを踏みながら構成してみたい。 もちろん、$n$を無限大まで加えることはコンピュータには無理なので、以下では$n=9$までで打ち切ることにする。

ステップ1:階乗の計算プログラム (ex7-1.py)

いきなり指数関数を計算するのは複雑なので、まずは、0から9までの数の階乗を計算して表示するプログラムを作ってみる。0!は1であることを考慮すると、以下のように書けるだろう。

# coding: utf-8 
fact=1
for n in range(0,10,1):
    if n>0:
        fact=fact*n
    print(n,"の階乗=",fact)

ステップ2:xのべき乗の計算プログラム(ex7-2.py)

つぎは、xの値を入れると、xのn乗($x^n$)をn=0から順に$n=9$まで順に計算するプログラムの例。xの0乗は1であることに注意。

# coding: utf-8

x=float(input("xの値:"))

p=1
for n in range(0,10,1):
    if n>0:
        p=p*x
    print(x,"の",n,"乗=",p)

ステップ3:テイラー展開の各項を計算するプログラム(ex7-3.py)

すると、テイラー展開の各項は、階乗とべき乗の組み合わせ($\frac{1}{n!} x^n$)なのだから、上の2つの計算を組み合わせて:

# coding: utf-8

x=float(input("xの値:"))

fact=1
p=1
for n in range(0,10,1):
    if n>0:
        fact=fact*n
        p=p*x
    print("第",n,"項=",1/fact*p)

ステップ4:級数和を使って指数関数を求めるプログラム(ex7.py)

例題7のプログラムは、上記のプログラムを組み合わせた格好をしていることがわかるだろうか。

# coding: utf-8

x=float(input("xの値:"))

fact=1
p=1
sum=0
for n in range(0,10,1):
    if n>0:
        fact=fact*n
        p=p*x
    sum=sum+1/fact*p

print("EXP(",x,")=",sum)

補足

ここではループ処理(特に変数の動き)の練習のため、敢えて階乗やべき乗の部分を反復計算で求めたが、 Pythonには標準的な機能として、あらかじめ様々な数学関数が備わっているので、

# coding: utf-8
import math

x=float(input("xの値:"))

sum=0
for n in range(0,10,1):
    sum = sum + 1/math.factorial(n) * x**n

print("EXP(",x,")=",sum)

と、簡単に書くことが可能。