-Python- 微分

微分は,ある瞬間の変化の量を表したもので,以下のように定義されます.

f:id:HidehikoMURAO:20190102234727p:plain

常識は,関数の微分を表した式です.左辺の df(x) / dx f(x)xについての微分xに対するf(x)の変化の度合い)を表す記号です.上式で表される微分は,xの小さな変化によって,関数f(x)の値がどれだけ変化するかということを表します.その際,小さな変化であるhを限りなく0に近づけます.
丸め誤差(rounding error)が生じないようにhとして1e-4(0.0001)として,中心差分を用いた実装例は以下のようになります.

 
def numerical_diff(f, x): 
    h = 1e-4    # 0.0001
    return (f(x + h) - f(x - h)) / (2 * h)


上記の数値微分を用いて,以下の関数の微分を行ってみます.

f:id:HidehikoMURAO:20190102234800p:plain

 
# Import Module
import numpy as np
import matplotlib.pylab as plt
 
# Definition of Function
def numerical_diff(f, x): 
    h = 1e-4    # 0.0001
    return (f(x + h) - f(x - h)) / (2 * h)
 
def function_1(x): 
    return 0.01 * x**2 + 0.1 * x
 
def tangent_line(f, x): 
    d = numerical_diff(f, x)
    print(d)
    y = f(x) - d*x
    return lambda t: d*t + y
 
# Data setting
x = np.arange(0.0, 20.0, 0.1# x array from 0 to 20 in increments of 0.1
y = function_1(x)
 
# Solving problem
tf = tangent_line(function_1, 5)
y2 = tf(x)
 
# Drawing Graph
plt.xlabel("x")
plt.ylabel("f(x)")
 
plt.plot(x, y)
plt.plot(x, y2)
plt.show()
 

実行結果は以下のようになります.

0.1999999999990898

f:id:HidehikoMURAO:20190102234840p:plain