直交関数展開:ベクトルと関数の交差点#

まとめ#

Tip

ベクトル空間上の直交基底{ei}の線形結合c0e0+c1ee++cnenであらゆるベクトルを表せるのと同様に、関数においても 完備な直交関数系による近似によって任意の関数を表現できる

その近似は直交関数系{ϕi(x)}の線形結合c0ϕ0(x)+c1ϕ1(x)++cnϕn(x)なので、級数(i=1ciϕi(x) など)で表現できる(→フーリエ級数)

../../_images/760c09a8f919ea7411b2e516b2e5c3a705184c2392ed621221e532ca8da1cceb.png

直交関数#

区間 [a,b] 上の関数 f(x),g(x)

abf(x)g(x)dx=0

のとき 直交する という。

関数 ϕ0(x),ϕ1(x),,ϕn(x) が互いに直交するとき、すなわち

abϕi(x)ϕj(x)dx=0,ij

のとき、これらは区間[a,b]上の 直交関数系 であるという。とくにϕi(x)xの多項式なら、これを 直交多項式 という。

直交多項式の例:ルジャンドルの多項式

次の関数 Pn(x),n=0,1,2,, は n 次の ルジャンドルの多項式 と呼ばれる。

P0(x)=1P1(x)=xP2(x)=12(3x21)P3(x)=12(5x33x)P4(x)=18(35x430x2+3)P5(x)=18(63x570x3+15x)P6(x)=116(231x6315x4+105x25)

これらは区間 [1,1] 上の直交関数系であり, 次の直交関係が成立する.

