簡単な関数の計算,出力,プロット

sin 関数

numpy, matplotlib をインポートします.
import numpy as np
import matplotlib.pyplot as plt
SciencePlotsをインストール(pip install SciencePlots)した環境で,スタイルファイルを指定してmatplotlibのスタイル変更します.
import scienceplots
#Warning : As of version 2.0.0, you need to add import scienceplots before setting the style (plt.style.use('science')).
plt.style.use(['science', 'notebook'])
関数 $y= \sin(x)$ を計算して出力します.
q = 180.0/np.pi
nx = 7 # 計算点数
print(f"{'x [deg]':>8s} {'sin(x)':>10s}")
dx = 15.0/q
for i in range(nx):
    x = i*dx
    print(f"{x*q:8.2f} {np.sin(x):10.5f}")
 x [deg]     sin(x)
    0.00    0.00000
   15.00    0.25882
   30.00    0.50000
   45.00    0.70711
   60.00    0.86603
   75.00    0.96593
   90.00    1.00000
リスト内包表記で横並びの出力をしてみよう.
nx2 = 6
xx = np.linspace(0.0, 90.0/q, nx2)
print(f"{'x [deg]:':>10s}",end=' ')
[print(f"{xx[i]*q:8.5f}",end=' ') for i in range(nx2)] # リスト内包表示
print("")
print(f"{'sin(x):':>10s}",end=' ')
[print(f"{np.sin(xx[i]):8.5f}",end=' ') for i in range(nx2)]
x [deg]:  0.00000 18.00000 36.00000 54.00000 72.00000 90.00000 
 sin(x):  0.00000  0.30902  0.58779  0.80902  0.95106  1.00000
matplotlibで作図します.
xx2 = np.linspace(0.0, 360.0/q, 91)
yy2 = np.sin(xx2)
plt.plot(xx2,yy2)
plt.show()
SciencePlotsを使用した場合,

SciencePlotsを使用しない場合,

pdfファイルを出力する場合は,
fig = plt.figure() # グラフ領域の作成
plt.plot(xx2,yy2)
fig.savefig('sin.pdf')
作図に用いた計算値を出力すると,
print(f"{'No.':>3s} {'x [deg]':>8s} {'sin(x)':>10s}")
for i,x in enumerate(xx2):
    print(f"{i+1:3.0f} {x*q:8.2f} {yy2[i]:10.5f}")
No.  x [deg]     sin(x)
  1     0.00    0.00000
  2     4.00    0.06976
  3     8.00    0.13917
  4    12.00    0.20791
  5    16.00    0.27564
  6    20.00    0.34202
  7    24.00    0.40674
  8    28.00    0.46947
  9    32.00    0.52992
 10    36.00    0.58779
 11    40.00    0.64279
 12    44.00    0.69466
 13    48.00    0.74314
 14    52.00    0.78801
 15    56.00    0.82904
 16    60.00    0.86603
 17    64.00    0.89879
 18    68.00    0.92718
 19    72.00    0.95106
 20    76.00    0.97030
 21    80.00    0.98481
 22    84.00    0.99452
 23    88.00    0.99939
 24    92.00    0.99939
 25    96.00    0.99452
 26   100.00    0.98481
 27   104.00    0.97030
 28   108.00    0.95106
 29   112.00    0.92718
 30   116.00    0.89879
 31   120.00    0.86603
 32   124.00    0.82904
 33   128.00    0.78801
 34   132.00    0.74314
 35   136.00    0.69466
 36   140.00    0.64279
 37   144.00    0.58779
 38   148.00    0.52992
 39   152.00    0.46947
 40   156.00    0.40674
 41   160.00    0.34202
 42   164.00    0.27564
 43   168.00    0.20791
 44   172.00    0.13917
 45   176.00    0.06976
 46   180.00    0.00000
 47   184.00   -0.06976
 48   188.00   -0.13917
 49   192.00   -0.20791
 50   196.00   -0.27564
 51   200.00   -0.34202
 52   204.00   -0.40674
 53   208.00   -0.46947
 54   212.00   -0.52992
 55   216.00   -0.58779
 56   220.00   -0.64279
 57   224.00   -0.69466
 58   228.00   -0.74314
 59   232.00   -0.78801
 60   236.00   -0.82904
 61   240.00   -0.86603
 62   244.00   -0.89879
 63   248.00   -0.92718
 64   252.00   -0.95106
 65   256.00   -0.97030
 66   260.00   -0.98481
 67   264.00   -0.99452
 68   268.00   -0.99939
 69   272.00   -0.99939
 70   276.00   -0.99452
 71   280.00   -0.98481
 72   284.00   -0.97030
 73   288.00   -0.95106
 74   292.00   -0.92718
 75   296.00   -0.89879
 76   300.00   -0.86603
 77   304.00   -0.82904
 78   308.00   -0.78801
 79   312.00   -0.74314
 80   316.00   -0.69466
 81   320.00   -0.64279
 82   324.00   -0.58779
 83   328.00   -0.52992
 84   332.00   -0.46947
 85   336.00   -0.40674
 86   340.00   -0.34202
 87   344.00   -0.27564
 88   348.00   -0.20791
 89   352.00   -0.13917
 90   356.00   -0.06976
 91   360.00   -0.00000

