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

■対数関数の微分

▼前提

対数logaxにおいて底「a = e 」とした対数logexを自然対数と呼ぶ。
自然対数は底を省略し、log xと表記する。

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

▼対数関数の微分の公式

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

▼対数関数の参考

対数関数の解き方についての参照先

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

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

ライブラリメソッド概要
sympylog(真数, 底)対数関数を計算するメソッド
底を省略するとネイピア数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)f(x) = log2x
(2)f(x) = x – logx
(3)f(x) = log2x
(4)f(x) = log(3x + 2)
(5)f(x) = log(2x – 1)
(6)f(x) = log5(x – 1)

▼サンプルコード

import sympy


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

# (1):f(x)=log[2]x
print(sympy.diff(sympy.log(x, 2)))

# (2):f(x)=x-logx
print(sympy.diff(x - sympy.log(x)))

# (3):f(x)=log2x
print(sympy.diff(sympy.log(2 * x)))

# (4):f(x)=log(3x+2)
print(sympy.diff(sympy.log(3 * x + 2)))

# (5):f(x)=log(2x-1)
print(sympy.diff(sympy.log(2 * x - 1)))

# (6):f(x)=log[5](x-1)
print(sympy.diff(sympy.log(x - 1, 5)))

▼実行結果

1/(x*log(2))
1 - 1/x
1/x
3/(3*x + 2)
2/(2*x - 1)
1/((x - 1)*log(5))

■例題2

例題1の(1)について対数関数f(x)と微分したf'(x)を図示する。
(1)f(x) = log2x

▼サンプルコード

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


# f(x)=log[2]x
def f(x):
    return sympy.log(x, 2)


# 関数f'(x)=1/xlog2
def f_d(x):
    return 1/(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()

▼実行結果

コメント