11Pn(x)Pm(x)dx={22n+1n=m のとき 0nm のとき 

Pn(x) の一般式が次式で表せることが知られている(ロドリゲスの公式).

Pn(x)=12nn!dn(x21)n dxn
直交関数の例
12,coskx,sinkx,k=1,2,3,

は区間 [π,π] 上の直交関数である。

(証明) coskx,sinkx,k=1,2,3, は周期 2π の周期関数であるから、 1 周期 に渡る積分 ππcoskx dx,ππsinkx dx は 0 である。このことから 12coskx, sinkx に対して次のようになる。

ππ12coskx dx=ππ12sinkx dx=0

coskx,sinlx に対しては次のようになる。

ππcoskxsinlx dx=12ππ(sin(k+l)xsin(kl)x)dx=0

kl のとき coskx,coslx に対して次のようになる。

ππcoskxcoslx dx=12ππ(cos(k+l)x+cos(kl)x)dx=0

kl のとき sinkx,sinlx に対して次のようになる。

ππsinkxsinlx dx=12ππ(cos(k+l)xcos(kl)x)dx=0

以上より 12,coskx,sinkx,k=1,2,3,, が直交関数系であることが示された。

また次の関係も成り立つ。

ππ(12)2 dx=π2ππcos2kx dx=12ππ(1+cos2kx)dx=πππsin2kx dx=12ππ(1cos2kx)dx=π

最小二乗近似#

区間[a,b]上の直交関数系{ϕi(x)},i=0,1,,nの線形結合で関数f(x)を近似する事を考える

f(x)c0ϕ0(x)+c1ϕ1(x)++cnϕn(x)

このような近似は、画像や音声を表す信号を少量の数値のみで高速に伝送したり、メモリの記憶容量を削減するために用いられる。

近似の尺度として最小二乗法

J=12ab(f(x)c0ϕ0(x)c1ϕ1(x)cnϕn(x))2 dx
minc0,,cnJ

を用いると、各係数ci

ci=abf(x)ϕi(x)dxabϕi(x)2 dx,i=0,1,,n

となる

証明
Jci=ab(f(x)c0ϕ0(x)c1ϕ1(x)cnϕn(x))ϕi(x)dx=(abf(x)ϕi(x)dxc0abϕ0(x)ϕi(x)dxc1abϕ1(x)ϕi(x)dxcnabϕn(x)ϕi(x)dx)=(abf(x)ϕi(x)dxciabϕi(x)2 dx)

これを0とおくと、係数が求まる

完備#

定義(完備)

直交関数系の無限列 {ϕi},i=0,1,2, があり、任意の連続関数 f(x)ϕ0(x),ϕ1(x),ϕ2(x),,ϕn(x) による近似が n のときに f(x) に収束するとき、 直交関数系 {ϕi}完備 (complete) であるといい、 その収束する級数を関数 f(x){ϕi} による 直交関数展開 という。

フーリエ級数#

12,coskx,sinkx,k=1,2,3,

は区間[π,π]上で完備であることが知られ、これらを用いる直交関数展開を フーリエ級数 (Fourier series) という。

関数f(x)の近似

f(x)a02+a1cosx+b1sinx+a2cos2x+b2sin2x+a3cos3x+b3sin3x+

の係数an,bnは次のようになる

a0=1πππf(x)dx,ak=1πππf(x)coskx dx,bk=1πππf(x)sinkx dx

これらの係数を フーリエ係数 と呼ぶ。

例(フーリエ級数)#

次の関数 f(x) を区間 [π,π] 上でフーリエ級数に展開せよ

f(x)={10xπ のとき 1πx<0 のとき 
a0=1π(π0 dx+0πdx)=π+ππ=0ak=1π(π0coskx dx+0πcoskx dx)=1π([sinkxk]π0+[sinkxk]0π)=0bk=1π(π0sinkx dx+0πsinkx dx)=1π([coskxk]π0[coskxk]0π)=1π(1cos(π)kkcosπk1k)=2(1(1)k)kπ

よって、次のようになる

f(x)=4πsinx+43πsin3x+45πsin5x+47πsin7x+

この近似を f^(x,n)=k=1nbksinkx とおく。pythonで計算すると次の図のようになる

Hide code cell source
import matplotlib.pyplot as plt
import numpy as np

def f(x: np.array) -> np.array:
    y = np.zeros_like(x)
    y[(0 <= x) & (x <= np.pi)] = 1
    y[(-np.pi <= x) & (x < 0)] = -1
    return y

# a_0, a_k が 0なので、 b_k (sinの係数)のみが残る
def b(k):
    return (2 * (1 - (-1)**k)) / (k * np.pi)

def f_hat(x: np.array, n: int) -> np.array:
    approx = np.zeros_like(x)
    for k in range(1, n+1):
        approx += b(k) * np.sin(k * x)
    return approx


fig, ax = plt.subplots()
x = np.linspace(-np.pi, np.pi, 500)
ax.plot(x, f(x), label="$f(x)$", color="black")
ax.plot(x, f_hat(x, n=1), label=r"$\hat{f}(x, n=1)$", linestyle="--", alpha=0.7)
ax.plot(x, f_hat(x, n=5), label=r"$\hat{f}(x, n=5)$", linestyle="--", alpha=0.7)
ax.plot(x, f_hat(x, n=100), label=r"$\hat{f}(x, n=100)$", linestyle="--", alpha=0.7)
ax.plot(x, f_hat(x, n=1000), label=r"$\hat{f}(x, n=1000)$", linestyle="--", alpha=0.7)
ax.set(xlabel="x", title=r"Approximating $f(x)$ by Fourier series")
ax.legend()
fig.show()
../../_images/c08f121f1e1d4ddb19ef7e204e03244854777104f3b61c2f73a157668738c213.png

直交展開#

計量空間の元 e1,e2,,en が互いに直交するとき、すなわち

(ei,ej)=0,ij

のとき、これらは 直交系 であるという。 特に、すべてがノルム 1(ei=1, i=1,,n) のとき、これを 正規直交系 という。 式で書くと次のようになる。

(ei,ej)=δij

ただしδijはクロネッカーのデルタである

線形結合による表現#

計量空間Lの直交系{ei},i=1,,nを用いて、任意の元uLを線形結合で

uc1e1+c2e2++cnen

と近似することを考える。

二乗誤差

J=12u(c1e1+c2e2++cnen)2

を用いて最小二乗法で近似すると、解は

ci=(u,ei)ei2i=1,,n

となる。

証明
J=12u(c1e1+c2e2++cnen)2=12uj=1ncjej2=12(uj=1ncjej,uj=1ncjej)

内積の微分は

ddxf(x),g(x)=df(x)dx,g(x)+f(x),dg(x)dx

となるため、

Jci=12ci(uj=1ncjej,uk=1nckek)=12(ei,uj=1ncjej)+12(uj=1ncjej,ei)=(uj=1ncjej,ei)()=(u,ei)(j=1ncjej,ei)=(j=1ncjej,ei)(u,ei)=j=1ncj(ej,ei)(u,ei)=j=1ncjδijej2(u,ei)=ciei2(u,ei)

これを0とおいて解くと求まる

ciei2(u,ei)=0ciei2=(u,ei)ci=(u,ei)ei2
参考:内積の微分

内積の微分は

f(x)=(f1(x),,fn(x))g(x)=(g1(x),,gn(x))

とすると

ddxf(x),g(x)=ddx(i=1nfi(x)gi(x))=i=1nddx(fi(x)gi(x))=i=1n(dfi(x)dxgi(x)+fi(x)dgi(x)dx)()=i=1ndfi(x)dxgi(x)+i=1nfi(x)dgi(x)dx=df(x)dx,g(x)+f(x),dg(x)dx

となる

大学物理のフットノート|物理数学|ベクトルの微分公式(基本編)

計量空間Lの直交系{ei},i=1,,nを用いて、任意の元uLを線形結合で等号で

u=c1e1+c2e2++cnen

と表される場合に、係数ciは最小二乗法による近似と同じ解

ci=(u,ei)ei2

になる

証明
u=c1e1++cnen

の両辺とeiの内積をとると、

(u,ei)=c1(e1,ei)++cn(en,ei)=ci(ei,ei)=ciei2

よって

ci=(u,ei)ei2

直交射影#

uを直交系e1,e2,,enの線形結合の集合Vn{ei}の張る部分空間)で近似することを考える。

uc1e1+c2e2++cnen

最小二乗近似したものは

ci=(u,ei)ei2

より

u^=i=1n(u,ei)ei2ei

と書くことができる。u^の幾何学的な解釈としては、uから{ei}の張る部分空間へと下ろした「垂線の足」となる。 このことから、u^{ei}の張る部分空間Vnへの (直交)射影 と呼ぶ。

直交基底#

直交系e1,e2,,enn=でもよい)による、計量空間Lの元uの最小二乗近似u^uに一致するとき(n=のときはnuに収束するとき)、{ei}L直交基底 であるという。

