Google ClassroomGoogle Classroom
GeoGebraGeoGebra Classroom

フーリエ変換をやろう

1.フーリエ変換と常微分方程式

このワークシートはMath by Codeの一部です。 前回まで、常微分方程式の解法とラプラス変換の使い方をさぐった。 今回は、フーリエ変換をやろう。 周期関数の展開としてのフーリエ級数から複素フーリエ級数へ、 非周期の時間関数を周波数関数への変換としてフーリエ変換までの概略は 周波数を抜き出そうにあるので、ここでは省略します。 フーリエ変換が微分方程式とつながる部分を中心にみていきましょう。 <フーリエ変換> f(t)とf'(t)がなめらか、区分的に連続、絶対値の積分が有限なとき、 もとの関数f(t)に対するフーリエ変換 ℱ(f(t))=integral(exp(-ikt) f(t) dt, [-∞, ∞])= ∫e-ikt f(t) dt=F(k) 逆変換は-1(F(k))=1/(2π) integral(exp(ikt) F(k) dk,[ -∞,∞] = 1/(2π)∫eikt F(k) dk=f(t) 時間tの関数f(t)と周波数kの関数F(k)の置き換えになっているね。 ・どちらも、もとの関数にexp(-ikt)かexp(ikt)をかけてkかtで積分するところが同じだね。 不定積分ではなく定積分の形になっているが[-∞, ∞]証明など以外は略記する。 ・フーリエ変換は積分の1種なので線形性がある。重ね合わせの原理ともいうね。 だから、基本となる関数の変換公式の組み合わせで変換ができてしまう。 (例) (if(t>=0,exp(-t),0))=∫0 dt[-∞,0]+∫exp(-(ik+1)t)dt[0,∞]=0 -1/(ik+1)exp(-(ik+1)∞) =1/(1+ik) cが正で、ℱ(exp(-c|t|))=∫exp((c-ik)t)dt[-∞,0]+∫exp(-(c+ik)t)dt[0,∞] =1/(c-ik) +1/(ik+c)exp(-(c-ik)∞) -1/(c+ik)exp(-(c+ik)∞)-( -1/(ik-c)) =1/(c-ik)+1/(c+ik)=2c/(c2+k2) ステップ関数θ(非負で1、負で0) ℱ(θ)=(if(t>=0,1,0))=∫0 dt[-∞,0]+∫exp(-ik)dt[0,∞]=0 -1/ik exp(-ik∞) =1/(ik(+ε)) (εは微小な正数) デルタ関数(δ(x)=1/2π integral(eikx,dx) とするとδ(x)=δ(-x)、δ(t-a)=∞ となるaで∫g(t)δ(t-a)[∞,-∞] dt = g(a) ) ℱ(δ)=∫e-ikt δ(t)dt=e-ik0 =1相似定理 (f(t))=F(k)ならば、aが正のとき(f(at))=1/aF(s/a) ・たたみこみ(convolution)定理 h(x)=integral(f(z)g(x-z)dz)とおくと,ℱ(h)=ℱ(f)ℱ(g)微分変換 f→Yとする。 微分を1階するごとにYにikを1回かける (f')=ik(f)=ikY  (f'')=(ik)2(f)=(ik)2Y  (f(n))=(ik)n(f)=(ik)nY ・積分の変換(微分のs倍の逆だからikで割る?) ・変換の手順 ばねの自然長さy(0)=y0, v(0)=0 の強制振動の 非同次微分方程式y''+k02y=fcos(kft) 特殊解ys(t)を求める。 (ステップ) cos(x)=(e i+e-i)/2,δ(x)=1/2π ∫(eikx,dx)を使う。 ℱ(y_left)=f ∫cos(kft)exp(-ikt) dt =f[ 1/2∫exp(ikft-ikt) +1/2exp(-ikft-ikt)] dt= πf[δ(k-kf)+δ(k+kf)] ℱ(y_right)=(-k2+k02)Y (ステップY) Y=-πf[δ(k-kf)+δ(k+kf)]/(k2-k02) (ステップ-1) f(t)=1/(2π)∫eikt F(k) dkから、 ys(t)は、g(t)=eikt をYの分子のδ(k-kf),δ(k+kf)にかけた積分に1/(2π)をかければよいね。 デルタ関数δ(k-kf),δ(k+kf)は定義からそれぞれ、k=kf,k=-kfのときに∞になり、積分値が1になる。 だからg(t)をかけた積分値はg(kf)*1, g(-kf)*1になるね。 cos(x)=(e i+e-i)/2から、ys(t)=-πf/2π[eikft+e-ikft]/(k2-k02)=f cos(kft)/(k02-k2) 同次式y''+k02y=0の一般解y=(A cosωk0t + B sink0t)がわかっていると、 非同次式y''+k02y=fcos(kft)の一般解はy+ys=(A cosωk0t + B sink0t)+fcos(kft)/(k02-k2) 未定係数法よりも計算が簡単になるわけではないね。

