実験から始まる数学 第 6 回 関数の近似 (角皆, 梅垣, 青井)

1関数の近似6

膨大なデータに対して「おおよそ」を考えることは日常生活で無意識に行なわれています. この一見すると「いいかげん」な行為は数学とは対極にあるように見えるかもしれません. しかし,

• 誤差をある範囲に抑えるには, どのくらいまでいいかげんに考えても良いか?
• おおよそを求める効率の良い手法はあるか?というのは立派な数学の問題になります. 特に後者は, 有限の情報, 有限の操作しか扱うことができないコンピュータを扱う上で重要になります. このような手法を確立することで, 例えば音楽や映像を 0 と 1 からなるデータとして扱うことが可能となります.
与えられたデータからどのように「おおよそ」を考えるか? 今回は, 「フーリエ展開」という手法から関数の近似について調べることにします.

6.1

印刷の方法

画面の印刷はソフトウェア毎に色々な方法がありますが, 今回は KNOPPIX/Math共通で使うことができる手法を紹介します. それは, 画面のスナップショットを取る, という方法です. 「メニュー」の「グラフィックス」から「KSnapshot」を選択します. 「キャプチャモード」を「カーソル下のウィンドウ」に選択して, 「新規スナップショット」をクリックすることにより, 好きなウィンドウを保存, 印刷することができます.

この方法は全てのウィンドウで使うことができる方法です1 .
1

印刷機能があるソフトウェア (KSEG 等) については, そちらを用いた方が便利です2三角関数について

6.2

日常生活では, 音波, 電波等の様々な「波」が用いられております. これは, 三角関数と呼ばれる関数を用いて捉えることができます. 最初に今回の主役である三角関数について解説します.

弧度法
以後, 角度として, 60 分法ではなく, 弧度法と呼ばれるものを考えることにします. 単位はラジアンを用い, 360◦ を 2π ラジアンと定めます. これは, 以下のように定義することもできます.
半径が 1 である扇形の中心角の大きさを, その弧の長さで定義する
2π
弧度法による角度は普段使われている角度に 360をかけることにより求めることができます. 微分積分等, 数学の様々な計算では弧度法が便利なのでこちらが用いられています.

60 分法
ラジアン0◦030◦45◦60◦90◦π6π4π3π2180◦π360◦2π三角関数
三角関数 sin, cos を次のように定義します.
座標平面上に中心 1, 半径 1 である円周を描いたとき, 円周上の点で,x 軸と θ ラジアンの角度をなす点を考える.
この点の x 座標を cos(θ), y 座標を sin(θ) と定める.
全ての θ について, sin(θ) と sin(θ + 2π) はと等しくなります. これは, 「2π を足す」ことが円周を 1 周することに相当するからです2 . つまり, y = sin(x) というグラフは −π から π までを見れば, その先は同じ形が続いていることになります.
また, 定義から, 次が成り立ちます.
(π)
cos(x) = sin x +2
これは実際にグラフを見ることでも確認できます:

22π の周期を持つと呼ばれます.

実験から始まる数学 第 6 回 関数の近似 (角皆, 梅垣, 青井)

3

また, y = sin(2x) は, y = sin(x) のグラフを x 軸方向に 21 だけ縮小した形になります. これは, 振動数が 2 倍の波を表わしています.
物理現象である音波や電波は, この三角関数を用いることで記述できることが知られています. 波が 1 秒間に振動する回数を周波数と呼び, Hz(ヘルツ) で表わされます.

積分について積分についての精密な定義はあるのですが, 今は “面積” から決まっていると考えます. 次のように定義します3 .

y = f (x) と x 軸, x = a, x = b で囲まれる図形を x 軸によって 2 つに分割します. このとき, 「(y > 0 の部分の面積)− (y < 0 の部分の面積)」∫bを f (x) の a から b までの (定) 積分と呼び, a f (x)dx と表わします.

特に, 積分が 0 であることは, x 軸を境に上下に同じ面積の図形が存在することを意味しています. sin(x) の −π から π までの積分は 0 となります. cos(x) も同様です.
3

今回は有界閉区間上の連続関数しか考えないので, この定義で十分です.

4
以後使用するのは, sin(x), cos(x) の振動数が自然数倍である波です. これに定数 1 = cos(0x) を入れた集合を F で表わすことにしましょう. つまり,

F = {sin(nx)}n=1,2,... ∪ {cos(mx)}m=0,1,2,...と定義します. F は 2π の周期をもつ関数の集まりであり, 今回のお話の主役です.

6.3

