微分プログラム[python]

数値微分を行うプログラム(python)を紹介します。
汎用的に使用するため、関数と数値微分を行う変数値、および微小区間を引数とします。

処理するのはお馴染みの以下の数式です。

\[
  \frac{df(x)}{dx} = \frac{f(x+dx) – f(x)}{x+dx – x} = \frac{f(x+dx) – f(x)}{dx}
\]

これをソースコードに置き換えると、以下のとおりです。

def derivative(f,x,dx): 
  return (f(x+dx)-f(x))/dx
import matplotlib.pyplot as plt
import math as mt
import numpy as np
import pandas as pd


def derivative(f,x,dx):
  return (f(x+dx)-f(x))/dx

def fun(x):
  return x**2 + x + 1

dx = 1E-5
print("x=2における微分結果")
print(derivative(fun,2,dx))

 \(x = 2\)における結果は以下のとおりです。

計算結果

関数を全区間で微分したものを導関数といいますが、プロットすると以下図のようになります。
今回は、2次関数を微分して、1次関数で表現します。

接線グラフ

上記導関数をプロットするのは、下記のコードで行いました。

import matplotlib.pyplot as plt
import math as mt
import numpy as np
import pandas as pd


def derivative(f,x,dx):
  return (f(x+dx)-f(x))/dx

def fun(x):
  return x**2 + x + 1

xmin = -5
xmax = 5
Nmesh = 100
dx = 1E-5
x = np.linspace(xmin,xmax,Nmesh)
t = fun(x)
dt = derivative(fun,x,dx)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlabel('length[mm]')
ax.set_ylabel('hight[mm]')
plt.plot(x,t,color="r")
plt.plot(x,dt,color="b")
plt.show()

従来だとdatに取り出してgnuplotなどで書かせていたので、これならば一気に出力できて便利ですね。

by さくらえび

関連記事

微分プログラム [C言語] — 思い立ったら作ってみる (y-fam.com)
微分プログラム [fortran] — 思い立ったら作ってみる (y-fam.com)

  • さくらえび
  • さくらえびと申します
    企業勤め系研究者です。理論物理が専門分野。
    エンジニア・営業・コンサルを経験し、今はデータサイエンティストとしてお仕事をさせていただいております。