2.フーリエ変換と偏微分方程式

偏微分は多変数関数の微分、積分という文脈で登場するものでした。 たとえば、x,yを位置、tが時間,uが温度のとき、 1次元熱伝導方程式(拡散方程式)  ∂u/∂t=a∂2u/∂x2 または表式は、 ut=auxx  2次元ラプラス方程式  ∂2u/∂x2+∂2u/∂y2=0   表式は、uxx+uyy=0 、または Δ u =0 (ラプラシアン:勾配の発散としての2階偏微分) 1次元波動方程式  ∂2u/∂t2=a2 2u/∂x2 または表式は、uxx=a2uyy=0 ラプラス方程式、波動方程式は変数分離・フーリエサイン級数・重ね合わせ原理などが中心になる。 そこで、フーリエ変換・逆変換の流れが中心となる熱伝導方程式に取り組んでみよう。 <熱伝導> ∂u/∂t=∂2u/∂x2  初期条件u(x,0)=δ(x)=(if x=0,∞,0) (ステップ) u(x,t)をxの関数でtは定数とみて、ℱ(u(x,t))=U(k,t)=Uとおくと、 ・右辺のxによる偏微分ではtは定数扱いなので、uがフーリエ変換でUになる。 ℱ(u_right)=(ik)2U=-k2U ・左辺のtによる偏微分は偏微分の式を関数とみて、フーリエ変換の定義にあてはめよう。 u=u(x,t)とe-ikxはxの関数だから、xによる積分にからむが、それ以外の∂/∂tは定数のように外に出す。 今度はxによる積分はフーリエ変換そのものでUとなるから、 ℱ(u_left)=∫∂u/∂t e-ikx dx=∂/∂t[ ∫u e-ikx dx] =∂U/∂t (ステップU) ∂U/∂t=-k2Uとなる。 Uがtだけの関数とみると、変数分離できる。1/U dU=-k2 dt。両辺を積分して、log|U|=-k2t+C。 積分定数Cはtからみて定数なだけなので、指数形式にするときにkの関数になりうるのでf(k)とする。U(k,t)=f(k)exp(-k2t)となる。だから、U(k,0)=f(k)exp(-0)=f(k)。 一方で、初期条件u(x,0)=δ(x)から、U(k,0)=1だから、結局f(k)=1となる。 U(k,t)=exp(-k2t) (ステップ-1u(x,t)=1/(2π)∫eikx F(k) dk u(x,t)=1/(2π)∫eikx exp(-k2t) dk=1/(2π)∫exp[ -t (k2-ikx/t) ] dk [ ]内を平方完成して、 [-t (k2-ikx/t)]= [ -t(k-xi/2t)^2 +(-x^2/4t)] kの関数でない定数e^(-x^2/4t)を積分の外に出す。 コーシーの積分定理も使い-t(k-xi/2t)^2の積分を-tk^2の積分にする。すると、 u(x,t)=1/(2π)e^(-x^2/4t) ∫-tk^2 dk =1/(2π)e^(-x^2/4t) √(π/t) = 1/(2√(πt)) e ^(-x^2/4t)

熱伝導

3.実装

質問:δ関数をコードで作るにはどうしたらよいでしょうか。 たとえば、f(a,x)=if(|x|<=a/2,1/a,0)という関数を作ると、f(x)の積分が1になります。 aの極限を0にちかづけると、f(x)の極限をg(x)にしたら、g(x)=if(x=0, ∞,0)という、 δ関数になるでしょう。その積分は1です。 f(a,x)はif文では変数として扱ってくれないので、Piecewise文で場合分けします。 var()文で、記号としてだけでなく、ゼロでない変数として定義しましょう。 Fをフーリエ変換しますが、いきなり∞を使った定積分はできないので、aを使って定積分します。 そのaをLimit文を使い、式と極限値を求め、等式Eq()の左辺と右辺に与えればよいね。 [IN]python=============================== from sympy import * from sympy.abc import a, x, k def f(a, x): return Piecewise((1/a, abs(x) <= a/2), (0, abs(x) > a/2)) plot(f(2, x), (x, -5, 5), ylim = (-0.5, 1)); var('a k', nonzero = True) F = integrate(1/a*exp(-I*k*x), (x, -a/2, a/2)) F.simplify() Eq(Limit(F.simplify(), a, 0),  Limit(F.simplify(), a, 0).doit()) #[OUT]================================
Image
Image

δ関数のイメージ