■指数関数の微分
▼前提
指数関数(y = ax)と対数関数(y = logax)は逆関数の関係である。
前提として、対数logaxにおいて底「a = e 」とした対数logexを自然対数と呼ぶ。
自然対数は底を省略し、log xと表記する。
※ e:ネイピア数(2.71828・・・)
▼指数関数の微分の公式
指数関数について、微分の公式を示す。
① a > 0、a ≠ 1 のとき
②
■今回使用するライブラリ
今回使用するライブラリを下表に示す。
ライブラリ | メソッド | 概要 |
---|---|---|
sympy | log(真数, 底) | 対数関数を計算するメソッド 底を省略するとネイピア数eを指定することになる。 |
sympy | exp(計算式) | ネイピア数に対する指数関数を計算する。 例:sympy.exp(1) = e1 = e |
sympy | Symbol(‘文字列’) | 文字列をセットする。 |
sympy | diff(計算式) | 微分の計算をする。 |
numpy | arange(開始, 終了, 間隔) | 「開始」から「終了」未満までの数を「間隔」数で配列に格納する。 |
matplotlib.pyplot | plot(x値, y値, color=’グラフの色’, label=”グラフのラベル名”) | グラフを図示する。 |
matplotlib.pyplot | axhline(yの値, color=’グラフの色’) | 水平方向の値を設定する。 x軸(y=0)を作成 |
matplotlib.pyplot | axvline(xの値, color=’グラフの色’) | 垂直方向の値を設定する。 y軸(x=0)を作成 |
matplotlib.pyplot | legend(位置, フォントサイズ) | ラベルを表示する。 |
matplotlib.pyplot | show() | グラフを表示する。 |
■例題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()
コメント