Pythonで指数関数のグラフを描こう!

底がネイピア数の指数関数のグラフ

プログラミングを数学の学習に活用してみましょう。今回はプログラミング言語 Pythonで指数関数のグラフを描いてみます。

指数関数は近年注目されているAI(機械学習・ディープラーニング)の仕組みを理解する上で欠かせません。機械学習に必須のシグモイド関数のグラフを応用例として取り上げます。

必要なライブラリ

Python で指数関数(exponential function)を描くには以下のライブラリが必要になるので、あらかじめインストールしておきましょう。

インストールされているかわからない場合は、とりあえずプログラムを実行してみましょう。インストールされていないと、エラーが出るのですぐにわかります。

指数関数のグラフを描く方法

底が1より大きい場合(a > 1)

y = 2 x のグラフを描いてみることにします。これまで学習してきた関数と異なるのは、関数の式の記述だけです。さっそくPythonのコードを書いてみましょう。

グラフを描くのが初めての方はPython で一次関数のグラフを描こう!を参照ください。グラフの描き方の基本をいちから解説しています。

import numpy as np  # numpy の読み込み
import matplotlib.pyplot as plt  # Matplotlib の読み込み

x = np.arange(-10, 10, 0.1)  # x座標を-10 から 10 まで 0.1 きざみで取得
y = 2 ** x  # 指数関数の式。Pythonでは ** 演算子でべき乗が計算できる

plt.ylim([-1, 20])  # y座標の範囲を -1 から 20 までにする
plt.xlabel('x')  # x軸のラベルを表示する
plt.ylabel('y', rotation=0)  # y軸のラベルを表示する
plt.gca().set_aspect('equal')  # x軸とy軸のスケールを揃える
plt.grid()  # グリッド(目盛軸)を表示
plt.plot(x, y)  # x, y をプロット
plt.show()  # グラフを表示

コードを実行すると以下の図が表示されます。

2を底とする指数関数のグラフ
図1. 2を底とする指数関数のグラフ

このように底aが a > 1 の指数関数は単調増加します。

底が1より小さい場合(0 < a < 1)

y = 0.5 x のグラフを描いてみることにします。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 10, 0.1) 
y = 0.5 ** x # 関数の式

plt.ylim([-1, 20])
plt.xlabel('x')
plt.ylabel('y', rotation=0)
plt.gca().set_aspect('equal')
plt.grid()
plt.plot(x, y)
plt.show()

先ほど書いた y = 2 x のソースコードと関数の式が違うだけですね。コードを実行すると以下の図が表示されます。

1/2を底とする指数関数のグラフ
図2. 1/2を底とする指数関数のグラフ

このように底aが 0 < a < 1 の指数関数は単調減少します。

ネイピア数 e を底とする指数関数

ネイピア数 e (高校数学では「自然対数の底」と呼ぶことが多い) を底とする指数関数のグラフ y = e x を描いてみましょう。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 10, 0.1)
y = np.exp(x)  # y = np.e ** x  でもよい

plt.ylim([-1, 20])
plt.xlabel('x')
plt.ylabel('y', rotation=0)
plt.gca().set_aspect('equal')
plt.grid()
plt.plot(x, y)
plt.show()

実行すると以下のグラフが表示されます。

底がネイピア数の指数関数のグラフ
図3. ネイピア数を底とする指数関数のグラフ

ネイピア数 e の指数計算は numpy.exp という特別な関数があります。ネイピア数の指数計算は numpy.exp関数を用いることがよくある(用いることの方が多い)ので、ここでは numpy.exp 関数を使っています。

なお、Numpy には numpy.e というネイピア数に相当する定数があり、数式をそのまま記述して y = np.e ** x としても、もちろん同じグラフが描かれます。

応用例 シグモイド関数

指数関数の応用例として、シグモイド関数(sigmoid function)のグラフを描いてみましょう。シグモイド関数はAI・機械学習・ディープラーニングの分野では欠かすことのできない、とても重要な関数です。

シグモイド関数(標準シグモイド関数)の式
f ( x ) = 1 1 + e x

手書きをするのは難しそうですね。コンピューターにお任せしましょう・・・。

import numpy as np
import matplotlib.pyplot as plt

# sigmoid function
x = np.arange(-4, 4, 0.1)
y = 1 / (1 + np.exp(-x))

plt.ylim([-0.5, 1.5])
plt.xlabel('x')
plt.ylabel('y', rotation=0)
plt.gca().set_aspect('equal')
plt.grid()
plt.plot(x, y)
plt.show()

実行すると以下のグラフが表示されます。

シグモイド関数(sigmoid function)のグラフ
図4. 標準シグモイド関数のグラフ

このように手書きでは難しい複雑な関数でも、Python ならわずかなソースコードで描けてしまいます。

以上、指数関数のグラフの描き方でした。次は対数関数を予定しています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です