微分は、変化の速度を測る重要な数学的概念です。物理やデータ分析、機械学習など、幅広い分野で利用されるため、理解しておきたい重要なテーマです。この記事では、Pythonを使って微分の基本概念を数値的に理解する方法を紹介します。
微分の定義
まず、微分の定義をおさらいしましょう。関数 $f(x)$ の微分 $f'(x)$ は次の式で定義されます。
$$f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h}$$
この式は、関数 $f(x)$ が $x$ の近くでどのように変化するかを示しています。今回は、この定義をPythonで数値的に実装し、視覚的に理解できるようにしていきます。
Pythonで数値微分を実装してみる
Pythonでは、数値微分を簡単に実装することができます。関数 $f(x) = x^2$ を例に、数値微分を計算してみましょう。
実装コード
import numpy as np
import matplotlib.pyplot as plt
# 関数f(x)の定義 (例: f(x) = x^2)
def f(x):
return x**2
# 数値微分を計算する関数
def numerical_derivative(f, x, h=1e-5):
return (f(x + h) - f(x)) / h
# xの値
x_values = np.linspace(-10, 10, 400)
# f(x)とf'(x)の値を計算
f_values = f(x_values)
f_prime_values = [numerical_derivative(f, x) for x in x_values]
# 結果をプロット
plt.figure(figsize=(10, 6))
# 元の関数f(x)
plt.plot(x_values, f_values, label="f(x) = x^2")
# f'(x) (微分)
plt.plot(x_values, f_prime_values, label="f'(x) = 2x", linestyle='--')
plt.title("Function and its Derivative")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.grid(True)
plt.show()
コードの説明
-
f(x)
は、関数 $f(x) = x^2$ を定義しています。二次関数を使って、シンプルに微分の変化率を確認します。 -
numerical_derivative(f, x)
は、関数の数値微分を計算するための関数です。微小な値h
を使って、微分の定義を近似的に計算します。
、つまり 0.00001 という意味です。このような小さい h を使うことで、微分の近似をより正確に計算することができます。
ただし、h を小さくしすぎると、計算誤差(丸め誤差)が増える可能性もあります。h = 1e-5 は、多くの数値微分の場面で適切なバランスを提供する値としてよく使われます。
3. x_values
で、-10から10の範囲のx値を生成しています。
4. f_values
と f_prime_values
では、関数 $f(x)$ とその微分 $f'(x)$ の値をそれぞれ計算しています。
5. 最後に、matplotlib
を使って、元の関数 $f(x)$ と微分 $f'(x)$ をグラフにプロットしています。
1e-5 とは?
1e-5 は、科学記数法で書かれた数値表現です。これは以下を意味します:
$$1 \times 10^{-5}$$
つまり、0.00001 という非常に小さな数値を表しています。
数値微分における 1e-5 の役割
数値微分を行う際、このような小さな値を h として使用することで、微分の近似をより正確に計算することができます。
pythonCopydef numerical_derivative(f, x, h=1e-5):
return (f(x + h) - f(x)) / h)
注意点
ただし、h を小さくしすぎると、計算誤差(丸め誤差)が増える可能性もあります。h = 1e-5 は、多くの数値微分の場面で適切なバランスを提供する値としてよく使われます。
結果
上記のコードを実行すると、次のようなグラフが表示されます。
- 青い線が元の関数 $f(x) = x^2$
- オレンジ色の破線がその微分 $f'(x) = 2x$
これによって、関数の傾き(変化率)がどのように変わっていくのかを視覚的に確認することができます。
まとめ
この記事では、Pythonを使って数値微分を実装し、微分の基本概念を視覚的に理解する方法を紹介しました。微分は、機械学習やデータ分析の多くのアルゴリズムで重要な役割を果たすため、今後さらに理解を深めていきたいところです。
興味を持った方は、他の関数でも同様に数値微分を試してみてください。