三角関数を次々と足し合わせます/掛け合わせます

三角関数を次々と足し合わせます

  今回扱うのは三角級数です:
 
\[\begin{align*}
I(\theta)=\sum_{k=0}^{n}cosk\theta =\frac{sin[(n+1)\theta /2\: ]}{sin(\theta /2)}\: cos\: \frac{n\theta }{2}\\
J(\theta)=\sum_{k=0}^{n}sink\theta =\frac{sin[(n+1)\theta /2\: ]}{sin(\theta /2)}\: sin\: \frac{n\theta }{2}
\end{align*}\]
 
 公式の求め方は 演習問題 CX - 03 で扱っています。
 式だけを眺めていても、I(θ) や J(θ) がどんなグラフを描くのかはさっぱり分かりませんから、どうしてもコンピューターの力を借りる必要があります。数値計算においても上の公式のように綺麗にまとまった形は扱いやすくて助かりますね。それではさっそく Excel でグラフを描いてみましょう。

coskθ の級数

 グラフ三角級数ckn1

 分かりやすいように書き下しておくと、

  n = 1 : y = cosθ
  n = 2 : y = cosθ + cos2θ
  n = 4 : y = cosθ + cos2θ + cos3θ + cos4θ

という関数です。 coskθ を次々と足し合わせていくうちに θ = 2 nπの山の部分が他より突出して高くなっていくことがわかります。 n = 8 で描いてみると ......

 グラフ三角級数ckn8

 さらにピークの鋭さが増していますね。

sinkθ の級数

 グラフ三角級数skn1
  n = 1 : y = sinθ
  n = 2 : y = sinθ + sin2θ
  n = 4 : y = sinθ + sin2θ + sin3θ + sin4θ

 奇関数ですから正負にピークが伸びていきます。
 n = 24 のグラフを確認してみましょう。

 グラフ三角級数skn24

 他の振動部分が無視できるほどピークが大きな値をとっています。
 n → ∞ の極限では他の波は完全に消え去って θ = 2 nπのところにのみ、線のように細く無限大の高さを持つ奇妙な関数となります。
 

三角関数を次々と掛け合わせます

 次は coskx や sinkx を掛けていったらどうなるかという実験です。V n(x) と W n(x) を次のように定義します。
 
\[V_{n}(x)=\prod_{k=1}^{n}\mathrm{cos}kx,\; \; \; W_{n}(x)=\prod_{k=1}^{n}\mathrm{sin}kx\]
 ここで Π は「 k について全て掛けますよ」という記号です。
 高校数学では扱いませんが、要するに Σ の掛け算バージョンです。書き下すと

Vn(x) = cosx cos2x cos3x ... cosnx
Wn(x) = sinx sin2x sin3x ... sinnx

ということです。

ピークだけが残ります

 それではまず Vn(x) について n = 3 から 5 まで動かしてグラフを描いてみます。

 ExcelGraphΠcoskx

 x = nπ のところに大きな波がありますね。 n が増えるほどそのピークは鋭くなり、他の波は小さくなっていきます。 n = 15 をとると ......

 ExcelGraphΠcoskx15

 このように他の波は消えてピークだけが残ります。

全て消え去ります

 sinkx の積 Wn(x) はどのようなグラフを描くでしょうか。

 ExcelGraphΠsinkx

 n の増加にともなって全体的な振幅がどんどん減少してますね。
 n = 10 で描いてみると ......

 ExcelGraphΠsinkx10

 ただのノイズのようになってしまいます。
 n = 15 ぐらいをとると、ほとんど直線と見分けがつかなくなります。

Vn(x) と Wn(x) のファンクションマクロ

 今回のような関数を Excel で入力しようとすると

=cos(a1)*cos(2*a1)*cos(3*a1)*cos(4*a1)*cos(5*a1)

のようにたいへん長くて面倒な作業となります。こうした手間を省くために VBA でファンクションマクロ(ユーザー定義関数)を作っておくと便利です。下にVn(x) と Wn(x) のファンクションマクロを載せておくので、関数を登録しておきたい人は標準モジュールに貼りつけてください。ワークシート関数(エクセル関数)と同じように使えるようになります。Vn(x), Wn(x)についてそれぞれ

=PCOS(x の値, n の値)
=PSIN(x の値, n の値)

という形で入力すると値を返してくれます(x と n の順番に注意!)。

 'coskx の積 Vn(x) の値を出力します
 Function PCOS(x As Double, k As Integer) As Double
 PCOS = 1
 For i = 1 To k
  PCOS = PCOS * Cos(i * x)
 Next
 End Function

 

 'sinkx の積 Wn(x) の値を出力します
 Function PSIN(x As Double, k As Integer) As Double
 PSIN = 1
 For i = 1 To k
  PSIN = PSIN * Sin(i * x)
 Next
 End Function
スポンサーリンク
末尾広告
末尾広告

コメントをどうぞ

メールアドレスが公開されることはありません。