View
1
Download
0
Category
Preview:
Citation preview
現象と数学 12微分方程式の数値計算
~ 1次元波動方程式を題材にして ~
桂田 祐史
明治大学現象数理学科
2014年 9月 18日
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 1 / 20
はじめに
当初の予定では
音の作る模様: 微分方程式によるクラドニ図形の解析
という内容の講義をする予定でしたが、各自で数値計算を試せる方が良い、と考え直して、内容を入れ替えます。
この講演資料 (20140918.pdf) は
http://nalab.mind.meiji.ac.jp/~mk/20140918/
にあるので、保存してプレビューで表示し、適宜コピー&ペーストして使って下さい。
Mathematica を使います。
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 2 / 20
今日の主役 — 1次元波動方程式
張られた弦の振動は次の 1次元波動方程式 (wave equation) で記述できる。
(WE)∂2u
∂t2(x , t) = c2
∂2u
∂x2(x , t).
u(x , t) 釣り合いの状態で x 軸上の点 x にある弦の、時刻 t での変位
c 正定数 (線密度 ρ, 張力 T が与えられると c =√
Tρ )
なぜこうなる?
… 今日は省略∂2u∂x2は、x 7→ u(x , t) のグラフが x の近傍で下に凸なら正、上に凸なら負
で、復元する向きの力が働くことを意味する
アナロジー:d2x
dt2= −ω2x (単振動の方程式)
この解は x(t) = A cosωt + B sinωt
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 3 / 20
今日の主役 — 1次元波動方程式
張られた弦の振動は次の 1次元波動方程式 (wave equation) で記述できる。
(WE)∂2u
∂t2(x , t) = c2
∂2u
∂x2(x , t).
u(x , t) 釣り合いの状態で x 軸上の点 x にある弦の、時刻 t での変位
c 正定数 (線密度 ρ, 張力 T が与えられると c =√
Tρ )
なぜこうなる? … 今日は省略∂2u∂x2は、x 7→ u(x , t) のグラフが x の近傍で下に凸なら正、上に凸なら負
で、復元する向きの力が働くことを意味する
アナロジー:d2x
dt2= −ω2x (単振動の方程式)
この解は x(t) = A cosωt + B sinωt
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 3 / 20
ダランベール (d’Alembert) の解
任意の関数 f , g に対して
(D) u(x , t) := f (x − ct) + g(x + ct)
は (WE) ∂2u∂t2
= c2 ∂2u
∂x2の解である。
問 1 確認せよ。 ヒント: 一般に {(F (ax + b)}′ = aF ′(ax + b)
実は逆に (WE) の任意の解 u は適当な f , g を取れば (D) の形に表せる。どうして? … 今日は省略 (これも微積分で済む話だけど)
— つまり (D) は (WE) の一般解である。ダランベールの解と呼ばれる。
f (x − ct) は時刻 t = 0 で f (x) だったものが速度 c で動く。g(x + ct) は時刻 t = 0 で g(x) だったものが速度 −c で動く。
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 4 / 20
ダランベール (d’Alembert) の解
任意の関数 f , g に対して
(D) u(x , t) := f (x − ct) + g(x + ct)
は (WE) ∂2u∂t2
= c2 ∂2u
∂x2の解である。
問 1 確認せよ。 ヒント: 一般に {(F (ax + b)}′ = aF ′(ax + b)
実は逆に (WE) の任意の解 u は適当な f , g を取れば (D) の形に表せる。どうして?
… 今日は省略 (これも微積分で済む話だけど)
— つまり (D) は (WE) の一般解である。ダランベールの解と呼ばれる。
f (x − ct) は時刻 t = 0 で f (x) だったものが速度 c で動く。g(x + ct) は時刻 t = 0 で g(x) だったものが速度 −c で動く。
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 4 / 20
ダランベール (d’Alembert) の解
任意の関数 f , g に対して
(D) u(x , t) := f (x − ct) + g(x + ct)
は (WE) ∂2u∂t2
= c2 ∂2u
∂x2の解である。
問 1 確認せよ。 ヒント: 一般に {(F (ax + b)}′ = aF ′(ax + b)
実は逆に (WE) の任意の解 u は適当な f , g を取れば (D) の形に表せる。どうして? … 今日は省略 (これも微積分で済む話だけど)
— つまり (D) は (WE) の一般解である。ダランベールの解と呼ばれる。
f (x − ct) は時刻 t = 0 で f (x) だったものが速度 c で動く。g(x + ct) は時刻 t = 0 で g(x) だったものが速度 −c で動く。
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 4 / 20
ダランベールの解を見る
Mathematica でやってみよう� �Clear[p,f,g,c,u];
p[x_]:=If[Abs[x]<1, (x^2-1)^4, 0];
f[x_]:=p[10(x-0.2)];
g[x_]:=-2*p[10(x-0.7)];
c=1;
u[x_,t_]:=f[x-c*t]+g[x+c*t];
Animate[Plot[u[x,t],{x,0,1},PlotRange->{-2,2}],{t,0,2}]� �p[], f[], g[] のグラフも描いてみよう (PlotRange-> が要るかも)。
-2 -1 1 2
0.2
0.4
0.6
0.8
1.0
0.2 0.4 0.6 0.8 1.0
-2
-1
1
2
Figure: p のグラフ と u[ ,0] のグラフ
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 5 / 20
有限の長さの弦では…
実は上の話は無限の長さの弦の話。有限の長さの弦では、弦の端で波の反射が起こる。
長さ 1の弦の両端を固定する場合
∂2u
∂t2(x , t) = c2
∂2u
∂x2(x , t) (0 < x < 1, t > 0)(WE)
u(0, t) = u(1, t) = 0 (t > 0)(DBC)
u(x , 0) = ϕ(x),∂u
∂t(x , 0) = ψ(x) (0 ≤ x ≤ 1)(IC)
WE wave equation (波動方程式)DBC Dirichlet boundary condition (ディリクレ境界条件)IC initial condition (初期条件)
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 6 / 20
フーリエ級数による解 — 答をカンニング
フーリエ級数を使えば解が書ける:
u(x , t) =∞∑n=1
(an cos cnπt + bn sin cnπt) sin nπx ,
an = 2
∫ 1
0ϕ(x) sin nπx dx , bn =
2
cnπ
∫ 1
0ψ(x) sin nπx dx
どうしてこうなる?
今日は説明しない (短時間ではとても説明しきれない)。ひょっとするとさわりは聴いた人もいるかも。奇跡のような話なので、一度はゆっくり勉強することを勧める。
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 7 / 20
フーリエ級数による解 — 答をカンニング
フーリエ級数を使えば解が書ける:
u(x , t) =∞∑n=1
(an cos cnπt + bn sin cnπt) sin nπx ,
an = 2
∫ 1
0ϕ(x) sin nπx dx , bn =
2
cnπ
∫ 1
0ψ(x) sin nπx dx
どうしてこうなる?
今日は説明しない (短時間ではとても説明しきれない)。ひょっとするとさわりは聴いた人もいるかも。奇跡のような話なので、一度はゆっくり勉強することを勧める。
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 7 / 20
簡単な場合のフーリエ級数による解を見てみる
c = 1, ϕ(x) = sinπx , ψ(x) =3π
2sin 3πx
とすると
a1 = 1, b3 =1
2, その他の an=0, bn = 0
となって級数は実質 2項だけの和になる:
u(x , t) = cosπt sinπx +1
2sin 3πt sin 3πx .
Mathematica で見てみよう� �Clear[u];
a = 1; b = 1/2; m = 1; n = 3;
u[x_,t_]:=a Cos[m Pi t]Sin[m Pi x]+b Sin[n Pi t]Sin[n Pi x];
Animate[Plot[u[x,t],{x,0,1},PlotRange->{-2,2}],
{t,0,2},AnimationRate->0.2]� �注: u(x , t) は t について周期 2 なので {t,0,2} で十分。桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 8 / 20
反省
簡単?
ϕ, ψ が特殊だったから簡単になっただけ。ϕ, ψ を勝手に取ると (例えば ϕ(x) = p(5(x − 0.2))− 2p(5(x − 0.7)) 等)、無限個の項の和の計算が必要で計算は難しくなる。
1次元波動方程式の初期値境界値問題は、厳密解がフーリエ級数で表す公式があって解決、ということになっているが、実際の解の様子を見るにはそれほど使いやすくない。
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 9 / 20
反省
簡単?
ϕ, ψ が特殊だったから簡単になっただけ。ϕ, ψ を勝手に取ると (例えば ϕ(x) = p(5(x − 0.2))− 2p(5(x − 0.7)) 等)、無限個の項の和の計算が必要で計算は難しくなる。
1次元波動方程式の初期値境界値問題は、厳密解がフーリエ級数で表す公式があって解決、ということになっているが、実際の解の様子を見るにはそれほど使いやすくない。
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 9 / 20
差分法 (1) 格子点
考えている範囲 {(x , t) | 0 ≤ x ≤ 1, t ≥ 0} を格子に分割し、格子点
(xi , tn), xi = i∆x , tn = n∆t, ∆x =1
N, ∆t > 0
での値 uni = u(xi , tn) を求めることを考える。
0 1 x
t
x0 = 0, xN = 1, xN/2 = 1/2, t0 = 0 等に注意。
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 10 / 20
差分法 (2) 差分方程式
(WE) ∂2u∂t2
= c2 ∂2u
∂x2の導関数を差分商で近似すると
un+1i − 2uni + un−1
i
∆t2= c2
uni+1 − 2uni + uni−1
∆x2.
分母を払って λ := c∆t
∆xとおき、移項すると
(♯) un+1i = 2
(1− λ2
)uni + λ2
(uni+1 + uni−1
)− un−1
i (1 ≤ i ≤ N − 1).
(DBC) u(0, t) = u(1, t) = 0 から u(x0, tn) = u(xN , tn) = 0 なので
(♭) un0 = unN = 0.
n = 0 と n = 1 に対して uni が求まれば、後は (♯), (♭) を用いてn = 2, 3, . . . の順に計算出来る。(Cf. フィボナッチ数列 an+1 = an+an−1)
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 11 / 20
差分法 (2) 差分方程式
(WE) ∂2u∂t2
= c2 ∂2u
∂x2の導関数を差分商で近似すると
un+1i − 2uni + un−1
i
∆t2= c2
uni+1 − 2uni + uni−1
∆x2.
分母を払って λ := c∆t
∆xとおき、移項すると
(♯) un+1i = 2
(1− λ2
)uni + λ2
(uni+1 + uni−1
)− un−1
i (1 ≤ i ≤ N − 1).
(DBC) u(0, t) = u(1, t) = 0 から u(x0, tn) = u(xN , tn) = 0 なので
(♭) un0 = unN = 0.
n = 0 と n = 1 に対して uni が求まれば、後は (♯), (♭) を用いてn = 2, 3, . . . の順に計算出来る。(Cf. フィボナッチ数列 an+1 = an+an−1)
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 11 / 20
差分法 (3) 初期条件から u0i , u1i を定める
u(x , 0) = ϕ(x) から
u0i = u(xi , t0) = ϕ(xi ) = ϕ(i∆x).
∂u∂t (x , 0) = ψ(x) から
u1i = u(xi , t1) = u(xi ,∆t)
≒ u(xi , 0) + ∆t∂u
∂t(xi , 0)
= ϕ(xi ) + ∆t ψ(xi ).
u0i , u1i は簡単に計算出来ることが分かる。
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 12 / 20
Mathematica で差分解を計算して見てみよう(あまりきれいなプログラムとは言えない…)
Clear[p,f,phi,psi,nextu];
p[x_] := If[Abs[x] < 1, (x^2 - 1)^4, 0];
f[x_] := p[10(x-0.5)];
phi[x_] := f[x];
psi[x_] := 0;
NN = 100; c = 1; lambda = 1; dx = 1.0/NN; dt = lambda*dx/c;
lambda2=lambda^2;
u = Table[phi[i*dx], {i, 0, NN}];
oldu = u;
u = oldu + dt*Table[psi[i*dx], {i, 0, NN}];
nextu[n_] :=
(v = 2*(1 - lambda2)*Take[u, {2, NN}]
+ lambda2*(Take[u, {3, NN + 1}] + Take[u, {1, NN - 1}])
- Take[oldu, {2, NN}];
oldu = u;
u = Append[Prepend[v, 0], 0]
);
Animate[ListPlot[nextu[n], Joined -> True, PlotRange -> {-1.1, 1.1}],
{n, 1, Infinity},AnimationRunning->False]
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 13 / 20
プログラムの簡単な解説
(♯) から un+1i (1 ≤ i ≤ N − 1) が求まるが、v に入れておく。
v1v2...
vN−1
= 2(1− λ2)
un1un2...
unN−1
+ λ2
un0un1...
unN−2
+
un2un3...unN
−
un−11
un−12...
un−1N−1
,
(♭) から、最初と最後に 0 を埋めれば良いことが分かる:
un+10
un+11
un+12...
un+1N−1
un+1N
=
0v1v2...
vN−1
0
.
Take[] (リストの部分を取る), Append[] (リストの末尾に加える),Prepend[] (リストの先頭に加える) などは Mathematica のヘルプ参照桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 14 / 20
レポート課題 問 2
( 問 1 も忘れずに)
f (x) = p(10(x − 0.5)) で定まる f は f (x) = 0 (∣∣x − 1
2
∣∣ > 0.1) を満たすことに注意する。
問 2 t = 0 のとき f に一致して、最初のうちは右方向に進む波、つまり
(⋆) u(x , t) = f (x − ct) (t が小さいうち)
となる解 u をシミュレートしてみたい。(波が端に到達しないうちは、無限の長さの弦と同じで、こういう式で表される解があるだろう。)
(1) (⋆) と (IC) を用いて、ϕ と ψ を f で表せ。
(2) プログラムの phi[], psi[] を、(1) で求めた ϕ, ψ を計算するように書き換える (p の導関数が必要になる)。
(3) プログラムを実行して、どうなるか調べ、簡単に説明する。
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 15 / 20
レポートの提出の仕方, 取り組み方
レポート提出 BOX に投函する。
問 1, 問 2 (1) は微積分の計算のみで出来る。関係する式をノートに書き並べて考えること。
問 2 (2) では、f の導関数が必要になる。f (x) = p(10(x − 0.5)) と、
p の定義式 p(x) =
{(x2 − 1)4 (|x | < 1)0 (|x | ≥ 1)
を思い出して、ϕ と ψ
をどう計算すれば良いか調べる。phi[], psi[] がその ϕ, ψ を計算するようにプログラムを書き換える (nextu[] をいじる必要はないはず)。
プログラムの書きかえが正しいかどうか、実行してみれば明らかに分かる。
この問題は決して Mathematica 向きというわけではないので (苦し紛れのプログラム)、C, Java, Processing 等々、自分の好きなプログラミング言語でやっても構わない (サンプル・プログラムをたたき台にする方が早く試せるとは思うけれど)。桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 16 / 20
もし余裕があれば (あるいは後から) もっと遊べる
g を自由に与えて、u(x , t) = f (x − ct) + g(x + ct) という右に進む成分と左に進む成分がある場合を計算してみよう。
端が自由端である場合、つまり (DBC) の代わりに Neumann 境界条件
(NBC)∂u
∂x(0, t) =
∂u
∂x(1, t) = 0
である場合を計算してみよ。波の反射の様子がどのように変わるか。
上では λ を 1 としたが、その前後の値に変えて計算してみる。
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 17 / 20
まとめ
1次元波動方程式を題材に微分方程式のシミュレーションを行なった。
無限の長さの弦では反射が起こらないので、数値計算が必要ないくらい簡単な公式 (ダランベールの公式) がある。
有限の長さの弦の場合、端で波の反射が起こる。フーリエ級数で解が表せるが、無限項必要になるのが普通であり、計算は簡単ではない。
差分法により能率良く解が計算出来て、(Fourier 級数ではやりにくかった) 色々なシミュレーションが可能である。
(数値計算の一番の利点は、厳密解が求まらないような場合にも、数値シミュレーションが出来ることにあると考えられるが、厳密解が求まっている場合にも有用である。)
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 18 / 20
まとめ
1次元波動方程式を題材に微分方程式のシミュレーションを行なった。
無限の長さの弦では反射が起こらないので、数値計算が必要ないくらい簡単な公式 (ダランベールの公式) がある。
有限の長さの弦の場合、端で波の反射が起こる。フーリエ級数で解が表せるが、無限項必要になるのが普通であり、計算は簡単ではない。
差分法により能率良く解が計算出来て、(Fourier 級数ではやりにくかった) 色々なシミュレーションが可能である。
(数値計算の一番の利点は、厳密解が求まらないような場合にも、数値シミュレーションが出来ることにあると考えられるが、厳密解が求まっている場合にも有用である。)
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 18 / 20
おまけ: 桂田の研究室では
比較的最近の (数学科)卒研生の卒業研究レポートのタイトルから
「楕円体の酒場」3次元波動方程式の解の数値計算。楕円形の酒場では盗み聞きが出来るというけれど…
「代用電荷法による正則関数の有理関数近似」正則関数 (複素関数論の主役) を
∑Nk=1
Qk
z−ζkという形の (Cauchy積分公式
似の) 関数で近似する方法の数学的解析。
「Ritz 法による Chladni 図形の数値計算」
板の振動もある種の波動方程式∂2u
∂t2= −c2△2u に従うが、板の上に粉を
まいたときに現れるクラドニ図形と呼ばれるパターンを数値計算することで法則性を調べる。
「建部賢弘の日本最初の冪級数展開」江戸時代の和算家は数値計算をすることで色々な数学的事実を「帰納的に解明した」 (証明したわけではない)。彼らのした仕事を解読する。
実際に数値計算を行い、本当だろうか、なぜだろう、に迫る。
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 19 / 20
差分商
f ′(x) = limh→0
f (x + h)− f (x)
hから示唆されるように、|h| が小さいとき
f ′(x) ≒ f (x + h)− f (x)
h(前進差分近似)
と期待できる。同様に
f ′(x) ≒ f (x)− f (x − h)
h(後退差分近似),
f ′(x) ≒ f (x + h/2)− f (x − h/2)
h(中心差分近似), . . .
2階微分 f ′′(x) についても
f ′′(x) ≒ f (x + h)− 2f (x) + f (x − h)
h2.
(中心差分近似を 2回続けたf (x+h/2+h/2)−f (x−h/2+h/2)
h− f (x+h/2−h/2)−f (x−h/2−h/2)
hh )
桂田 祐史 (明治大学現象数理学科) 現象と数学 12 微分方程式の数値計算 2014 年 9 月 18 日 20 / 20
Recommended