三角関数の直交性

まずは F の性質を調べる実験を始めましょう.
実験 1. Maxima を起動して下さい.
©

®

(%i1) f1(x):=sin(2*x);(%i2) f2(x):=cos(3*x);(%i3) plot2d([f1(x),f2(x),f1(x)*f2(x)],[x,-%pi,%pi]);(%i4) integrate(f1(x)*f2(x),x,-%pi,%pi);(%i5) f(x):=cos(x)-2*cos(2*x)+4*sin(3*x)+7*sin(5*x);(%i6) integrate(f(x)*f1(x),x,-%pi,%pi);­ª1. まず, F から 2 つの関数を選んで, その積がどんな関数であるかを調べてみましょう. 最初の 2 行で 2 つの関数 f1 (x), f2 (x) を定義します. 3 行目は, グラフを表示させるコマンドです. 4 行目で, 積の −π から π までの積分値∫πf (x)f2 (x)dx を求めています. 初期状態での積分値は 0 になります.
−π 1
最初の 2 つの関数の定義で, sin を cos に変えたり, 振動数を変えることで,F の別の元に変えてみて下さい. そして, グラフや積分値がどうなるかを調べて下さい. 積分値が変化するのはどのような時でしょうか? (ヒント:同じ実数同士の積は負になることはありません)

2. 更に 5 行目で f (x) = sin(x) + 2 cos(x) + 3 sin(5x) を定義します. これに対して,∫π−πf (x)f1 (x)dx 6= 0となるような F の元 f1 (x) は存在するでしょうか? また, そのときの値はどうなるでしょうか? 上の結果を踏まえて考えて下さい. 計算途中で Assumed
to be zero in ‘taylor’ という表示は無視して下さい. 最後に出て来るのが積分値です.

実験から始まる数学 第 6 回 関数の近似 (角皆, 梅垣, 青井)

5

実際に調べるとお分かりになる通り, sin(nx) と cos(mx) は自分自身以外の積との積分値が 0 になる, という面白い特徴をもっています. これは, 以下のようにまとめられます:∫ πsin(nx) cos(mx)dx = 0,−π