関数のプロット

【例題1】 $y=\frac{1+\cos(x)}{2}$ をプロットせよ(SciencePlotsを使用). $x$軸,$y$軸のラベルにtexを使ってみよう.

xx_deg = np.linspace(-180.0, 180.0, 91) # [deg]
xx_rad = xx_deg/q
fig = plt.figure() # グラフ領域の作成
plt.xlabel(r"$x*\frac{180}{\pi}$ [deg]") # x軸のラベル設定
plt.ylabel(r"$\frac{1+\cos(x)}{2}$") # y軸のラベル設定
plt.plot(xx_deg, (1+np.cos(xx_rad))/2)
fig.savefig('cos1.pdf')
plt.show()

【例題2】 $y=\frac{1+\cos(x)}{2}$ および$+x$方向に$\pi/4$,$\pi/2$ずらした波形をプロットせよ. 凡例(デフォルトの設定)も示すこと.

fig = plt.figure() # グラフ領域の作成
plt.xlabel(r"$x*\frac{180}{\pi}$ [deg]") # x軸のラベル設定
plt.ylabel(r"$y$") # y軸のラベル設定
plt.plot(xx_deg, (1+np.cos(xx_rad))/2, label=r"$y=\frac{1+\cos(x)}{2}$")
plt.plot(xx_deg, (1+np.cos(xx_rad-np.pi/4))/2, label=r"$y=\frac{1+\cos(x-\pi/4)}{2}$")
plt.plot(xx_deg, (1+np.cos(xx_rad-np.pi/2))/2, label=r"$y=\frac{1+\cos(x-\pi/2)}{2}$")
plt.legend()
fig.savefig('cos3.pdf')
plt.show()

【例題3】 $y=\tanh (x), \sinh(x), \cosh(x)$ をプロットせよ. グリッドをつけて,凡例も示すこと.

グリッドに凡例が隠れないように,
xx3 = np.linspace(-2, 2, 61)
fig = plt.figure() # グラフ領域の作成
plt.grid(color = "gray", linestyle="--")
plt.xlabel("$x$ [rad]") # x軸のラベル設定
plt.ylabel("$y$") # y軸のラベル設定
plt.plot(xx3, np.tanh(xx3), label=r"$\tanh(x)$")
plt.plot(xx3, np.sinh(xx3), label=r"$\sinh(x)$")
plt.plot(xx3, np.cosh(xx3), label=r"$\cosh(x)$")
plt.legend(ncol=1, loc='lower right', fancybox=False, frameon=True)
fig.savefig('hyperbolic2.pdf')
plt.show()