次の目標は、sin関数(正弦関数)のグラフを描くことです。θを変数と見なして、値を変えていったときのsinθがsin関数です。
ここでの目標は周期や周波数(後述します)を変えてグラフを描くことです。単純にsinθのグラフを描く例を最初に見ておき、それを書き換えることによって進めていくことにしましょう。θの値を変えながら(θ,sinθ)をプロットしていけば、簡単にsin関数のグラフが描けます。コードはリスト4の通りで、結果は図5のようになります。
import matplotlib.pyplot as plt
import numpy as np
theta = np.linspace(0, 2*np.pi, 100)
data = np.sin(theta)
plt.plot(theta, data)
plt.show()
ここからが本題です。図6のようにtの値を0〜1の間を100個に分け、sin関数が「一周」するようにしてみてください。これが目標3でまず取り組むことになります。
cos関数やsin関数は、2πごとに同じ形のグラフが繰り返されます。円周の長さが2πなので、一周回ったら元に戻るというわけです。この「一周の長さ」を周期と呼びます。グラフで表すと山から山まで(あるいは谷から谷まで)の長さが周期です。cos関数もsin関数も周期は2πですが、上の例では周期が1になるようにするというわけです。
(ヒント)t=1のときに、角度が2πになるようにすればよい
さらに、全体の長さ(tの最大値)を1としたまま、周期が1/3になるようにしてみてください。周期が1/3になると、図7のように同じ形の「波」が3回現れます。この個数のことを周波数と呼びます。
このグラフを描くことがここでのもう1つの目標です。
(ヒント)t=1/3のときに、角度が2πになるようにすればよい
なお、サウンドを表す波などではtが時間(秒)に当たります。周波数の単位はHz(ヘルツ)です。周期をTとし、周波数をfとすると、
という関係になっています。
まず、周期を1としたグラフを描いてみましょう。tはグラフの横軸にあたる値で、0〜1の範囲です。それを100個に分けます。そして、sin関数の引数は、t=1のときに2πになればいいので、2*np.pi * tを指定すればよさそうですね。これ以降のお話については、動画でも解説してあります。ぜひご視聴ください。
import matplotlib.pyplot as plt
import numpy as np
t = np.linspace(0, 1, 100)
data = np.sin(2*np.pi * t)
plt.plot(t, data)
plt.show()
次に、周期を1/3にして3つの波が表示されるようにしましょう。linspace関数の第2引数(末項の値)を3にすればいいと思われるかもしれませんが、それだと、周期1の波がt=0〜3の間に3つ表示されるだけです。周期が1/3の波をt=0〜1の間に3つ表示するので、0〜1/3を0〜2πに対応させます。従って、sin関数の引数を2*np.pi * 3 * tにすればいいですね。ここでは周波数をfreqという変数で表すことにします。
import matplotlib.pyplot as plt
import numpy as np
t = np.linspace(0, 1, 100)
freq = 3 # 周波数
data = np.sin(2*np.pi * freq * t)
plt.plot(t, data)
plt.show()
複素数平面(複素平面、ガウス平面とも呼ばれます)とは、複素数の実数部を横軸に、虚数部を縦軸にとった平面です。横軸は実軸、縦軸は虚軸と呼ばれます。cosθを実軸での値、sinθを虚軸の値として複素数平面上にプロットすると、図8の左のようになります。
(cosθ,sinθ)を1つの複素数にまとめて表すと、オイラーの公式により、
と簡単に表現できます。この式の中のiは虚数単位です(ただし、Pythonのコードでは虚数単位を`j`と表します)。なお、図8の右側に示したように、振幅は波の高さを表します。これは、左側の円の半径に当たります。複素数a+biの大きさ|a+bi|は、
で表されるので、上の場合だと、
となります。半径がrであれば、当然のことながら、
ですね。図8の右側で、周期が波の山から次の山までの時間(谷から谷まででも同じ)であること、波長は1周期の波の長さであることも確認しておきましょう。なお、単位時間(通常1秒)当たりの周期の数が周波数です。
三角関数には、cosやsinのほかにもtanなどさまざまなものがあり、公式も数多くあります。しかし、基本の基本はこれだけです。幾つかの関連事項や応用例に触れるために、練習問題に取り組んでみましょう。
Copyright© Digital Advantage Corp. All Rights Reserved.