旧「Python で初等関数のグラフを描く」改題。
モジュールの import とオプション設定
import matplotlib.pyplot as plt
import numpy as np
# 以下はグラフを SVG で Notebook にインライン表示させる設定
%config InlineBackend.figure_formats = ['svg']
# font の設定
plt.rcParams['mathtext.fontset'] = 'cm'
plt.rcParams['font.family'] = 'serif'
べき関数
まず,$y = x^{-1}$ のグラフ。
x = np.linspace(-5, 5, 1000)
y = x**(-1)
plt.plot(x, y)
# 表示範囲
plt.xlim(-5, 5)
plt.ylim(-10, 10);
$y=x^{-1}$ のグラフの $x=0$ 付近,$y \rightarrow -\infty$ と $y \rightarrow +\infty$ を縦の直線でつないでしまう。
不連続点をつなげない対策
以下では,y
の絶対値がある程度以上(以下の例では abs(y) > 50
)であれば,その点はグラフに描かないように「欠損値」np.nan
に置き換えている。
x = np.linspace(-5, 5, 1000)
y = x**(-1)
y[abs(y) > 50] = np.nan
plt.plot(x, y)
# 表示範囲
plt.xlim(-5, 5)
plt.ylim(-10, 10);
$y = x^{-2}, \ x^{-1}, \ x^2, \ x^3$ のグラフ例。$y = x^{-1}$ の不連続点をつなげないように。
plt.figure(figsize = [6.4, 6.4])
x = np.linspace(-5, 5, 1000)
plt.plot(x, x**(-2), linewidth = 2, label="$x^{-2}$")
# 不連続点をつなげないように
y = x**(-1)
y[abs(y) > 50] = np.nan
plt.plot(x, y, linewidth = 2, label="$x^{-1}$")
plt.plot(x, x**2, linewidth = 2, label="$x^2$")
plt.plot(x, x**3, linewidth = 2, label="$x^3$")
# 表示範囲
plt.xlim(-5, 5)
plt.ylim(-10, 10)
# x の目盛
plt.xticks(np.linspace(-5, 5, 11))
plt.xlabel('$x$', fontsize=12)
# グリッド(格子線)は dotted に
plt.grid(ls = ':')
# x軸 y軸は dashed に
plt.axhline(0, c='k', ls = '--', lw=0.5)
plt.axvline(0, c='k', ls = '--', lw=0.5)
plt.legend(fontsize=12);
$\displaystyle y = \sqrt{x}, \ \frac{1}{\sqrt{x}}$ のグラフ例。
plt.figure(figsize = [6.4, 4.8])
x = np.linspace(0, 5, 500)
plt.plot(x, np.sqrt(x), linewidth = 2, label="$\sqrt{x}$")
# x = 0 は除く。
x = np.linspace(0.0001, 5, 500)
plt.plot(x, 1/np.sqrt(x), linewidth = 2, label="$1/\sqrt{x}$")
# 表示範囲
plt.xlim(0, 5)
plt.ylim(0, 5)
# x の目盛
plt.xticks(np.linspace(0, 5, 6))
plt.xlabel('$x$', fontsize = 12)
# y の目盛
plt.yticks(np.linspace(0, 5, 6))
# グリッド(格子線)は dotted に
plt.grid(ls = ':')
plt.legend(fontsize = 12);
指数関数
$y = e^{-x}, \ e^x$ のグラフ例。
plt.figure(figsize = [6.4, 4.8])
x = np.linspace(-5, 5, 200)
plt.plot(x, np.exp(-x), linewidth = 2, label="$e^{-x}$")
plt.plot(x, np.exp(x), linewidth = 2, label="$e^x$")
# 表示範囲
plt.xlim(-5, 5)
plt.ylim(-1, 30)
# x の目盛
plt.xticks(np.linspace(-5, 5, 11))
plt.xlabel('$x$', fontsize = 12)
# グリッド(格子線)は dotted で
plt.grid(ls = ':')
# x軸 y軸 は dashed で
plt.axhline(0, c='k', ls = '--', lw=0.5)
plt.axvline(0, c='k', ls = '--', lw=0.5)
plt.legend(fontsize = 12);
三角関数
まず,$ y = \tan x $ のグラフ例。
x = np.linspace(-2*np.pi, 2*np.pi, 1000)
y = np.tan(x)
plt.plot(x, y)
# 横軸縦軸の表示範囲
plt.xlim(-2*np.pi, 2*np.pi)
plt.ylim(-10, 10);
$y=\tan x$ のグラフも,$y \rightarrow -\infty$ と $y \rightarrow +\infty$ を縦の直線でつないでしまう。
不連続点をつなげない対策
以下では,y
の絶対値がある程度以上(以下の例では abs(y) > 30
)であれば,その点はグラフに描かないように「欠損値」np.nan
に置き換えている。
x = np.linspace(-2*np.pi, 2*np.pi, 1000)
y = np.tan(x)
y[abs(y) > 30] = np.nan
plt.plot(x, y)
# 横軸縦軸の表示範囲
plt.xlim(-2*np.pi, 2*np.pi)
plt.ylim(-10, 10);
$ y = \sin x, \ \cos x, \ \tan x $ のグラフ例。$y = \tan x$ の不連続点をつなげないように。
plt.figure(figsize = [6.4, 6.4])
x = np.linspace(-2*np.pi, 2*np.pi+1, 200)
plt.plot(x, np.sin(x), linewidth = 2, label="$\sin x$")
plt.plot(x, np.cos(x), linewidth = 2, label="$\cos x$")
# 不連続点をつなげないように
y = np.tan(x)
y[abs(y) > 30] = np.nan
plt.plot(x, y, linewidth = 2, label="$\\tan x$")
# 表示範囲
plt.xlim(-2*np.pi, 2*np.pi+1)
plt.ylim(-5, 5)
# x の目盛
plt.xticks(
np.linspace(-2*np.pi, 2*np.pi, 9),
["$-2\pi$","$-3\pi/2$","$-\pi$","$-\pi/2$",
"$0$","$\pi/2$","$\pi$","$3\pi/2$","$2\pi$"])
plt.xlabel('$x$', fontsize = 12)
# y の目盛
plt.yticks(np.linspace(-5, 5, 11))
# グリッド(格子線)は dotted で
plt.grid(ls = ':')
# x軸 y軸 は dashed で
plt.axhline(0, c='k', ls = '--', lw=0.5)
plt.axvline(0, c='k', ls = '--', lw=0.5)
plt.legend(fontsize = 11);
逆三角関数
$y = \sin^{-1} x = \arcsin x =$ np.arcsin(x)
の定義域は $-1 \leq x \leq 1$
$y = \cos^{-1} x = \arccos x =$ np.arccos(x)
の定義域は $-1 \leq x \leq 1$
$y = \tan^{-1} x = \arctan x =$ np.arctan(x)
の定義域は $-\infty < x < \infty$
x = np.linspace(-1, 1, 200)
plt.plot(x, np.arcsin(x), linewidth = 2, label="$\\arcsin x$")
plt.plot(x, np.arccos(x), linewidth = 2, label="$\\arccos x$")
# 表示範囲
plt.xlim(-1, 1)
plt.ylim(-np.pi/2, np.pi)
# x の目盛
plt.xticks(np.linspace(-1, 1, 11))
plt.xlabel('$x$', fontsize = 12)
# y の目盛
plt.yticks(
np.linspace(-np.pi/2, np.pi, 7),
["$-\pi/2$", "", "$0$", "", "$\pi/2$", "", "$\pi$"])
# グリッド(格子線)は dotted で
plt.grid(ls = ':')
# x軸 y軸 は dashed で
plt.axhline(0, c='k', ls = '--', lw=0.5)
plt.axvline(0, c='k', ls = '--', lw=0.5)
plt.legend(fontsize=12);
x = np.linspace(-30, 30, 1000)
plt.plot(x, np.arctan(x), linewidth = 2, label="$\\arctan x$")
# 表示範囲
plt.xlim(-30, 30)
plt.ylim(-np.pi/2, np.pi/2)
# x
plt.xlabel('$x$', fontsize = 12)
# y の目盛
plt.yticks(
np.linspace(-np.pi/2, np.pi/2, 5),
["$-\pi/2$", "$-\pi/4$", "$0$", "$\pi/4$", "$\pi/2$"])
# グリッド(格子線)は dotted で
plt.grid(ls = ':')
# x軸 y軸 は dashed で
plt.axhline(0, c='k', ls = '--', lw=0.5)
plt.axvline(0, c='k', ls = '--', lw=0.5)
plt.legend(fontsize = 12);
逆三角関数,あえて一緒にグラフにすると…
plt.figure(figsize = [6.4, 4.8])
x = np.linspace(-1, 1, 200)
plt.plot(x, np.arcsin(x), linewidth = 2, label="$\\arcsin x$")
plt.plot(x, np.arccos(x), linewidth = 2, label="$\\arccos x$")
x = np.linspace(-10, 10, 200)
plt.plot(x, np.arctan(x), linewidth = 2, label="$\\arctan x$")
# 表示範囲
plt.xlim(-1, 1)
plt.ylim(-np.pi/2, np.pi)
# x の目盛
xticl = []
for i in range(-10, 11, 2):
xticl.append(str(i))
xticl.append("")
plt.xticks(np.linspace(-10, 10, 21), xticl[:-1])
plt.xlabel('$x$', fontsize = 12)
# y の目盛
plt.yticks(
np.linspace(-np.pi/2, np.pi, 7),
["$-\pi/2$", "", "$0$", "", "$\pi/2$", "", "$\pi$"])
# グリッド(格子線)は dotted で
plt.grid(ls = ':')
# x軸 y軸 は dashed で
plt.axhline(0, c='k', ls = '--', lw=0.5)
plt.axvline(0, c='k', ls = '--', lw=0.5)
plt.legend(fontsize=12);
双曲線関数
$y = \sinh x, \ \cosh x, \ \tanh x$ のグラフ例。
x = np.linspace(-5, 5, 200)
plt.plot(x, np.sinh(x), linewidth = 2, label="$\\sinh x$")
plt.plot(x, np.cosh(x), linewidth = 2, label="$\\cosh x$")
# 表示範囲
plt.xlim(-5, 5)
plt.ylim(-50, 50)
# x の目盛
plt.xticks(np.linspace(-5, 5, 11))
plt.xlabel('$x$', fontsize = 12)
# グリッド(格子線)は dotted で
plt.grid(ls = ':')
# x軸 y軸 は dashed で
plt.axhline(0, c='k', ls = '--', lw=0.5)
plt.axvline(0, c='k', ls = '--', lw=0.5)
plt.legend(fontsize = 12);
x = np.linspace(-5, 5, 200)
plt.plot(x, np.tanh(x), linewidth = 2, label="$\\tanh x$")
# 表示範囲
plt.xlim(-5, 5)
plt.ylim(-1, 1)
# x の目盛
plt.xticks(np.linspace(-5, 5, 11))
plt.xlabel('$x$', fontsize = 12)
# y の目盛
plt.yticks(np.linspace(-1, 1, 11))
# グリッド(格子線)は dotted で
plt.grid(ls = ':')
# x軸 y軸 は dashed で
plt.axhline(0, c='k', ls = '--', lw=0.5)
plt.axvline(0, c='k', ls = '--', lw=0.5)
plt.legend(fontsize = 12);
双曲線関数の値域はそれぞれ
\begin{eqnarray}
-\infty < &\sinh x& < \infty \\
1 \leq &\cosh x& < \infty \\
-1 \leq &\tanh x& \leq 1
\end{eqnarray}
あえて全部一緒にしてグラフを描くと…
plt.figure(figsize = [6.4, 6.4])
x = np.linspace(-5, 5, 200)
plt.plot(x, np.sinh(x), linewidth = 2, label="$\\sinh x$")
plt.plot(x, np.cosh(x), linewidth = 2, label="$\\cosh x$")
plt.plot(x, np.tanh(x), linewidth = 2, label="$\\tanh x$")
# 表示範囲
plt.xlim(-5, 5)
plt.ylim(-10, 10)
# x の目盛
plt.xticks(np.linspace(-5, 5, 11))
plt.xlabel('$x$', fontsize = 12)
# y
plt.yticks(np.linspace(-10, 10, 21))
# グリッド(格子線)は dotted で
plt.grid(ls = ':')
# x軸 y軸 は dashed で
plt.axhline(0, c='k', ls = '--', lw=0.5)
plt.axvline(0, c='k', ls = '--', lw=0.5)
plt.legend(fontsize = 12);
逆双曲線関数
$ y = \sinh^{-1} x = \mbox{arsinh}\ x = $ np.arcsinh(x)
の定義域は $ -\infty < x < \infty$
$ y = \cosh^{-1} x = \mbox{arcosh}\ x = $ np.arccosh(x)
の定義域は $ 1 \leq x < \infty$
$ y = \tanh^{-1} x = \mbox{artanh}\ x = $ np.arctanh(x)
の定義域は $ -1 < x < 1$
x = np.linspace(-20, 20, 1000)
plt.plot(x, np.arcsinh(x), linewidth = 2, label="$\sinh^{-1} x$")
x = np.linspace(1, 20, 500)
plt.plot(x, np.arccosh(x), linewidth = 2, label="$\cosh^{-1} x$")
# 表示範囲
plt.xlim(-20, 20)
# x
plt.xlabel('$x$', fontsize = 12)
# グリッド(格子線)は dotted で
plt.grid(ls = ':')
# x軸 y軸 は dashed で
plt.axhline(0, c='k', ls = '--', lw=0.5)
plt.axvline(0, c='k', ls = '--', lw=0.5)
plt.legend(fontsize = 12);
# x = -1, 1 は除く
x = np.linspace(-0.99999, 0.99999, 10000)
plt.plot(x, np.arctanh(x), linewidth = 2, label="$\\tanh^{-1} x$")
# 表示範囲
plt.ylim(-6,6)
# x
plt.xlabel('$x$', fontsize = 12)
# グリッド(格子線)は dotted で
plt.grid(ls = ':')
# x軸 y軸 は dashed で
plt.axhline(0, c='k', ls = '--', lw=0.5)
plt.axvline(0, c='k', ls = '--', lw=0.5)
plt.legend(fontsize = 12);
逆双曲線関数,あえて全部一緒にしてグラフにすると…
plt.figure(figsize = [6.4, 4.8])
x = np.linspace(-20, 20, 1000)
plt.plot(x, np.arcsinh(x), linewidth = 2, label="$\\sinh^{-1} x$")
x = np.linspace(1, 20, 500)
plt.plot(x, np.arccosh(x), linewidth = 2, label="$\\cosh^{-1} x$")
# x = -1, 1 は除く
x = np.linspace(-0.99999, 0.99999, 10000)
plt.plot(x, np.arctanh(x), linewidth = 2, label="$\\tanh^{-1} x$")
# 表示範囲
plt.xlim(-10, 10)
plt.ylim(-5, 5)
# x の目盛
xticl = []
for i in range(-10, 11, 2):
xticl.append(str(i))
xticl.append("")
plt.xticks(np.linspace(-10, 10, 21), xticl[:-1])
plt.xlabel('$x$', fontsize = 12)
# y の目盛
plt.yticks(np.linspace(-5,5,11))
# グリッド(格子線)は dotted で
plt.grid(ls = ':')
# x軸 y軸 は dashed で
plt.axhline(0, c='k', ls = '--', lw=0.5)
plt.axvline(0, c='k', ls = '--', lw=0.5)
plt.legend(fontsize = 12);