∫ πsin(nx) sin(mx)dx ={πn = m,0 n 6= m,
∫ π2π n = m = 0,cos(nx) cos(mx)dx = πn = m 6= 0,−π
0n 6= m.
−π

数学では, この性質を互いに直交すると表現します. つまり, F の元は互いに直交する元を無限に集めた集合になっています.

6.4

波の分解

F の直交性を利用することで, 波の重ね合わせ4 を解析することができます.
実験 2. Maxima の続きです.
®

©

(%i1) f(x):=(sin(x))^3;(%i2) a(k):=expand(integrate(f(x)*cos(k*x),x,-%pi,%pi)/%pi);(%i3) b(k):=expand(integrate(f(x)*sin(k*x),x,-%pi,%pi)/%pi);(%i4) n:5;(%i5) makelist(a(k),k,0,n);(%i6) makelist(b(k),k,1,n);­ªf (x) = sin3 (x) に対して, かけたものの積分値が 0 にならないような F の元を探してみましょう. 最初の行が f (x) の定義, 2 行目と 3 行目は, F の元をかけて積分したものを π で割ったものです. sin(x), sin(2x), . . . , sin(nx) および1, cos(x), cos(2x), . . . , cos(nx) に関しての積分値が表示されます. このことから,sin3 (x) を F の和で表わすことを考えて下さい. 時間に余裕があれば, f (x) をsin(x) と cos(x) に関する他の多項式に変えて調べて下さい.

4

数学では, F の元の一次結合, と呼ばれるものです.

6
実は, f (x) を sin(x) と cos(x) に関する n 次多項式とすると, f (x) は F の振∫π
動数が k 倍までの波の足し合わせになります. 実際, ak = π1 −π f (x) cos(kx)dx,∫πbk = π1 −π f (x) sin(kx)dx とすると, 以下が成立します:na0 ∑f (x) =+(ak cos(kx) + bk sin(kx)) .
2
k=1

数学に限らず, 料理でもそうなのですが, 与えられた材料 (今の場合は複数の関数) を混ぜ合わせる (足し合わせる) ことは, 簡単ですが, 混ぜ合わせたものだけから材料を当てるのは非常に困難です. しかしながら, F の元を混ぜ合わせたものに対しては, 直交性という性質を用いることにより, それぞれの波がどのぐらい入っているかを自由に調べることができます. このようにして波の重ね合わせを分解することができます.

6.5

フーリエ級数展開

それでは, 波の重ね合わせとは限らない, 一般の関数に対して F の成分を取り出すことはできるのでしょうか? その様子を調べることにしましょう.
実験 3. 先の実験を一般の関数に対して考えます.
®

(%i1) f(x):=x^2;(%i2) a(k):=expand(integrate(f(x)*cos(k*x),x,-%pi,%pi)/%pi);(%i3) b(k):=expand(integrate(f(x)*sin(k*x),x,-%pi,%pi)/%pi);(%i4) g(x,m):=a(0)/2+sum(a(k)*cos(k*x)+b(k)*sin(k*x),k,1,m);(%i5) n:3;(%i6) plot2d([f(x),g(x,n)],[x,-%pi,%pi]);(%i7) plot2d(cons(f(x),makelist(g(x,m),m,0,n)),[x,-%pi,%pi]);­©

ª関数 f (x) := x2 に対して, π1 sin(nx) および π1 cos(mx) とかけたものの積分値 a(k),b(k) を求めて, それを元に波を合成してみましょう. n: の後の数字を変えることで, 波を増やすとどうなるかを調べて下さい. 次に, f(x):=x^2 を f(x):=x に変えて, 同じことを試して下さい. 実は, 最初の f(x) の与え方によって, グラフの様子は大きく 2 つに分かれます. f (x) = x2 の場合と f (x) = x の場合では,n を大きくしたときの挙動に大きな違いがあります. それが何であるか? どうして起こるのか? 考えてみて下さい. (f (x) = x3 − πx2 の場合はどうでしょうか?
f(x):=x^3-%pi*x^2 として試して下さい.)実験から始まる数学 第 6 回 関数の近似 (角皆, 梅垣, 青井)

7

実は, 連続関数 f (x) が周期関数, つまり, 今の場合は f (−π) = f (π) を満たすならば, 波の数を増やすと, 波の合成が各点で一様に f (x) に近づくことが数学的に証明されています:∞a0 ∑+(ak cos(lx) + bk sin(lx)) ,2k=1∫∫
1 π1 πak =f (x) cos(kx)dx, bk =f (x) sin(kx)dx.
π −ππ −πf (x) =これを, フーリエ級数展開 と呼びます.
f (x) が周期関数ではない, つまり, f (−π) 6= f (π) の場合にも, フーリエ級数展開を考えることはできます. しかしながら, その場合には, 両端でグラフが乱れていることが見て取れます. これは, 「ギブス現象」と呼ばれています. 有限個の波で近似した場合にはこの現象が常に発生することが数学的に証明されています. この場合は, 「弱い意味で収束する5 」ことが知られています.

以上のように, 各点での値ではなく, 「波」によって様々な関数を近似することができます. この考え方は, 例えば計算機上で音を扱う上で有効になります. 空気の振動である音波は様々な波が重なり合ったものです. ですが, 人間が聞くことができるものは一部の周波数 (振動数) だけです6 . フーリエ級数展開の原理を応用することで, 与えられた音から人間に聞こえる範囲を選んで抽出することも可能となるわけです.

56差の積分値が 0 に収束する.
人間に聞こえる周波数は 20Hz–20000Hz ぐらいと言われています.

86.6

再び π の話最後に, フーリエ級数展開の応用を紹介します. 今, f (x) = x に対してフーリエ級数展開を考えると, 以下のようになります:

x=2∞∑(−1)n−1n=1

sin(nx).
nここで, x = π2 を代入すると,

sin( nπ )20=n = 4k, 4k + 2,1n = 4k + 1,
−1 n = 4k + 3.となることから, 以下を得ます:∞∑1π(−1)k=2.
22k + 1k=0

これより,

(1 1 1π = 4 1 − + − + ···3 5 7)という π に関する展開式が導かれます.
実験 4. 上の式が正しいかどうか, Maxima で確認しましょう.
®

(%i1) p(k):=4*sum((-1)^m/(2*m+1),m,0,k-1);(%i2) p(100)；­©
ª

第 1 行で近似式を定義しています. 最初から第 k 項までを足したものを p(k) と置いています. 第 2 行で具体的な値を求めています. 数字を増やしてみて, 値がどう変化するかを調べて下さい.
動かしてみると分かるのですが, これは非常に「実用的ではない」展開式です.
実際, 小数第 k 位まで確定しようと思うと, 第 2 × 10k 項まで使ってもまだ足りません.
与えられた問題に対して効率性も考えて解法を与えることは, コンピュータと数学に関わる重要な課題であると言えるでしょう.