【Python】ネイピア数eの関数のグラフをいろいろ書く

Posted: , Category: 可視化 , 数学

$e$の関数系は、物理や数学、統計や機械学習で多数登場します。

まだ高校生であっても、高校数学でも$e$の関数系を書かせるような問題は多数あると思います。

今回は思い浮かんだままに、ネイピア数$e$のいろんな関数系を書いてみたいと思います。

matplotlibで描写

グラフはPythonとmatplotlibを用いて描写しています。全てのグラフにコードを記載しても良いのですが、情報量が多くなってしまうので、ライブラリのインポートやグラフの設定をするようなコードは下記に一度掲載し、それ以降は省略するようにします。自分の環境でもグラフを書いてみる人は、エラーが出た場合は適宜コードを修正して対応してください。

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(5,5), dpi=100)

ax.set_aspect('equal')
plt.axhline(0, linewidth=1.5, color="black")
plt.axvline(0, linewidth=1.5, color="black")

$y = e^x$ のグラフ

y = e^x

eを底とした指数関数です。xが大きくなるにつれて、無限大に発散しています。

$y = \frac{1}{e^x}$ のグラフ

y = \frac{1}{e^x}

$y = e^x$ のグラフに逆数をとったグラフです。よくみると、$y = e^x$ をy軸に対して反転させたような形式になっています。

y = \frac{1}{e^x} = e^{-x} 

と式変形できるので、y軸対象となります。

$y = \frac{1}{1 + e^{-x}}$ のグラフ

\begin{equation}
y =  \frac{1}{1 + e^{-x}}
\end{equation}

x軸は$- \inf \sim \inf$まで取ることができ、yは0~1の値を取る関数です。

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(5,3), dpi=100)


plt.axhline(0, linewidth=1.5, color="black")
plt.axvline(0, linewidth=1.5, color="black")
plt.axhline(1, linewidth=1.5, color="black", ls=":")

ax.set_xlim(-10, 10)
ax.set_ylim(-0.2, 1.2)
ax.set_xlabel("x")
ax.set_ylabel("y")

x = np.linspace(-10, 10, 1000)
y = 1 / (1 + np.e ** (-1 * x))

ax.plot(x, y, color="red", label=r"$y = \frac{1}{1 + e^{-x}}$")
ax.legend()
ax.grid()

$y = \frac{1}{1 + ae^{-x}}$ (シグモイド関数)のグラフ

\begin{equation}
y =  \frac{1}{1 + ae^{-x}}
\end{equation}

(2)式は、シグモイド(Sigmoid)関数と呼ばれており、0~1の値を取る関数で、正の実数$a$によって、x軸方向を平行移動します。シグモイド関数は、機械学習や現在流行りのディープラーニングで非常によく用いられている関数です。

$a$の値を10倍するごとに、グラフがx方向に+1だけ平行移動するという面白い(興味深い)性質があります。

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(5,3), dpi=100)


plt.axhline(0, linewidth=1.5, color="black")
plt.axvline(0, linewidth=1.5, color="black")
plt.axhline(1, linewidth=1.5, color="black", ls=":")

ax.set_xlim(-10, 10)
ax.set_ylim(-0.2, 1.2)
ax.set_xlabel("x")
ax.set_ylabel("y")

params = [0.01, 0.1, 1, 10, 100, 1000,]
x = np.linspace(-10, 10, 1000)

for idx, a in enumerate(params):
    y = 1 / (1 + a * np.e ** (-1 * x))
    ax.plot(x, y,  label=f"a = {a}")
    
ax.legend()
ax.grid()

$y = e^{- x^2}$ (正規分布)のグラフ

\begin{equation}
y = e^{- x^2}
\end{equation}

(3)式は、確率統計の分野で頻繁に登場する正規分布の数式です。正確な正規分布の式は、他に定数の項がありますが、基本的には(3)式と同じ形をしています。

y軸対象で、$x=0$近傍は値が高く、山のようになっていることがわかります。

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(5,3), dpi=100)

plt.axhline(0, linewidth=1.5, color="black")
plt.axvline(0, linewidth=1.5, color="black")

ax.set_xlim(-10, 10)
ax.set_ylim(-0.2, 1.2)
ax.set_xlabel("x")
ax.set_ylabel("y")

x = np.linspace(-10, 10, 1000)
y = np.e ** (- 1 * x ** 2)

ax.plot(x, y, color="red", label=r"$y = e^{- x^2}$")
ax.legend()
ax.grid()

【広告】
統計学的にあなたの悩みを解決します。
仕事やプライベートでお悩みの方は、ベテラン占い師 蓮若菜にご相談ください。

機械学習と情報技術