Excel VBA 数学教室ではアフィリエイトプログラムを利用して商品を紹介しています。

周期関数の定義と性質、鋸歯状波

周期関数

関数 f(x)
 f(x+T)=f(x)(T>0)
を満たすとき、f(x) は周期 T周期関数 (periodic function) であるといいます。また、上式を満たす最小の T基本周期(fundamental period)といいます。

周期関数の性質

周期関数には次のような性質があります。

 f(x)g(x) がともに周期 T の周期関数であるとき、
p(x)=af(x)+bg(x),q(x)=f(x)g(x)も周期 T の周期関数です。

ほぼ自明のことですが、いちおう証明しておきます。
 p(x+T)=af(x+T)+bg(x+T)=af(x)+bg(x)=p(x)q(x+T)=f(x+T)g(x+T)=f(x)g(x)=q(x)
また、周期関数の積分について次のような性質があります。

 関数 f(x) が周期 T の周期関数であるとき、任意の定数 c について
0Tf(x)dx=cc+Tf(x)dxが成り立ちます。

これもほとんど自明のことに思えますが、置換積分を使って証明しておきます。積分
 cc+Tf(t)dt
において x=tc とおくと、t:cc+T のとき x:0T となるので、
 cc+Tf(t)dt=0Tf(x)dx
が成り立ちます。

三角関数の周期性

最も有名な周期関数は三角関数で、たとえば sinx2nπ(n=0,1,2,) の周期をもっています。
 sin(x+2nπ)=sinx(n=0,1,2,)
最小周期は T=2π です。
もちろん三角関数同士の和や積も周期関数となっています。たとえば
 f(x)=sinπ2+sinπ3
という関数を考えると、sinx/2 の最小周期は 4π , sinx/3 の最小周期は 6π なので、f(x) の最小周期は 4π6π の最小公倍数である 12π です。実際に確認してみると
 f(x+12π)=sinx+12π2+sinx+12π3=sinπ2+sinπ3
となって、確かに周期が 12π であることがわかります。

鋸歯状波

他にも単純な周期関数の例として、鋸歯状波
 f(x)=xx
があります。ここに x はガウス記号で、x を超えない最大の整数を意味しています。この関数は次のように周期 1 で同じ形の線分を連ねた周期関数となります。
 
Excel周期関数(鋸歯状波)

非周期関数の周期関数への拡張

ある有限区間で定義された適当な関数 f(x) をもってきて、
 f~(x+nT)=f(x)(0x<T,n=1,0,1,)
となるようにつなげると、周期関数 f~(x) となります。このような拡張の仕方を周期的拡張といいます。たとえば 0x<1 で定義された二次関数
 f(x)=x2(0x<1)
を用意して、
 f~(x+n)=f(x)(0x<1,n=1,0,1,)
のように定義すれば、下の図のような周期関数となります(Excelでプロットしました)。
 
Excel周期関数(2次関数)

Excelにおける周期関数の取り扱いの注意

Excel には SIN や COS などいくつかの三角関数用意されていますが、これらの関数を用いて数値計算をするときに注意しなくてはならないことがあります。よく知られているように sinx
 sin(x+2π)=sinx
という周期的性質を満たしているので、x=0 とすると
 sin0=sin2π=0
となるわけですが、これを Excel でそれぞれ

=SIN(0)
=SIN(2*PI())

と入力して計算させて、指数形式で表示すると

0.00E+00
-2.45E-16

という値となります。つまり SIN(2*PI()) は正確に 0 を返しません。その原因は2つあります。1つは引数に用いている PI() が円周率の近似値を返す関数だということです(円周率は無理数なので、コンピュータで正確な値を扱うことはできません)。もう1つの原因は Excel 内部では三角関数をマクローリン級数によって計算しているということです。もちろん有限項で打ち切るので近似計算となります。したがって引数が有理数であっても、その値が大きくなればなるほど、やはり誤差が大きくなるということです。いずれにしても、本来 0 が返るべきところで 0 以外の値が戻ってくるということは、(存在しないはずの SIN(0) の逆数が出力されるなど)場合によっては重大なミスを生じる可能性があるので、Excel では周期関数が正確な値を返さないということを頭の片隅に置いておく必要があります。

エクセルや数学に関するコメントをお寄せください

  1. 三船 より:

    置換積分を使っているほうの性質の証明について、t:c→c+tではなくt:c→c+Tですよね?
    あと質問なのですが、その置換積分によって右辺の被積分関数はf(x)ではなくf(x+c)にまずなる(t=x+cなので)と思うのですが、ここからどう変形するのでしょうか?

    • Blog Cat より:

      ご指摘の通り、t:c→c+T です。記事は訂正しておきました。誠に申し訳ありませんでした。ご質問の置換積分についてですが、
      ∫f(ax+b)dx = F(ax+b)/a + k
      という基本公式があります。ここで、F(x) は f(x) の原始関数、k は積分定数です。この公式を使うと、f(x+c) の積分は
      ∫f(x+c)dx = F(x+c) + k
      となるので、0 から T までの定積分は
      F(c+T) – F(c)
      となり、f(x) の c から c+T までの積分と同じです。記事では少し説明不足だったかもしれません。反省しています。

      • 長谷川 より:

        ∫f(x+c)dx = F(x+c) + k
        となるので、0 から T までの定積分は
        F(c+T) – F(c)
        となり、f(x) の c から c+T までの積分と同じです。 
         
        ↑の説明では結局 f(t)(c→c+T)の積分とf(x)(0→T)の積分は同じなので、
        f(t)(c→c+T)の積分とf(x+c)(0→T)の積分が同じということしかわかりませんでした。
        f(x+c)(0→T)の積分とf(x)(0→T)の積分が同じになる理由がわかりませんでした。

        • Blog Cat より:

          記事本文の公式は、[0, T] における f(x) の積分と、区間を正方向に c だけずらした同じ幅の区間 [c, c+T] における f(x) の積分が一致することを述べています (適当な周期関数の図を描いてみると、なんとなくわかると思います)。

        • Blog Cat より:

          先ほどの補足ですが、区間と関数、どちらをずらしても本質的には同じことなので、記事本文に書いた公式が成り立つならば、[0, T] における f(x+c) と f(x) の積分もやはり一致します。