【Python】指数関数を微分しグラフに図示する

■指数関数の微分

▼前提

指数関数(y = ax)と対数関数(y = logax)は逆関数の関係である。
前提として、対数logaxにおいて底「a = e 」とした対数logexを自然対数と呼ぶ。
自然対数は底を省略し、log xと表記する。

※ e:ネイピア数(2.71828・・・)

▼指数関数の微分の公式

指数関数について、微分の公式を示す。

① a > 0、a ≠ 1 のとき


■今回使用するライブラリ

今回使用するライブラリを下表に示す。

ライブラリメソッド概要
sympylog(真数, 底)対数関数を計算するメソッド
底を省略するとネイピア数eを指定することになる。
sympyexp(計算式)ネイピア数に対する指数関数を計算する。
例:sympy.exp(1) = e1 = e
sympySymbol(‘文字列’)文字列をセットする。
sympydiff(計算式)微分の計算をする。
numpyarange(開始, 終了, 間隔)「開始」から「終了」未満までの数を「間隔」数で配列に格納する。
matplotlib.pyplotplot(x値, y値, color=’グラフの色’, label=”グラフのラベル名”)グラフを図示する。
matplotlib.pyplotaxhline(yの値, color=’グラフの色’)水平方向の値を設定する。
x軸(y=0)を作成
matplotlib.pyplotaxvline(xの値, color=’グラフの色’)垂直方向の値を設定する。
y軸(x=0)を作成
matplotlib.pyplotlegend(位置, フォントサイズ)ラベルを表示する。
matplotlib.pyplotshow()グラフを表示する。

■例題1

以下の指数関数を微分する。

(1)


(2)


(3)


(4)

▼サンプルコード

import sympy


# 文字列をセット
x = sympy.Symbol('x')

# (1)f(x) = 2 ** (3x)
print('問題1:', sympy.diff(2 ** (3 * x)))

# (2)f(x) = e ** (2x)
print('問題2:', sympy.diff(sympy.exp(2 * x)))

# (3)f(x) = e ** (-x ** 2)
print('問題3:', sympy.diff(sympy.exp(-x ** 2)))

# (4)f(x) = xe ** (x)
print('問題4:', sympy.diff(x * sympy.exp(x)))

▼実行結果

問題1: 3*2**(3*x)*log(2)
問題2: 2*exp(2*x)
問題3: -2*x*exp(-x**2)
問題4: x*exp(x) + exp(x)

■例題2

例題1の(1)について指数関数f(x)と微分したf'(x)を図示する。
 f(x) = 23x
 f'(x) = 3・23x・log2

▼サンプルコード

import sympy
import numpy as np
from matplotlib import pyplot as plt


# f(x) = 2 ** (3x)
def f(x):
    return 2 ** (3 * x)


# 関数f'(x)=3*2**(3*x)*log(2)
def f_d(x):
    return 3 * 2 ** (3 * x) * sympy.log(2)


def MakeGraph():
    # 便宜上、0.1から5までの値を0.1間隔で設定
    x_min = 0.1
    x_max = 5
    x_interval = 0.1
    x = np.arange(x_min, x_max, x_interval)

    # 関数f(x)を格納する配列
    y = []
    # 導関数f'(x)を格納する配列
    y_d = []

    # それぞれ配列に格納していく(便宜上、nは0.1間隔でセット)
    for i in range(len(x)):
        y.append(f(x[i]))
        y_d.append(f_d(x[i]))

    # 関数f(x)のグラフを作成
    plt.plot(x, y, color='blue', label="f(x)")

    # 導関数f'(x)のグラフを作成
    plt.plot(x, y_d, color='orange', label="f`(x)")

    # グラフにx軸,y軸(0)を図示
    # 補助線(0)を作成 [axhline:水平 axvline:垂直]
    plt.axhline(y=0, color="gray")
    plt.axvline(x=0, color="gray")

    # ラベルの表示
    plt.legend(bbox_to_anchor=(1, 1), loc='upper left',
               borderaxespad=0, fontsize=8)

    # グラフを表示
    plt.show()


if __name__ == '__main__':

    MakeGraph()

▼実行結果

コメント