フーリエ級数展開を矩形関数から理解する
4つの矩形関数$ f_0,f_1,f_2,f_3 を考える
$ f_0=\begin{bmatrix}1\\1\\1\\1\end{bmatrix}, f_1=\begin{bmatrix}1\\1\\-1\\-1\end{bmatrix}
https://gyazo.com/39cb0a76f2efa70bc1c9de44bbe4f9cb https://gyazo.com/2ac106076b4b8054a81420749446ffd9
$ f_2=\begin{bmatrix}1\\-1\\-1\\1\end{bmatrix}, f_3=\begin{bmatrix}1\\-1\\1\\-1\end{bmatrix}
https://gyazo.com/dcb5e5a8a8c6c90464b834a00ff0d623 https://gyazo.com/cc4e52b4071262284d8f26974dbbbd6f
4つの数値を表現する、任意のデジタル関数$ F はこの4つの矩形関数$ f_0,f_1,f_2,f_3 で展開することができる
矩形関数の組を直交関係$ \int f_if_jdx=0 \;(i\neq j) をみたすように定めたから
より細かいデジタル関数についても同様に展開できる
$ F=\sum_na_nf_n のようにして、より細かい矩形関数を考えればよい
係数$ a_n は連立方程式を解けば得られる
個数が多いと煩雑になる
直交関係$ \int f_if_jdx=0 \;(i\neq j) を利用すると容易に係数$ a_n を得られる
$ \int Ff_idx を考えればよい
$ \int f_if_jdx=0 \;(i\neq j) より、$ \int a_if_if_idx 以外の項が0になるから
実際:
$ \int Ff_idx=\int\left(\sum_na_nf_n\right)f_idx=\sum_n\int a_nf_nf_idx=\sum_na_n\int f_nf_idx
$ \iff \int Ff_idx = a_i\int (f_i)^2dx
$ \iff a_i = \frac{\int Ff_idx}{\int (f_i)^2dx}
のようにして$ a_i を求められる
デジタル関数だけではなく、一般の関数も表せるようにしたい
Prop.
足し合わせで作っていった関数ともとの関数との間の誤差を全区間で合計した値が、足し合わせを増やすにつれて小さくなり、無限個足し合わせたときに、誤差が全区間を通じて0になってくれる
ことを確認すればよい
直観的に考える
区間$ T に対して
1. 関数の平均値をとるようにする
係数$ a_0 の役割
$ \int_0^TFdx=a_0\int_0^Tf_0dx \iff a_0=\frac{1}{T}\int_0^TFdx
$ f_0=\begin{bmatrix}1&\cdots&1\end{bmatrix}^T なので$ \int_0^Tf_0dx=T となるから
2. 平均値に凹凸をつける
1. 係数$ a_1 を定める
関数$ F の$ a_0 からのずれの値$ (F-a_0) が、$ a_1f_1 が囲む面積と一致するように$ a_1 を定めればよい
積分値で考えられるように、$ (F-a_0)_正-(F-a_0)_負 になるようにする
$ \frac{T}{2} で区切って前半部分で$ (F-a_0)<0 になる場合を考える:
$ a_1T = -\int_0^{\frac{T}{2}}(F-a_0)dx+\int_{\frac{T}{2}}^T(F-a_0)dx
$ = -\int_0^{\frac{T}{2}}Fdx+\int_{\frac{T}{2}}^TFdx
$ = -\int_0^TFf_1dx
$ f_1 をかける操作は、前半と後半の区間で$ F の符号を反転させる操作と同値
$ 1,-1 の矩形関数を考えているから
$ \iff a_1= \frac{1}{T}\int_0^TFf_1dx
係数$ a_n は負の数が許されているので、マイナス符号は係数に吸収させることができる
2. 係数$ a_n を定める
同様の議論で、$ a_n は:
$ a_n= \frac{1}{T}\int_0^TFf_ndx で得られる
よりたくさん分割して考える必要があるだけ
あらゆる凸凹のパターンを、直交関係$ \int f_if_jdx=0 \;(i\neq j) をみたす矩形関数$ n 本(分割の個数)で表せる
区間$ T を$ n 分割すれば$ 2^n 本の矩形関数が得られるが、直交関係をみたすように選べば$ n 本の矩形関数であらゆる凸凹のパターンを表せる
n次元の行列に対して、固有値は高々n個しか存在しない
固有ベクトルも高々n個しか存在しない
三角関数は直交関係をみたしているので、同様のことが可能 しかもより便利
連続関数である
微分2回で交代する
常に直交関係がみたされている
矩形関数でやっていたような、$ \int f_if_jdx=0 \;(i\neq j) をみたす関数を上手に選んでくる作業が不要
code:plot_rect.jl
using Plots
rect1(x) = 1
rect2(x) = 1/2<x ? -1 : 1
rect3(x) = 1/4<x<3/4 ? -1 : 1
rect4(x) = 1/4<x<2/4 ? -1 : 3/4<x ? -1 : 1
plt = plot(rect1, 0, 1, ylims=(-1.1,1.1), framestyle=:origin, legend = false)
# savefig(plt, "rect1.png")