Pythonでライブラリを使わずにe^xを効率的に計算する方法
数値 x が与えられたとき、math.exp() などのライブラリ関数を使用せずに、ex を効率的に計算する方法を解説します。
e^x の計算原理:テイラー級数展開
ex はテイラー級数(マクローリン級数)を用いて、次のように無限級数として表すことができます。
$$e^{x} = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + ...$$
例えば、入力が x = 5 の場合、出力は 148.4131 となります。これは e5 = 1 + 5 + (5²/2!) + (5³/3!) + ... = 148.4131... と計算されるためです。
解法のアプローチ
この問題を解くには、以下の手順に従います。
- fact := 1(階乗の値を保持する変数)
- res := 1(結果を保持する変数)
- n := 20(精度を確保するために十分大きな反復回数)
- nume := x(分子の値を保持する変数)
- i を 1 から n までループ処理:
- res := res + nume / fact
- nume := nume × x
- fact := fact × (i+1)
- res を返す
なぜ効率的なのか?
このアルゴリズムのポイントは、各項をゼロから計算しないことです。k 番目の項は xk/k! ですが、これは直前の項に x を掛けて k で割るだけで求められます。つまり、べき乗も階乗も毎回最初から計算し直す必要がなく、時間計算量 O(n) で近似値を得られます。
実装例
理解を深めるために、以下のPythonコードを見てみましょう。
def solve(x):
fact = 1
res = 1
n = 20
nume = x
for i in range(1, n):
res += nume / fact
nume = nume * x
fact = fact * (i + 1)
return res
x = 5
print(solve(x))入力
5
出力
148.4131591025766
実際の e5 の値は 148.41315910257660... であり、わずか20回の反復で非常に高い精度の結果が得られていることがわかります。反復回数 n を増やせば、さらに精度を向上させることも可能です。
-
Pythonでポリゴンの面積を求める方法:靴ひも公式を使った実装
はじめに2次元平面上に、単純な多角形(ポリゴン)の頂点を時計回りまたは反時計回りの順に並べた座標リストが与えられたとします。このとき、その多角形の面積を計算するのが本記事の目的です。例えば、入力が points = [(0, 0), (0, 5), (3, 5), (3, 0)] のような場合、これは幅3・高さ5の長方形を表しているため、出力は 15.0 となります。解法の考え方:靴ひも公式(Shoelace Formula)この問題は、有名な靴ひも公式(測量士の公式)を使うことで効率的に解けます。隣り合う2頂点ごとに外積 x1*y2 - y1*x2 を計算し、それらをすべて足し合わせて絶対値
-
Pythonで多角形の外周(周囲長)を求めるプログラム
問題の概要2次元平面上にある単純な多角形(自己交差しないポリゴン)の頂点が、順序付きの点のリストとして与えられているとします。このとき、その多角形の外周(周囲長)を求めることが目的です。例として、入力が points = [(0, 0), (0,5), (3, 5), (3,0)] の場合を考えてみましょう。このときの出力は 16 になります。これは、図からも分かるように、長さ3の辺が2本、長さ5の辺が2本存在するためです。したがって、2×5 + 2×3 = 16 となります。アルゴリズムの考え方この問題は、「隣接する2つの頂点間の距離をすべて計算して合計する」というシンプルなアプローチで解く