微分せずに微分する

数学を勉強していたら、微分は記号処理のように感じられて仕方ない。
違うんだ、ということを意識するためにコードを書いてみた。
非常に素朴な実装だ。
2階微分までは行けそうだ。つまりニュートン法にも使えるということか。

Source

import matplotlib.pyplot as plt
import numpy as np

def f(x):
    return x**3

def gradient(f, h=1./10**2):
    def fx(x):
        return (f(x + h) - f(x)) / h
    return fx

if __name__ == '__main__':
    x = np.linspace(-1, 1, 100)

    fig = plt.figure(1)
    #1st
    plt.subplot(2, 2, 1)
    plt.plot(x, f(x), "b-")

    #2nd
    fx = gradient(f)
    plt.subplot(2, 2, 2)
    plt.plot(x, fx(x), "b-")

    #3rd
    fxx = gradient(fx)
    plt.subplot(2, 2, 3)
    plt.plot(x, fxx(x), "b-")

    #4th
    fxxx = gradient(fxx)
    plt.subplot(2, 2, 4)
    plt.plot(x, fxxx(x), "b-")
    fig.savefig("floattest.png")


Result

file:///Users/hiroyukitanaka/Dropbox/py/thinkstatdata/floattest.png

微分せずに微分する」への1件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中