このときLn次元計量空間n=なら 無限次元計量空間 )であるという。

直交基底の線形結合で表すことを 直交展開 という。

直交基底の例:ルジャンドルの多項式

ルジャンドルの多項式Pn(x)

Pn(x)=12nn!dn(x21)n dxn

は区間[1,1]上の連続関数の直交基底である

11Pn(x)Pm(x)dx={22n+1n=m のとき 0nm のとき 

パーセバルの式#

Lを計量空間とする。u,vLについて、正規直交基底{ei},i=1,,n

u=c1e1+c2e2++cnenv=d1e1+d2e2++dnen

と表したとする。このとき、次の パーセバル(・プランシュレル)の式 が成り立つ(n=でも成り立つ)

(u,v)=i=1ncidi,u2=i=1nci2
証明
(u,v)=(i=1nciei,j=1ndjej)=i=1nci(ei,j=1ndjej)()=i=1nj=1ncidj(ei,ej)()=i=1nj=1ncidjδij(e)=i=1ncidi
u2=(u,u)=(i=1nciei,j=1ncjej)=i=1nj=1ncicj(ei,ej)=i=1nj=1ncicjδij=i=1nci2

参考#

金谷健一. (2003). これなら分かる応用数学教室: 最小二乗法からウェーブレットまで.