モジュールの import といくつかの設定
Python の SymPy + SymPy Plotting Backends (SPB) で初等関数のグラフを描く。関数は全て SymPy の関数を使う。NumPy は使わない方針で。
from sympy.abc import *
from sympy import *
# SymPy Plotting Backends
from spb import *
# π
Pi = float(pi)
# グラフを SVG で Notebook にインライン表示させる設定
%config InlineBackend.figure_formats = ['svg']
# グラフを描くためではなくデフォルト設定のため
import matplotlib.pyplot as plt
# font の設定
plt.rcParams['font.family'] = 'serif'
plt.rcParams['mathtext.fontset'] = 'cm'
べき関数
まず,$y = x^{-1}$ のグラフ。
plot(1/x, (x, -5, 5),
xlim = (-5, 5), ylim = (-10, 10));
$y=x^{-1}$ のグラフの $x=0$ 付近,$y \rightarrow -\infty$ と $y \rightarrow +\infty$ を縦の直線でつないでしまう。
不連続点をつなげない対策
detect_poles=True
オプションをつけて,さらに n
の値を大きめにすると,以下のようになる。
plot(1/x, (x, -5, 5),
xlim = (-5, 5), ylim = (-10, 10),
detect_poles = True, n = 1e4);
$y = x^{-2}, \ x^{-1}, \ x^2, \ x^3$ のグラフ例。$y = x^{-1}$ の不連続点をつなげないように。
plot(x**(-2), x**(-1), x**2, x**3, (x, -5, 5),
xlim = (-5, 5), ylim = (-10, 10), size = (6.4, 6.4),
detect_poles = True, n = 1e4);
以下では「参考:初等関数のグラフを描く」シリーズの他のページの見てくれに合わせて,いくつかオプションを設定してグラフを描く例を紹介する。
p = plot((x**(-2), '$x^{-2}$'),
(x**(-1), '$x^{-1}$'),
(x**2, '$x^2$'),
(x**3, '$x^3$'), (x, -5, 5),
xlim = (-5, 5), ylim = (-10, 10),
detect_poles = True, n = 1e4,
size = (6.4, 6.4), show = False)
fig, ax = p.fig, p.ax
fig.tight_layout()
# x の目盛
ax.set_xticks([i for i in range(-5, 6)])
ax.set_xlabel('$x$', fontsize = 12)
# y
ax.set_ylabel('')
# グリッド(格子線)は dotted に
ax.grid(ls = ':')
# x軸 y軸は dashed に
ax.axhline(0, c='k', ls = '--', lw=0.5)
ax.axvline(0, c='k', ls = '--', lw=0.5)
ax.legend(fontsize = 12);
$\displaystyle y = \sqrt{x}, \ \frac{1}{\sqrt{x}}$ のグラフ例。
# x = 0 は除く
p = plot((sqrt(x), '$\\sqrt{x}$', (x, 0, 5)),
(1/sqrt(x), '$1/\\sqrt{x}$', (x, 0.0001, 5)),
xlim = (0, 5), ylim = (0, 5),
size = (6.4, 4.8), show = False)
fig, ax = p.fig, p.ax
fig.tight_layout()
# x
ax.set_xlabel('$x$', fontsize = 12)
# y
ax.set_ylabel('')
# グリッド(格子線)は dotted に
ax.grid(ls = ':')
plt.legend(fontsize = 12);
指数関数
$y = e^{-x}, \ e^x$ のグラフ例。
p = plot(exp(-x), exp(x), (x, -5, 5),
xlim = (-5, 5), ylim = (-1, 30),
size = (6.4, 4.8), show = False)
fig, ax = p.fig, p.ax
fig.tight_layout()
# x の目盛
ax.set_xticks([i for i in range(-5, 6)])
ax.set_xlabel('$x$', fontsize = 12)
# y
ax.set_ylabel('')
# グリッド(格子線)は dotted に
ax.grid(ls = ':')
# x軸 y軸は dashed に
ax.axhline(0, c='k', ls = '--', lw=0.5)
ax.axvline(0, c='k', ls = '--', lw=0.5)
ax.legend(fontsize = 14);
三角関数
$ y = \sin x, \ \cos x, \ \tan x $ のグラフ例。$\tan x$ の不連続点の処理と,$x$ 軸の目盛を $\pi/2$ ごとにしてラベルをつける例。
p = plot((sin(x), "$\\sin x$"),
(cos(x), "$\\cos x$"),
(tan(x), "$\\tan x$"), (x, -2*pi, 2*pi+1),
xlim = (-2*pi, 2*pi+1), ylim = (-5, 5),
size = (6.4, 6.4), show=False,
# 不連続点をつなげない対策
detect_poles = True)
fig, ax = p.fig, p.ax
fig.tight_layout()
# x の目盛
ax.set_xticks(
[i*Pi/2 for i in range(-4, 5)],
["$-2 \pi$", "$-3 \pi/2$", "$-\pi$", "$-\pi/2$","$0$",
"$\pi/2$", "$\pi$", "$3 \pi/2$", "$2 \pi$"])
ax.set_xlabel('$x$', fontsize = 12)
# y の目盛
ax.set_yticks([i for i in range(-5, 6)])
ax.set_ylabel('')
# グリッド(格子線)は 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 = \sin^{-1} x = \arcsin x =$ asin(x)
の定義域は $-1 \leq x \leq 1$
$y = \cos^{-1} x = \arccos x =$ acos(x)
の定義域は $-1 \leq x \leq 1$
$y = \tan^{-1} x = \arctan x =$ atan(x)
の定義域は $-\infty < x < \infty$
p = plot((asin(x), "$\\arcsin x$"),
(acos(x), "$\\arccos x$"), (x, -1, 1),
xlim = (-1, 1), ylim=(-0.5, 1), show = False)
fig, ax = p.fig, p.ax
fig.tight_layout()
# x の目盛
ax.set_xticks([0.2*i for i in range(-5, 6)])
ax.set_xlabel('$x$', fontsize = 12)
# y の目盛
ax.set_yticks(
[i*Pi/4 for i in range(-2, 5)],
["$-\pi/2$", "", "$0$", "", "$\pi/2$", "", "$\pi$"])
ax.set_ylabel('')
# グリッド(格子線)は 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);
p = plot(atan(x), "$\\arctan x$", (x, -30, 30),
xlim = (-30, 30), ylim=(-pi/2, pi/2), show = False)
fig, ax = p.fig, p.ax
fig.tight_layout()
# x
ax.set_xlabel('$x$', fontsize = 12)
# y の目盛
ax.set_yticks(
[i*Pi/4 for i in range(-2, 3)],
["$-\pi/2$", "$-\pi/4$", "$0$", "$\pi/4$", "$\pi/2$"])
ax.set_ylabel('')
# グリッド(格子線)は 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);
3つの逆三角関数を一緒にグラフにすると…
p = plot((asin(x), "$\\arcsin x$", (x, -1, 1)),
(acos(x), "$\\arccos x$", (x, -1, 1)),
(atan(x), "$\\arctan x$", (x, -10, 10)),
xlim = (-10, 10), ylim = (-pi/2, pi),
size = (6.4, 4.8), show = False)
fig, ax = p.fig, p.ax
fig.tight_layout()
# x の目盛
xticl = []
for i in range(-10, 11, 2):
xticl.append(str(i))
xticl.append("")
ax.set_xticks([i for i in range(-10, 11)], xticl[:-1])
ax.set_xlabel('$x$', fontsize = 12)
# y の目盛
ax.set_yticks(
[i*Pi/4 for i in range(-2, 5)],
["$-\pi/2$", "", "$0$", "", "$\pi/2$", "", "$\pi$"])
ax.set_ylabel('')
# グリッド(格子線)は 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$ のグラフ例。
p = plot((sinh(x), "$\\sinh x$"),
(cosh(x), "$\\cosh x$"), (x, -5, 5),
xlim = (-5, 5), ylim = (-50, 50), show = False)
fig, ax = p.fig, p.ax
fig.tight_layout()
# x の目盛
ax.set_xticks([i for i in range(-5, 6)])
ax.set_xlabel('$x$', fontsize = 12)
# y
ax.set_ylabel('')
# グリッド(格子線)は 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);
p = plot((tanh(x), "$\\tanh x$"), (x, -5, 5), legend = True,
xlim = (-5, 5), ylim=(-1, 1), show = False)
fig, ax = p.fig, p.ax
fig.tight_layout()
# x の目盛
ax.set_xticks([i for i in range(-5, 6)])
ax.set_xlabel('$x$', fontsize = 12)
# y の目盛
ax.set_yticks([0.2*i for i in range(-5, 6)])
ax.set_ylabel('')
# グリッド(格子線)は 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);
3つの双曲線関数を一緒にグラフにすると…
p = plot((sinh(x), "$\\sinh x$"),
(cosh(x), "$\\cosh x$"),
(tanh(x), "$\\tanh x$"), (x, -5, 5),
xlim = (-5, 5), ylim = (-10, 10),
size = (6.4, 6.4), show = False)
fig, ax = p.fig, p.ax
fig.tight_layout()
# x の目盛
ax.set_xticks([i for i in range(-5, 6)])
ax.set_xlabel('$x$', fontsize = 12)
# y の目盛
ax.set_yticks([i for i in range(-10, 11)])
ax.set_ylabel('')
# グリッド(格子線)は 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$
p = plot((asinh(x), "$\\sinh^{-1}\, x$", (x, -20, 20)),
(acosh(x), "$\\cosh^{-1}\, x$", (x, 1, 20)),
xlim = (-20, 20), show = False)
fig, ax = p.fig, p.ax
fig.tight_layout()
# x
ax.set_xlabel('$x$', fontsize = 12)
# y
ax.set_ylabel('')
# グリッド(格子線)は 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 は除く
p = plot(atanh(x), "$\\tanh^{-1}\, x$", (x, -0.99999, 0.99999),
ylim=(-6, 6), show = False)
fig, ax = p.fig, p.ax
fig.tight_layout()
# x
ax.set_xlabel('$x$', fontsize = 12)
# y
ax.set_ylabel('')
# グリッド(格子線)は 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);
3つの逆双曲線関数を一緒にしてグラフにすると…
p = plot((asinh(x), "$\\sinh^{-1}\, x$", (x, -20, 20)),
(acosh(x), "$\\cosh^{-1}\, x$", (x, 1, 20)),
(atanh(x), "$\\tanh^{-1}\, x$", (x, -0.99999, 0.99999)),
xlim = (-10, 10), ylim = (-5, 5),
size = (6.4, 4.8), show = False)
fig, ax = p.fig, p.ax
fig.tight_layout()
# x の目盛
xticl = []
for i in range(-10, 11, 2):
xticl.append(str(i))
xticl.append("")
ax.set_xticks([i for i in range(-10, 11)], xticl[:-1])
ax.set_xlabel('$x$', fontsize = 12)
# y の目盛
ax.set_yticks([i for i in range(-5, 6)])
ax.set_ylabel('')
# グリッド(格子線)は 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);