差分法 前進・後退・中心[Python]
03/12/2020 15/10/2023
こんにちは、さくらえびです。
本稿では、微分を実行するプログラムをご紹介します。
先行で作ったC言語、Fortranに加えて、Pythonで「関数を引数とする関数」を作成するお話も含め、ご紹介します。
f(x)という関数を引数に持つ微分関数を下記のように定義します。
def f(x): ans = x*x; return ans;
実際にプログラムとして、使用する際は、下記のように使います。
print(f(x));
Pythonでの微分プログラムのソースは以下のとおり
# 中心差分プログラム def DIFC(f,x,dx): ans = (f(x+0.5*dx)-f(x-0.5*dx))/dx; return ans; # 前進差分プログラム def DIFF(f,x,dx): ans = (f(x+dx)-f(x))/dx; return ans; #後退差分プログラム def DIFB(f,x,dx): ans = (f(x)-f(x-dx))/dx; return ans;
実際に実行してみます。実行するソースコードは以下のとおりです。
# 2次関数 def f(x): ans = x*x; return ans; # 中心差分プログラム def DIFC(f,x,dx): ans = (f(x+0.5*dx)-f(x-0.5*dx))/dx; return ans; # 前進差分プログラム def DIFF(f,x,dx): ans = (f(x+dx)-f(x))/dx; return ans; #後退差分プログラム def DIFB(f,x,dx): ans = (f(x)-f(x-dx))/dx; return ans; x = 1 dx = 0.000001 print("==Result=="); print("input=", x); print("result of f/dx(centre)=" ,DIFC(f,x,dx)); print("result of f/dx(forward)=" ,DIFF(f,x,dx)); print("result of f/dx(backward)=" ,DIFB(f,x,dx)); print("==Error Value=="); v1 = 2-DIFC(f,x,dx); v2 = 2-DIFF(f,x,dx); v3 = 2-DIFB(f,x,dx); print("result of centre different=" ,v1); print("result of forward different=" ,v2); print("result of backward different=" ,v3);

中心差分法の方が計算精度がよいことがわかります。
学校で履修するプログラムは前進差分法ですが、多様な微分プログラムがあることを知り、ご活用ください。
by さくらえび