双曲線関数
モジュールのインポート
import matplotlib.pyplot as plt
import numpy as np
import scienceplots
plt.style.use(['science', 'notebook'])
# rcPramsを使ってTeXのフォントをデフォルトにする
#plt.rcParams['font.family'] = 'Times New Roman' # font familyの設定
plt.rcParams['font.family'] = 'serif' # font familyの設定
plt.rcParams['mathtext.fontset'] = 'cm' # math fontの設定
plt.rcParams["font.size"] = 10
ユーザ関数
任意の数の1次元配列をフォーマット付出力するために,
def table(*args):
n1, n2 = np.shape(args)
for i in range(n2):
[print(f'{args[j][i]:8.3f}',end=' ') for j in range(n1)]
print("")
return
双曲線関数の計算
双曲線関数 $\sinh \theta$,$\cosh \theta$,$\tanh \theta$,
三角関数 $\sin \theta$,$\cos \theta$,$\tan \theta$を求めて1次元配列を作り,
いくつかサンプルした数値をフォーマット付出力すると,
q = 180.0/np.pi
thmin, thmax, nth = -2*np.pi, 2*np.pi, 361
th = np.linspace(thmin,thmax,nth)
sht = np.sinh(th)
cht = np.cosh(th)
tht = np.tanh(th)
st = np.sin(th)
ct = np.cos(th)
tt = np.tan(th)
print(f"{'th[deg]':>8s} {'sinh':>8s} {'cosh':>8s} {'tanh':>8s} {'sin':>8s} {'cos':>8s}")
table(th[::15]*q,sht[::15],cht[::15],tht[::15],st[::15],ct[::15])
th[deg] sinh cosh tanh sin cos
-360.000 -267.745 267.747 -1.000 0.000 1.000
-330.000 -158.607 158.610 -1.000 0.500 0.866
-300.000 -93.955 93.960 -1.000 0.866 0.500
-270.000 -55.654 55.663 -1.000 1.000 -0.000
-240.000 -32.964 32.979 -1.000 0.866 -0.500
-210.000 -19.519 19.545 -0.999 0.500 -0.866
-180.000 -11.549 11.592 -0.996 -0.000 -1.000
-150.000 -6.818 6.891 -0.989 -0.500 -0.866
-120.000 -3.999 4.122 -0.970 -0.866 -0.500
-90.000 -2.301 2.509 -0.917 -1.000 0.000
-60.000 -1.249 1.600 -0.781 -0.866 0.500
-30.000 -0.548 1.140 -0.480 -0.500 0.866
0.000 0.000 1.000 0.000 0.000 1.000
30.000 0.548 1.140 0.480 0.500 0.866
60.000 1.249 1.600 0.781 0.866 0.500
90.000 2.301 2.509 0.917 1.000 0.000
120.000 3.999 4.122 0.970 0.866 -0.500
150.000 6.818 6.891 0.989 0.500 -0.866
180.000 11.549 11.592 0.996 0.000 -1.000
210.000 19.519 19.545 0.999 -0.500 -0.866
240.000 32.964 32.979 1.000 -0.866 -0.500
270.000 55.654 55.663 1.000 -1.000 -0.000
300.000 93.955 93.960 1.000 -0.866 0.500
330.000 158.607 158.610 1.000 -0.500 0.866
360.000 267.745 267.747 1.000 -0.000 1.000
十分大きな値に対しては,
threshold = 10
tt[tt>threshold] = np.inf
tt[tt<-threshold] = np.inf
双曲線関数を図示すると,
fig = plt.figure(figsize=(8, 6)) # グラフ領域の作成
plt.axis('square')
plt.grid(color = "gray", linestyle="--")
plt.minorticks_on() # #補助目盛りをつける
plt.xlim(thmin, thmax) # x軸範囲の設定
plt.ylim(thmin, thmax) # y軸範囲の設定
plt.xlabel(r"$x$", fontsize=14) # x軸のラベル設定
plt.ylabel(r"$f(x)$", fontsize=14) # y軸のラベル設定
plt.xticks(np.arange(-6, 7, step=1.0), fontsize=12)
plt.yticks(np.arange(-6, 7, step=1.0), fontsize=12)
plt.plot(th,sht, label=r'$f(x) = \sinh(x)$')
plt.plot(th,cht, label=r'$f(x) = \cosh(x)$')
plt.plot(th,tht, label=r'$f(x) = \tanh(x)$')
plt.legend(ncol=1, loc='lower right', fancybox=False, frameon = True)
plt.tight_layout()
fig.savefig('p1_ex01_hyperbolic.pdf')
plt.show()
双曲線関数と三角関数を比較して図示すると,
fig3, ax = plt.subplots(nrows=1, ncols=3, figsize=(14.5, 4.5)) # グラフ領域の作成,nrows=縦に並べる数,ncols=横に並べる数
ax[0].plot(th,sht, label=r'$f(x) = \sinh(x)$')
ax[0].plot(th,st, label=r'$f(x) = \sin(x)$')
ax[1].plot(th,cht, label=r'$f(x) = \cosh(x)$')
ax[1].plot(th,ct, label=r'$f(x) = \cos(x)$')
ax[2].plot(th,tht, label=r'$f(x) = \tanh(x)$')
ax[2].plot(th,tt, label=r'$f(x) = \tan(x)$')
for i in range(3):
ax[i].axis('square')
ax[i].grid(color = "gray", linestyle="--")
ax[i].minorticks_on() # #補助目盛りをつける
ax[i].set_xlim(thmin, thmax) # x軸範囲の設定
ax[i].set_ylim(thmin, thmax) # y軸範囲の設定
ax[i].set_xlabel(r"$x$") # x軸のラベル設定
ax[i].set_ylabel(r"$f(x)$") # y軸のラベル設定
ax[i].set_xticks(np.arange(-6, 8, step=2.0))
ax[i].set_yticks(np.arange(-6, 8, step=2.0))
ax[i].legend(ncol=1, loc='lower right', fancybox=False, frameon = True)
fig3.tight_layout()
fig3.savefig('p1_ex01_hyperbolic3.pdf')