更新:2024/09/24
数値微分の基本!前進差分法、後退差分法、および中心差分法について


はるか
今日は数値微分の基本について話すよ。具体的には、前進差分法、後退差分法、そして中心差分法。

ふゅか
解析的に微分できないときに有効な方法だよね!機械学習の損失関数とか!
目次
1. 数値微分の基本的な方法
数値微分は、関数の導関数(微分)を数値的に求める手法です。これは、関数が解析的に微分できない場合や、関数の式が知られていない場合に特に有用です。数値微分の基本的な考え方は、関数 \( f(x) \) の微分を有限の差分を用いて近似することです。ここでは、最も一般的な方法である前進差分法、後退差分法、および中心差分法を紹介します。
1.1. 前進差分法(Forward Difference Method)
前進差分法は、次のように定義されます。
\[ f'(x) \approx \frac{f(x + h) – f(x)}{h} \]
1.2. 後退差分法(Backward Difference Method)
後退差分法は、次のように定義されます。
\[ f'(x) \approx \frac{f(x) – f(x – h)}{h} \]
1.3. 中心差分法(Central Difference Method)
中心差分法は、次のように定義されます。
\[ f'(x) \approx \frac{f(x + h) – f(x – h)}{2h} \]
2. 実践例

はるか
次に、Pythonでの実装例を見せるよ。

ふゅか
数値微分の方法を使って、具体的にどんな風に計算するか見てみるね♪
以下に、前進差分法、後退差分法、および中心差分法を用いた数値微分の実装例を示します。
import numpy as np
def forward_difference(f, x, h=1e-5):
return (f(x + h) - f(x)) / h
def backward_difference(f, x, h=1e-5):
return (f(x) - f(x - h)) / h
def central_difference(f, x, h=1e-5):
return (f(x + h) - f(x - h)) / (2 * h)
# 関数の定義
def func(x):
return np.sin(x)
# 微分の計算
x = np.pi / 4
forward_diff = forward_difference(func, x)
backward_diff = backward_difference(func, x)
central_diff = central_difference(func, x)
print(f"Forward difference of sin(x) at x = {x} is approximately {forward_diff}")
print(f"Backward difference of sin(x) at x = {x} is approximately {backward_diff}")
print(f"Central difference of sin(x) at x = {x} is approximately {central_diff}")
これにより、指定された点 \( x = \pi/4 \) における \( \sin(x) \) の数値微分を3つの異なる方法で計算できます。
それぞれの関数に着目すると、
-
2.1. 前進差分法の関数
def forward_difference(f, x, h=1e-5): return (f(x + h) - f(x)) / h
-
2.2. 後退差分法の関数
def backward_difference(f, x, h=1e-5): return (f(x) - f(x - h)) / h
-
2.3. 中心差分法の関数
def central_difference(f, x, h=1e-5): return (f(x + h) - f(x - h)) / (2 * h)
2.4. 結果
これらの関数を使って計算した結果は以下のようになります。
print(f"Forward difference of sin(x) at x = {x} is approximately {forward_diff}")
print(f"Backward difference of sin(x) at x = {x} is approximately {backward_diff}")
print(f"Central difference of sin(x) at x = {x} is approximately {central_diff}")

はるか
これで、指定された点 \( x = \pi/4 \) における \( \sin(x) \) の数値微分を3つの異なる方法で計算できるよ。

ふゅか
うん、結果を見てみると、それぞれの方法で微分の値がどう違うかがわかるね!前進差分法、後退差分法、中心差分法の結果を比べてみてね☆
PR