数値解析入門II

数値解析入門 II
横田 壽
i
目次
第 6 章 微分方程式
6.1
6.2
6.3
6.4
6.5
. . . . . . . .
Euler 法 . . . . . . . . . .
高次 Taylor 法 . . . . . . .
Runge-Kutta 法 . . . . . .
Runge-Kutta-Fehlberg 法
初期値問題
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
第 7 章 行列を用いた反復法
1
1
4
10
13
17
23
7.1
7.2
7.3
ベクトルノームと行列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7.4
誤差限界と反復法の改良 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
固有値と固有ベクトル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
反復法による連立方程式の解法 . . . . . . . . . . . . . . . . . . . . . . . . 35
第 8 章 近似理論
8.1
8.2
49
離散最小2乗法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
直交系多項式と最小2乗近似 . . . . . . . . . . . . . . . . . . . . . . . . . . 57
8.3
8.4
8.5
8.6
Chebyshev の多項式と整級数の経済化
有理関数近似 . . . . . . . . . . . . . .
三角多項式近似 . . . . . . . . . . . . .
高速 Fourier 変換 . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
第 9 章 常微分方程式の2点境界値問題
9.1
9.2
9.3
9.4
狙い撃ち法 (Shooting Method) . . . . . . . . . . . . . . . . . . . . . . . .
非線形問題における狙い撃ち法 . . . . . . . . . . . . . . . . . . . . . . . .
線形境界値問題における差分法 . . . . . . . . . . . . . . . . . . . . . . . .
Rayleigh-Ritz 法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
第 10 章 偏微分方程式
10.1 3つの偏微分方程式
10.2 楕円型偏微分方程式
63
69
77
84
95
95
100
104
109
117
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
ii
10.3 放物線型偏微分方程式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
10.4 双曲線型偏微分方程式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
10.5 有限要素法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
第 11 章 参考
159
11.1 Navier-Stokes の方程式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
11.2 Bernoulli の式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
1
第 6 章 微分方程式
微分方程式のテキストでは,微分方程式を厳密解く解法について学ぶ。しかし,現実に発
生する物理現象をモデル化する微分方程式は,ほとんどの場合厳密解を求めることがで
きない。そこで,ここでは,できる限り厳密解に近い近似解を求める方法について学んで
いく。
6.1
初期値問題
微分方程式は,理学や工学で起きる現象を定式化するのに用いられる。このような現象
はある変数の変化に伴い,別の変数に変化が起きるという形で定式化でき,ほとんどの場
合,現象の発生時に与えられる条件(初期条件)を満たす解を求めることになる。
定式化されてできた微分方程式を解こうとすると,多くの場合厳密解を求めることがで
きない。そこで,一般に次の 2 通りのことが行われる。1つは,モデル式の変数を少なく
して式を簡単にし,何とか微分方程式のテキストで学んだ形に直し,その式の厳密解を求
める方法である。もう 1 つの方法は,モデル式はそのままで,近似解を求める方法である。
2 番目の方法がここで学ぶ方法で,よりよい結果と誤差に関する情報を得ることができる
ので,一般に用いられる方法である。
ここで用いる方法は,初期値問題に対して連続的な近似を求める方法ではない。それよ
りも,ある決められた点における近似を求める方法である。決められた点は,等間隔に置
かれた点であることがしばしばある。そして,この点と点の間での近似が必要な場合は,
補間法を用いることになる。
初期値問題の近似を考える前に,微分方程式に関する理論が必要である。初期値問題の
近似解を求める前に,初期値をほんの少し変えただけで,結果が大きく異なるようなとき,
初期値問題は不適切問題 (ill-posed problem) であるといい,初期値の少しの変化に対
し,結果も少しの変化が起きる場合,適切問題 (well-posed problem) という。そこで,
与えられた問題が適切問題か判断する条件について学んでおく。
定義 6.1 任意の点 (t, y1 ), (t, y2 ) ∈ D ⊂ R2 において,
|f (t, y1 ) − f (t, y2 )| ≤ L|y1 − y2 |
2
第 6 章 微分方程式
満たす定数 L が存在するとき,関数 f (t, y) は y において Lipschitz 条件 (Lipschitz
condition) を満たすという。また,定数 L を Lipschitz 定数 (Lipschitz constant) と
いう。
定理 6.1 関数 f (t, y) が単連結領域 D ⊂ R2 で定義され,全ての (t, y) ∈ D で
|
∂f
(t, y)| ≤ L
∂y
が成り立つならば,f は D 上で変数 y において Lipschitz 条件を満たす。
証明 (t, y1 ), (t, y2 ) を D 内の任意の点とすると,
∂f
f (t, y1 ) − f (t, y2 )
=
(t, ξ) ≤ L
y1 − y2
∂y
よって,f は y において Lipschitz 条件を満たす。
定理 6.2 関数 f (t, y) は D = {(t, y) : a ≤ t ≤ b, −∞ < y < ∞} において連続でかつ変数
y において Lipschitz 条件を満たすならば,初期値問題
y (t) = f (t, y), a ≤ t ≤ b, y(a) = α
は a ≤ t ≤ b で一意の解 y(t) を持つ。
例 6.1 初期値問題
y = 1 + t sin (ty), 0 ≤ t ≤ 2, y(0) = 0
において,f (t, y) = 1 + t sin(ty) とおき,
f (t, y2 ) − f (t, y1 )
y2 − y1
を考える。f (t, y) は変数 y に対して微分可能なので,平均値の定理を用いると
f (t, y2 ) − f (t, y1 )
∂
=
f (t.ξ) = t2 cos(ξt)
y2 − y1
∂y
を満たす ξ ∈ (y1 , y2 ) が存在する。よって
|f (t, y2 ) − f (t, y1 )| = |y2 − y1 ||t2 cos(ξt)| ≤ 4|y2 − y1 |
となり Lipschitz 条件を満たすので,定理 6.2 より,この初期値問題は一意の解を持つ。
定義 6.2 初期値問題
dy
= f (t, y), a ≤ t ≤ b, y(a) = α
dt
が次の条件を満たすとき,適切問題であるという。
6.1. 初期値問題
3
1. 一意の解 y(t) が存在する。
2. どんな正の数 ε > 0 に対しても,定数 k(ε) が存在し,|ε0 | < ε かつ δ(t) が連続で
|δ(t)| < ε ならば,
dz
= f (t, z) + δ(t), a ≤ t ≤ b, z(a) = α + ε0
dt
|z(t) − y(t)| < k(ε)ε, a ≤ t ≤ b
を満たす一意の解 z(t) が存在する。
ここで,
dz
= f (t, z) + δ(t), a ≤ t ≤ b, z(a) = α + ε0
dt
を摂動問題 (perturbed problem) という。この式は,微分方程式に発生する誤差 δ(t)
と初期値に含まれる誤差 ε0 の存在の可能性を表している。
数値解析法では,常にまるめ誤差が発生するので,摂動問題を解くことを考えている。
また,微分方程式が適切問題でない限り,数値解がよい近似になることは難しい。
次の定理は,微分方程式が適切問題であるための十分条件を与えている。
定理 6.3 関数 f (t, y) は D = {(t, y) : a ≤ t ≤ b, −∞ < y < ∞} において連続で,かつ変
数 y において Lipschitz 条件を満たすならば,初期値問題
y (t) = f (t, y), a ≤ t ≤ b, y(a) = α
は適切問題である。
例題 6.1 D = {(t, y) : 0 ≤ t ≤ 1, −∞ < y < ∞} のとき,初期値問題
dy
= y − t2 + 1, 0 ≤ t ≤ 2, y(0) = 0.5
dt
は適切問題か調べよ。
解 定理 6.1 より,|∂f /∂y| ≤ L ならば,f は Lipschitz 条件を満たす。
|
∂(y − t2 + 1)
|=1
∂y
より,関数 f (t, y) = y − t2 + 1 は Lipschitz 定数1で Lipschitz 条件を D 上で満たす。さ
らに,関数 f (t, y) = y − t2 + 1 は D 上で連続。よって定理 6.3 より,この初期値問題は
適切問題である。
演習問題 6.1
4
第 6 章 微分方程式
1. 次の微分方程式は一意の解を持つことを示し,解を求めよ。
(a) y = y cos t, 0 ≤ t ≤ 1, y(0) = 1
(b) y = 2t y + t2 et , 1 ≤ t ≤ 2, y(1) = 0
(c) y = 2t y + t2 et , 1 ≤ t ≤ 2, y(1) =
√
2e
2. 次の問いに答えよ。
(a) f (t, y) = t2 y + 1 は領域 D = {(t, y) : 0 ≤ t ≤ 1, −∞ < y < ∞} 上で Lipschitz 条件
を満たすか。
(b) f (t, y) = 1 − y は領域 D = {(t, y) : 0 ≤ t ≤ 1, −∞ < y < ∞} 上で Lipschitz 条件を
満たすか。
6.2
Euler 法
Euler 法はあまり実用的ではないが,その理論の簡単さと,より良い方法への足がかか
りとなるので紹介しておく。ここでの目的は,適切問題の近似解を得ることであるので,
次の適切問題を考える。
dy
= f (t, y), a ≤ t ≤ b, y(a) = α
dt
(6.1)
ここで,全ての t に対する解 y(t) の近似を求めるのではなく,いくつかの t の値に対する
解 y(t) の近似を求める。これらの t を区間 [a, b] のメッシュ点 (mesh points) または格
子点という。これらのメッシュ点における解の近似が得られれば,その他の点における解
の近似は補間で求めることができる。
まず,区間 [a, b] においてメッシュ点は同じ間隔で与えれているとする。つまり,全て
の i = 0, 1, 2, . . . , N に対して
ti = a + ih
が成り立つとする。このとき,h = (b − a)/N を刻み幅 (step size) という。ここで,
y = f (t, y) は点 t における関数 y の傾きを表していることに注意し,Euler 法を導いて
みる。
1.
y(t + ∆t) − y(t)
yi+1 − yi
dy
= lim
≈
∆t→0
dt
∆t
ti+1 − ti
より
yi+1 − yi
≈ f (ti , xi )
ti+1 − ti
6.2. Euler 法
5
となる。これより,
yi+1 ≈ yi + hf (ti , xi )
2. まず,t0 = a における y0 の値は y(a) = α。t1 = a + h における y の値 y(t1 ) は y の
傾き dy(t0 )/dt に幅 h を掛けた値で近似すると,
y(t1 )
≈ y(t0 ) + y (t0 )h = y(t0 ) + y (t0 )(t1 − t0 )
y(t2 )
≈ y(t1 ) + y (t1 )h = y(t1 ) + y (t1 )(t2 − t1 )
..
.
y(ti+1 )
≈ y(ti ) + y (ti )h = y(ti ) + y (ti )(ti+1 − ti )
となる。
次に Taylor の定理を用いて,Euler 法を導く。式 (6.1) において解 y(t) は 2 回微分
可能であるとする。よって,
1
y(ti+1 ) = y(ti ) + y (ti )(ti+1 − ti ) + y (ξi )(ti+1 − ti )2
2
を満たす ξi ∈ (ti , ti+1 ) が存在する。ここで,h = ti+1 − ti より
y(ti+1 ) = y(ti ) + hy (ti ) +
h2
y (ξi )
2
ここで,y(t) は式 (6.1) を満たすので,
y(ti+1 ) = y(ti ) + hf (ti , y(ti )) +
h2
y (ξi )
2
(6.2)
となる。Euler 法はこの式から剰余項を消し,wi ≈ y(ti ) となる wi を求めることで
ある。よって,それぞれの i = 0, 1, . . . , N − 1 に対し
w0
=
α
wi+1
=
wi + hf (ti , wi )
と定義する。
式 wi+1 = wi + hf (ti , wi ) は Euler 法に関する差分方程式 (difference equation) という。
Euler 法アルゴリズム
初期値問題
y = f (t, y), a ≤ t ≤ b, y(a) = α
の解を区間 [a, b] における N + 1 個の等間隔な点で近似する。
6
第 6 章 微分方程式
====================================================
入力 端点 a, b; 整数 N ; 初期条件α.
出力 近似解 w.
(1)
h ← (b − a)/N ;
t ← a;
w ← α;
OUTPUT(t, w).
(2)
for i = 1, 2, . . . , N do (3), (4).
(3)
w ← w + hf (t, w);
t ← a + ih.
(4)
OUTPUT(t, w).
(5)
STOP.
===================================================
例 6.2 Euler 法を用いて初期値問題
y = y − t2 + 1, 0 ≤ t ≤ 2, y(0) = 0.5
の解を N = 10 個の点で近似すると,h = 0.2, ti = 0.2i, w0 = 0.5 より
wi+1
=
wi + h(wi − t2i + 1) = wi + 0.2[wi − 0.04i2 + 1]
=
1.2wi − 0.008i2 + 0.2
が,それぞれの i = 0, 1, . . . , 9 で成り立つ。厳密解は y(t) = (t + 1)2 − 0.5et より,次の表
を得る。
ti
wi
yi = y(ti )
|yi − wi |
0.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
1.6
1.8
0.5000000
0.8000000
1.1520000
1.5504000
1.9884800
2.4581760
2.9498112
3.4517734
3.9501281
4.4281538
0.5000000
0.8292986
1.2140877
1.6489406
2.1272295
2.6408591
3.1799415
3.7324000
4.2834838
4.8151763
0.0000000
0.0292986
0.0620877
0.0985406
0.1387495
0.1826831
0.2301303
0.2806266
0.3333557
0.3870225
2.0
4.8657845 5.3054720 0.4396874
この表からも分かるように,誤差は t の成長と共に少しずつ大きくなっているが,誤差の
成長は1次よりも小さい。これは Euler 法の安定によるものである。
Euler 法はこのように,実践で用いるには誤差が大きすぎるが,誤差の範囲を解析する
のは比較的簡単である。まずは,誤差解析に必要な次の2つの補助定理から始める。
6.2. Euler 法
7
補助定理 6.1 x ≥ −1 と正の整数 m に対して,0 ≤ (1 + x)m ≤ emx が常に成り立つ。
証明 f (x) = ex , x0 = 0, n = 1 で Taylor の定理を適用すると,
1
ex = 1 + x + x2 eξ
2
を満たす ξ が 0 と x の間に存在する。よって,
1
0 ≤ 1 + x ≤ 1 + x + x2 eξ = ex
2
ここで,1 + x ≥ 0 より
0 ≤ (1 + x)m ≤ emx
を得る。
補助定理 6.2 数列 {ai }ki=0 が正の実数 s, t に対し,
a0 ≥ −t/s
ai+1 ≤ (1 + s)ai + t, i = 0, 1, 2, . . . , k
を満たすならば,
t
t
ai+1 ≤ e(i+1)s (a0 + ) −
s
s
が成り立つ。
証明 固定した i に対し,
ai+1
≤
(1 + s)ai + t
≤
(1 + s)[(1 + s)ai−1 + t] + t
≤
..
.
(1 + s)[(1 + s)[(1 + s)ai−2 + t] + t] + t
≤
(1 + s)i+1 a0 + [1 + (1 + s) + (1 + s)2 + · · · + (1 + s)i ]t
となる。ここで,
i
1 + (1 + s) + (1 + s)2 + · · · + (1 + s)i =
(1 + s)j =
j=0
1
[(1 + s)i+1 − 1]
s
に注意すると,
ai+1 ≤ (1 + s)i+1 a0 +
t
t
(1 + s)i+1 − 1
t = (1 + s)i+1 (a0 + ) −
s
s
s
8
第 6 章 微分方程式
となる。ここで,補助定理 6.2 を x = 1 + s で用いると
t
t
ai+1 ≤ e(1+i)s (a0 + ) −
s
s
を得る。
定理 6.4 関数 f が領域 D = {(t, y) : a ≤ t ≤ b, −∞ < y < ∞} 上で,Lipschitz 条件をみ
たし,区間 [a, b] 内の全ての点 t に対し
|y (t)| ≤ M
が成り立つとする。y(t) が初期値問題
y = f (t, y), a ≤ t ≤ b, y(a) = α
の解で,w0 , w1 , . . . , wN が Euler 法によって得られた近似解ならば,i = 0, 1, 2, . . . , N に
対し,
|y(ti ) − wi | ≤
hM L(ti −a)
[e
− 1]
2L
が成り立つ。
証明 i = 0 のとき,y(t0 ) = w0 = α より,明らかに
|y(t0 ) − w0 | ≤
hM L(t0 −a)
[e
− 1]
2L
が成り立つ。式 (6.2) より,i = 0, 1, . . . , N − 1 に対し
y(ti+1 ) = y(ti ) + hf (ti , y(ti )) +
h2
y (ξi )
2
が成り立ち,また,Euler の差分公式より
wi+1 = wi + hf (ti , wi )
となる。よって,yi = y(ti ), yi+1 = y(ti+1 ) とすると,
yi+1 − wi+1 = yi − wi + h[f (ti , yi ) − f (ti , wi )] +
h2
y (ξi )
2
となる。これより
|yi+1 − wi+1 | ≤ |yi − wi | + h|f (ti , yi ) − f (ti , wi )| +
h2
|y (ξi )|
2
となる。ここで,関数 f は Lipschitz 定数 L で Lipschitz 条件を満たし,かつ,|y (t)| ≤ M
であることに注意すると,
|yi+1 − wi+1 | ≤ (1 + hL)|yi − wi | +
h2 M
2
6.2. Euler 法
9
となる。ここで,s = hL, t = h2 M/2, aj = |yj − wj | とおくと,補助定理 6.2 より
h2 M
h2 M
)−
2hL
2hL
となる。最後に,|y0 − w0 | = 0, (i + 1)h = ti+1 − t0 = ti+1 − a より
|yi+1 − wi+1 | ≤ e(i+1)hL (|y0 − w0 | +
|yi+1 − wi+1 | ≤
hM (ti+1 −a)L
(e
− 1)
2L
を得る。
この定理の弱点は,y の2回微分の上界を事前に知っていなければならないことである。
しかし,1回の偏微分 ∂f /∂t, ∂f /∂y が存在すれば,連鎖律により
y (t) =
dy
df
∂f
∂f
= (t, y(t)) =
(t, y(t)) +
(t, y(t)) · f (t, y(t))
dt
dt
∂t
∂y
となるので,解 y が分からなくても,|y (t)| の上界を得ることができる。
例 6.3 初期値問題
y = y − t2 + 1, 0 ≤ t ≤ 2, y(0) = 0.5
で,f (t, y) = y − t2 + 1 より ∂f /∂y = 1。よって,定理 6.1 より,関数 f は Lipschitz 定
数 L = 1 で Lipschitz 条件を満たす。この問題の厳密解は
1
y(t) = (t + 1)62 − et
2
で与えられるので,y (t) = 2 − 0.5et 。よって t ∈ [0, 2] に対し
|y (t)| ≤ 0.5e2 − 2
h = 0.2, L = 1 における Euler 法での誤差の上界を用いると M = 0.5e2 − 2 となり,これ
より
|yi − wi | ≤ 0.1(0.5e2 − 2)(eti − 1)
を得る。
Euler 法で h を小さくとれば,より良い結果を得られそうであるが,実際はまるめ誤差
が影響し,h を小さくしても良い結果を得ることができない。そこで,実践では
w0
=
α
wi+1
=
wi + hf (ti , wi )
を用いず,
u0
ui+1
= α + δ0
= ui + hf (ti , ui ) + δi+1
を用いる。ここで,δi は ui に関するまるめ誤差である。これより,次の定理を得る。
10
第 6 章 微分方程式
定理 6.5 関数 f が領域 D = {(t, y) : a ≤ t ≤ b, −∞ < y < ∞} 上で,Lipschitz 条件を
みたし,区間 [a, b] 内の全ての点 t に対し
|y (t)| ≤ M
が成り立つとする。y(t) が初期値問題
y = f (t, y), a ≤ t ≤ b, y(a) = α
の解で,u0 , u1 , . . . , uN が Euler 法によって得られた近似解で,|δi | ≤ δ ならば,i =
0, 1, 2, . . . , N に対し,
|y(ti ) − ui | ≤
1 hM
δ
(
+ )[eL(ti −a) − 1] + |δ0 |eL(ti −a)
L 2
h
が成り立つ。
演習問題 6.2
1. Euler 法を用いて次の初期値問題の近似解を求めよ。
(a) y = te3t − 2y, 0 ≤ t ≤ 1, y(0) = 0, h = 0.5
(b) y = 1 + y/t, 1 ≤ t ≤ 2, y(1) = 2, h = 0.25
3. 初期値問題
y=
2
+ t2 et , 1 ≤ t ≤ 2, y(1) = 0
y
と厳密解 y(t) = t2 (et − e) が与えられているとき,次の問いに答えよ。
(a) Euler 法を h = 0.1 で用いて近似解を求めよ。また,実際の値と比較せよ。
(b) (a) で求めた解を用いて,y(1.04) を1次補間で求め,実際の値と比較せよ。
6.3
高次 Taylor 法
定義 6.3 差分方程式
w0
wi+1
において
= α
= wi + hφ(ti , wi )
yi+1 − (yi + hφ(ti , yi ))
yi+1 − yi
=
− φ(ti , yi )
h
h
を局所打ち切り誤差 (local truncation error) という。
τi+1 (h) =
6.3. 高次 Taylor 法
11
初期値問題
y = f (t, y), a ≤ t ≤ b, y(a) = α
において,Euler 法における第 i 段階の局所打ち切り誤差は
τi+1 (h) =
yi+1 − yi
− f (ti , yi )
h
で与えられる。これは i 番目の誤差を表しているので局所誤差である。
式 (6.2) より,Euler 法は局所打ち切り誤差
τi+1 (h) =
h
y (ξi )
2
を持っていることが分かる。ここで,|y (t)| ≤ M より,
|τi+1 (h)| ≤
h
M
2
となり,局所打ち切り誤差は O(h) である。
Euler 法は Taylor の定理で n = 1 として求めたので,微分方程式の近似を良くするに
は,差分方程式の収束を改良する方法がある。
初期値問題
y = f (t, y), a ≤ t ≤ b, y(a) = α
の解 y(t) が C (n+1) [a, b] であるとする。この解 y(t) を第 nTaylor 多項式を用いて表すと,
y(ti+1 ) = y(ti ) + hy (ti ) +
h2
hn (n)
hn+1 (n+1)
y (ti ) + · · · +
y (ti ) +
y
(ξi )
2
n!
(n + 1)!
となる。ただし,ξi ∈ (ti , ti+1 )。y (k) (t) = f (k−1) (t, y(t)) より,
y(ti+1 ) =
+
h2
f (ti , y(ti )) + · · ·
2
hn (n−1)
hn+1 (n)
f
(ti , y(ti )) +
f (ξi , y(ξi ))
n!
(n + 1)!
y(ti ) + hf (ti , y(ti )) +
となる。ここで,剰余項を除いて得た差分方程式は位数 n の Talor 法とよばれる。
♠ 位数 n の Taylor 法 ♠
w0
=
α
wi+1
=
wi + hT (n) (ti , wi )
ただし,
hn−1 (n−1)
h
f (ti , wi ) + · · · +
f
(ti , wi )
2
n!
ここで,Euler 法は Taylor 法の位数が1の場合である。
T (n) (ti , wi ) = f (ti , wi ) +
12
第 6 章 微分方程式
例題 6.2 位数2の Taylor 法を用いて次の初期値問題の解を近似せよ。
y = y − t2 + 1, 0 ≤ t ≤ 2, y(0) = 0.5
解 f (t, y) = y − t2 + 1 より,f (t, y) = y − 2t = y − t2 + 1 − 2t。よって
h
f (ti , wi ) = wi − t2i + 1
2
h
h
(wi − t2i − 2ti + 1) = (1 + )(wi − t2i + 1) − hti
2
2
T (2) (ti , wi ) =
f (ti , wi ) +
+
これより,差分方程式は
w0
wi+1
= 0.5
= wi + h[(1 +
h
)(wi − t2i + 1) − hti ]
2
となる。ここで h = 0.2 とすると,N = 10, ti = 0.2i となるので,i = 0, 1, . . . , 9 に対して,
w0
=
wi+1
=
0.5
0.2
)(wi − (0.2i)2 + 1) − 0.04i]
2
1.22wi − 0.0088i2 − 0.008i + 0.22
wi + 0.2[(1 +
=
となる。
定理 6.6 初期値問題
y (t) = f (t, y(t)), a ≤ t ≤ b, y(a) = α
の解が y ∈ C n+1 [a, b] を満たすとき,位数 n の Taylor 法を用いてを刻み幅 h で近似する
と,打ち切り誤差は O(hn ) である。
証明
yi+1 − yi − hf (ti , wi ) −
h2
hn (n−1)
hn+1 (n)
f (ti , wi ) − · · · −
f
(ti , wi ) =
f (ξi , y(ξi ))
2
n!
(n + 1)!
より,局所打ち切り誤差は
τi+1 (h) =
yi+1 − yi
hn
− T (n) (ti , yi ) =
f (n) (ξi , y(ξi ))
h
(n + 1)!
ここで,y ∈ C n+1 [a, b] より,y (n+1) (t) = f (n) (t, y(t)) は [a, b] で有界で τi = O(hn ) と
なる。
演習問題 6.3
6.4. Runge-Kutta 法
13
1. 位数2の Taylor 法を用いて次の初期値問題の近似解を求めよ。
(a) y = te3t − 2y, 0 ≤ t ≤ 1, y(0) = 0, h = 0.5
(b) y = 1 + y/t, 1 ≤ t ≤ 2, y(1) = 2, h = 0.25
2. 位数4の Taylor 法を用いて次の初期値問題の近似解を求めよ。
(a) y = te3t − 2y, 0 ≤ t ≤ 1, y(0) = 0, h = 0.5
(b) y = 1 + y/t, 1 ≤ t ≤ 2, y(1) = 2, h = 0.25
3. 初期値問題
y=
2
+ t2 et , 1 ≤ t ≤ 2, y(1) = 0
y
と厳密解 y(t) = t2 (et − e) が与えられているとき,次の問いに答えよ。
(a) 位数2の Taylor 法を h = 0.1 で用いて近似解を求めよ。また,実際の値と比較せよ。
(b) (a) で求めた解を用いて,y(1.04) を1次補間で求め,実際の値と比較せよ。
6.4
Runge-Kutta 法
前章で学んだ Taylor 法は,位数の高い局所打ち切り誤差という望ましい性質を持って
いるが,関数 f (t, y) の値とその導関数について計算する必要があり,その計算の複雑さ
と時間がかかることから,実践ではほとんど用いることはない。
Runge-Kutta 法は,位数の高い局所打ち切り誤差を持ちながら,f (t, y) およびその導関
数の値の計算を省いた方法である。この方法を学ぶためには,まず,2変数の Taylor 展
開の復習が必要である。
定理 6.7 (2 変数の Taylor の定理) f (t, y) が点 (t0 , y0 ) の近傍で C n 級ならば,この近
傍内にある (t, y) = (t0 + h, y0 + k) に対して,f (t, y) = Pn (t, y) + Rn (t, y) となる。た
だし,
Pn (t, y)
= f (t0 , y0 ) + h
∂
∂
+k
∂t
∂y
+
1
2!
+
1
(n − 1)!
h
∂
∂
+k
∂t
∂y
h
f (t0 , y0 )
2
f (t0 , y0 ) + · · ·
∂
∂
+k
∂t
∂y
n−1
f (t0 , y0 ),
14
第 6 章 微分方程式
Rn =
1
n!
h
∂
∂
+k
∂t
∂y
n
f (t0 + θh, y0 + θk) (0 < θ < 1)
ここで,
h
∂
∂
+k
∂x
∂y
m
h
f (x, y) =
∂
∂
+k
∂x
∂y
h
∂
∂
+k
∂x
∂y
m−1
f (x, y), m = 2, 3, ··
である。
Runge-Kutta 法を導くための第一歩は,a1 f (t + α1 , y + β1 ) が
T (2) (t, y) = f (t, y) +
h
f (t, y)
2
を誤差 O(h2 ) 以内で近似するように,a1 , α1 , β1 を決定することである。
f (t, y) =
df
∂f
∂f
(t, y) =
(t, y) +
(t, y) · y (t) かつ y (t) = f (t, y)
dt
∂t
∂y
より
T (2) (t, y) = f (t, y) +
h ∂f
h ∂f
(t, y) +
(t, y) · f (t, y)
2 ∂t
2 ∂y
ここで,Taylor の多項式を用いて f (t + α1 , y + β1 ) を展開すると
a1 f (t + α1 , y + β1 )
= a1 f (t, y) + a1 α1
+
a1 β1
∂f
(t, y)
∂t
∂f
(t, y) + a1 R1 (t + α1 , y + β1 )
∂y
ここで,
R1 (t + α1 , y + β1 ) =
α12 ∂ 2 f
∂2f
β2 ∂2f
(ξ, µ) + α1 β1
(ξ, µ) + 1 2 (ξ, µ)
2
2 ∂t
∂t∂y
2 ∂y
は ξ ∈ (t, t + α1 ), µ ∈ (y, y + β1 ) で成り立つ。T (2) (t, y) と a1 f (t + α1 , y + β1 ) の係数を合
わせると,次の3つの方程式を得る。
f (t, y) :
∂f
(t, y) :
∂t
∂f
(t, y) :
∂y
a1 = 1
h
2
h
a1 β1 = f (t, y)
2
a1 α1 =
これより,媒介変数 a1 , α1 , β1 は一意に決定される。つまり,
a1 = 1, α1 =
h
h
, β1 = f (t, y)
2
2
6.4. Runge-Kutta 法
15
よって,
T (2) (t, y) = f (t +
h
h
h
h
, y + f (t, y)) − R1 (t + , y + f (t, y))
2
2
2
2
また,剰余項は
R1 (t +
h
h
, y + f (t, y)) =
2
2
+
h2 ∂ 2 f
h2
∂2f
(ξ, µ) + f (t, y)
(ξ, µ)
2
8 ∂t
4
∂t∂y
∂2f
h2
(f (t, y))2 2 (ξ, µ)
8
∂y
となる。ここで,全ての f の2回偏微分が有界ならば,
R1 (t +
h
h
, y + f (t, y)) = O(h2 )
2
2
となる。したがって,この方法を用いた場合 O(h2 ) の打ち切り誤差が生じるが,O(h2 ) は
位数2の Taylor 法を用いたときに生じる誤差なので,誤差の位数は変わらない。
位数2の Taylor 法で用いた T (2) (t, y) を,f (t + (h/2), y + (h/2)f (t, y)) で置き換える
ことによって生まれる,差分方程式は Runge-Kutta の中点法として知られている。
♠Runge-Kutta の中点法 ♠
w0
=
α
wi+1
=
wi + hf (ti +
h
h
, wi + f (ti , wi ))
2
2
a1 , α1 , β1 の3つの媒介変数を求めるには,a1 f (t + α1 , y + β1 ) と T (2) (t, y) の係数を合
わせればよかった。T (3) との係数合わせに a1 f (t, y) + a2 f (t + α2 , y + δ2 f (t, y)) を用い,
a1 = a2 = 12 , α2 = δ2 = h とおいたのを改良 Euler 法とよぶ。
♠ 改良 Euler 法 ♠
w0
=
α
wi+1
=
wi +
h
[f (ti , wi ) + f (ti+1 , wi + hf (ti , wi ))]
2
a1 = 1/4, a2 = 3/4, α2 = δ2 = 2h/3 とおいたのを Heun 法という。
♠Heun 法 ♠
w0
=
α
wi+1
=
wi +
2h
2h
h
[f (ti , wi ) + 3f (ti +
, wi +
f (ti , wi ))]
4
3
3
これらは,位数2の Runge-Kutta 法として分類される。
16
第 6 章 微分方程式
一般に,位数4の Runge-Kutta 法が用いられる。
♠ 位数4の Runge-Kutta 法 ♠
w0
= α
k1
= hf (ti , wi )
1
h
= hf (ti + , wi + k1 )
2
2
h
1
= hf (ti + , wi + k2 )
2
2
= hf (ti+1 , wi + k3 )
1
= wi + (k1 + 2k2 + 2k3 + k4 )
6
k2
k3
k4
wi+1
位数4の Runge-Kutta 法アルゴリズム
初期値問題
y = f (t, y), a ≤ t ≤ b, y(a) = α
の解を区間 [a, b] における N + 1 個の等間隔な点で近似する。
===================================================
入力 端点 a, b; 整数 N ; 初期条件α.
出力 近似解 w.
(1)
h ← (b − a)/N ;
t ← a;
w ← α;
OUTPUT(t, w).
(2)
for i = 1, 2, . . . , N do (3) − (5).
(3)
K1 ← hf (t, w);
K2 ← hf (t + h/2, w + K1 /2);
K3 ← hf (t + h/2, w + K2 /2);
K4 ← hf (t + h, w + K3 ).
(4)
w ← w + (K1 + 2K2 + 2K3 + K4 )/6;
t ← a + ih.
(5)
OUTPUT(t, w).
(6)
STOP.
===================================================
例題 6.3 位数4の Runge-Kutta 法を用いて初期値問題
y = y − t2 + 1, 0 ≤ t ≤ 2, y(0) = 0.5
の近似解を求めよ。ただし,h = 0.2, N = 10, ti = 0.2i とする。
6.5. Runge-Kutta-Fehlberg 法
17
解
ti
wi
ti
wi
0.0
0.2
0.4
0.6
0.8
1.0
0.5000000
0.8292933
1.2140762
1.6489220
2.1272027
2.6408227
1.2
1.4
1.6
1.8
2.0
3.1798942
3.7323401
4.2834095
4.8150857
5.3053630
演習問題 6.4
1. 改良 Euler 法を用いて次の初期値問題の近似解を求め,実際の値と比較せよ。
(a) y = te3t − 2y, 0 ≤ t ≤ 1, y(0) = 0, h = 0.5 y(t) = 51 te3t −
1 3t
25 e
+
1 −2t
25 e
(b) y = 1 + y/t, 1 ≤ t ≤ 2, y(1) = 2, h = 0.25 y(t) = t log t + 2t
2. Runge-Kutta 中点法を用いて次の初期値問題の近似解を求め,実際の値と比較せよ。
(a) y = te3t − 2y, 0 ≤ t ≤ 1, y(0) = 0, h = 0.5 y(t) = 51 te3t −
1 3t
25 e
+
1 −2t
25 e
(b) y = 1 + y/t, 1 ≤ t ≤ 2, y(1) = 2, h = 0.25 y(t) = t log t + 2t
3. 位数4の Runge-Kutta 法を用いて次の初期値問題の近似解を求め,実際の値と比較
せよ。
(a) y = te3t − 2y, 0 ≤ t ≤ 1, y(0) = 0, h = 0.5 y(t) = 51 te3t −
1 3t
25 e
+
1 −2t
25 e
(b) y = 1 + y/t, 1 ≤ t ≤ 2, y(1) = 2, h = 0.25 y(t) = t log t + 2t
6.5
Runge-Kutta-Fehlberg 法
初期値問題
y = f (t, y), a ≤ t ≤ b, y(a) = α
の解 y(t) を近似する理想的な差分方程式
wi+1 = wi + hi φ(ti , wi , hi )
は,許容限界 ε > 0 に対して,最小のメッシュポイントを用いて,大域誤差 |y(ti ) − wi |
を ε より小さくできる。
18
第 6 章 微分方程式
しかし,区間上に同じ刻み幅で点を取ることと,大域誤差を小さくすることには,整合
性がない。そこで,ここでは,メッシュポイントのとり方により大域誤差を制御する方法
を考える。
一般に,大域誤差を確定することは困難であるが,局所打ち切り誤差と大域誤差との間
には緊密な関係があることが知られている。そこで,位数のことなる近似法を用いること
により,局所打ち切り誤差を予測し,この予測をもとに大域誤差を誤差限度内に収まるよ
うに,刻み幅を決めることを考える。
この方法を例で説明する。まず,2つの近似法を用意する。1つ目は位数 n の Taylor 法
y(ti+1 ) = y(ti ) + hφ(ti , y(ti ), h) + O(hn+1 )
から作った差分方程式
w0
= α
wi+1
= wi + hφ(ti , wi , h), i > 0
で局所打ち切り誤差は τi+1 (h) = O(hn ) である。2つ目は位数 n + 1 の Taylor 法
˜ i , y(ti ), h) + O(hn+2 )
y(ti+1 ) = y(ti ) + hφ(t
から作った差分方程式
w
˜0
= α
˜ i, w
= w
˜i + hφ(t
˜i , h), i > 0
w
˜i+1
で局所打ち切り誤差は τ˜i+1 (h) = O(hn+1 ) である。
ここで,wi ≈ y(ti ) ≈ w
˜i ,刻み幅を h とし y(ti+1 ) の近似 wi+1 , w
˜i+1 を求める。この
とき,
τi+1 (h) =
=
=
=
y(ti+1 ) − y(ti )
− φ(ti , y(ti ), h)
h
y(ti+1 ) − wi
− φ(ti , wi , h)
h
y(ti+1 ) − [wi + hφ(ti , wi , h)]
h
1
(y(ti+1 ) − wi+1 )
h
同様にして,
τ˜i+1 (h) =
1
(y(ti+1 ) − w
˜i+1 )
h
6.5. Runge-Kutta-Fehlberg 法
19
となる。よって
τi+1 (h) =
=
=
1
(y(ti+1 ) − wi+1 )
h
1
[(y(ti+1 ) − w
˜i+1 ) + (w
˜i+1 − wi+1 )]
h
1
τ˜i+1 (h) + (w
˜i+1 − wi+1 )
h
となる。ここで,τi+1 (h) = O(hn ), τ˜i+1 (h) = O(hn+1 ) より,主要部分は
1
(w
˜i+1 − wi+1 )
h
からきていることが分かる。これより,位数 n の近似法の局所打ち切り誤差は
τi+1 (h) ≈
1
(w
˜i+1 − wi+1 )
h
となる。次に,この結果を用いて誤差限度内に収まるように h を決定する。τi+1 (h) = O(hn )
より,
τi+1 (h) ≈ Khn
となる K が存在する。そこで,位数 n の近似法に刻み幅 qh を用いた場合の局所打ち切り
誤差を求めると
τi+1 (qh) ≈ K(qh)n = q n (Khn ) ≈ q n τi+1 (h) ≈
qn
(w
˜i+1 − wi+1 )
h
となる。これが ε 以下で収まるように q を選ぶと
qn
|w
˜i+1 − wi+1 | ≈ |τi+1 (qh)| ≤ ε
h
q≤
εh
|w
˜i+1 − wi+1 |
1/n
となる。
このテクニックを用いている近似法で有名なのは Runge-Kutta-Fehlberg 法である。
この方法は,Runge-Kutta 法の局所打ち切り誤差の位数5を用いている。つまり,
w
˜i+1 = wi +
6656
28561
9
2
16
k1 +
k3 +
k4 − k5 + k6
135
12825
56430
50
55
を用いて,位数4の Runge-Kutta 法の局所打ち切り誤差を評価している。
wi+1 = wi +
25
1408
2197
1
k1 +
k3 +
k4 − k5
216
2565
4104
5
20
第 6 章 微分方程式
ここで,
k1
=
k2
=
k3
=
k4
=
k5
=
k6
=
hf (ti , wi )
h
1
hf (ti + , wi + k1 )
4
4
3h
3
9
, wi + k1 + k2 )
hf (ti +
8
32
32
12h
1932
7200
7296
hf (ti +
, wi +
k1 −
k2 +
k3 )
13
2197
2197
2197
439
3680
845
hf (ti + h, wi +
k1 − 8k2 +
k3 −
k4 )
216
513
4104
h
8
3544
1859
11
hf (ti + , wi − k1 + 2k2 −
k3 +
k4 − k5 )
2
27
2565
4104
40
位数4の Runge-Kutta-Fehlberg 法アルゴリズム
初期値問題
y = f (t, y), a ≤ t ≤ b, y(a) = α
の解を局所打ち切り誤差が許容限度内に収まるように近似する。
===================================================
入力 端点 a, b; 許容限度 T OL; 初期条件α; 最大刻み幅 hmax; 最小刻み幅 hmin.
出力 近似解 w.
(1)
t ← a;
w ← α;
h ← hmax;
F LAG ← 1;
OUTPUT(t, w).
(2)
while (F LAG = 1)do (3) − (11).
(3)
K1 ← hf (t, w);
K2 ← hf (t + 14 h, w + 14 K1 );
3
9
K3 ← hf (t + 83 h, w + 32
K1 + 32
K2 );
12
1932
7200
7296
K4 ← hf (t + 13 h, w + 2197 K1 − 2197
K2 + 2196
K3 );
439
3680
845
K5 ← hf (t + h, w + 216 K1 − 8K2 + 513 K3 − 4104
K4 );
8
1859
K6 ← hf (t + 12 h, w − 27
K1 + 2K2 − 3544
K
+
K4 − 11
K5 ).
3
2565
4104
40
1 1
128
2197
1
2
(4)
R ← h | 360 K1 − 4275 K2 − 75240 K4 + 50 K5 + 55 K6 |.
t ← a + ih.
(5)
if(R ≤ T OL) thendo (6), (7).
6.5. Runge-Kutta-Fehlberg 法
21
(6)
t ← t + h;
25
w ← w + 216
K1 + 1408
K3 + 2197
K4 − 15 K5 .
2565
4104
(7)
OUTPUT(t, w, h).
(8)
δ ← 0.84(T OL/R)1/4 .
(9)
if(δ ≤ 0.1) then
h ← 0.1h
else if(δ ≥ 4) then
h ← 4h
else
h ← δh.
(10)
if(h > hmax) then
h ← hmax.
(11)
if(t ≥ b) then
F LAG ← 0
else if(t + h > b) then
h←b−t
else if(h < hmin) then
F LAG ← 0;
OUTPUT( 許容限度をオーバー ).
(12)
STOP.
===================================================
例題 6.4 Runge-Kutta-Fehlberg 法を用いて次の初期値問題の近似解を求めよ。
y = y − t2 + 1, 0 ≤ t ≤ 2, y(0) = 0.5
解 入力を許容限度 T OL = 10−5 ,最大刻み幅 hmax = 0.25,最小刻み幅 hmin = 0.01 と
すると
ti
wi
0
0.5
0.2500000 0.9204886
0.4865522 1.3964910
0.7293332 1.9527488
..
..
.
.
1.9793332 5.2574861
2.0000000 5.3054896
hi
0.2500000
0.2365522
0.2427810
..
.
0.2500000
0.0206668
演習問題 6.5
1. Runge-Kutta-Fehlberg 法を用いて次の初期値問題の近似解を求め,実際の値と比較
せよ。ただし,許容限度 T OL = 10−4 ,hmax = 0.25,hmin = 0.05 とする。
(a) y = te3t − 2y, 0 ≤ t ≤ 1, y(0) = 0, y(t) = 51 te3t −
1 3t
25 e
+
1 −2t
25 e
22
第 6 章 微分方程式
(b) y = 1 + y/t, 1 ≤ t ≤ 2, y(1) = 2 y(t) = t log t + 2t
2. Runge-Kutta-Fehlberg 法を用いて次の初期値問題の近似解を求め,実際の値と比較
せよ。ただし,許容限度 T OL = 10−4 ,hmax = 0.05,hmin = 0.02 とする。
(a) y = te3t − 2y, 1 ≤ t ≤ 1.2, y(0) = 0, y(t) = 15 te3t −
(b) y = 1 + y/t, 1 ≤ t ≤ 2, y(1) = 2, y(t) = t log t + 2t
1 3t
25 e
+
1 −2t
25 e
23
第 7 章 行列を用いた反復法
7.1
ベクトルノームと行列
これまでに,方程式 f (x) = 0 の解を求める反復法について学んできた。この場合の反復
法は,近似の良し悪しを,近似解と実際の解の距離を測ることにより,決めることができ
る。この反復法を連立1次方程式の解を求めるのに使おうとしたら,近似解(ベクトル)
と実際の解(ベクトル)との距離を測らなければならない。ベクトルの距離はいろいろな
測り方があるが,どんな場合でも次のことを満たさなければならない。
Rn = {(x1 , x2 , . . . , xn ) : xi ∈ R} とするとき,Rn での距離を定義するのに,ノーム
(大きさ) を用いる。
定義 7.1 x ∈ Rn のノーム (norm) は x で表され,すべてのベクトル x, y ∈ Rn とす
べての実数 α に対して,
1.
x ≥ 0,
x = 0 と x = 0 は同値
2.
αx = |α| x
3.
x+y ≤ x + y
が成り立つ。
例えば,ベクトル x = (1, 2, 3) のとき,ベクトル x の距離を2点 (0, 0, 0) と (1, 2, 3) の
√
√
最短距離とすると,その距離は 12 + 22 + 32 = 14 となる。この距離の表し方を l2 ノー
ムといい,x ∈ Rn に対して,
x
2
= (x21 + x22 + · · · + xn )1/2
と定義する。これにより,l2 ノームは,ベクトルの内積の平方根として考えることができ
る。この他によく用いられるものに,l∞ ノームがあり,
x
で定義される。
∞
= max |xi |.
1≤i≤n
24
第 7 章 行列を用いた反復法
例題 7.1 ベクトル x = (−1, 1, −2) の l2 ノームと l∞ ノームを求めよう.
解
x
x
2
=
∞
=
(−1, 1, −2) · (−1, 1, −2) =
√
1+1+4=
√
6
max |xi | = max{1, 1, 2} = 2
1≤i≤3
定義 7.1 は,l∞ ノームに対しても成り立つ。x = (x1 , x2 , . . . , xn ) とするとき,
x+y
=
∞
max |xi + yi | ≤ max(|xi | + |yi |)
1≤i≤n
≤
max |xi | + max |yi | = x
1≤i≤n
1≤i≤n
∞
+ y
∞
次に,三角不等式
x+y
≤ x
2
2
+ y
2
を示すには,Cauchy-Schwartz の不等式を用いるのが便利である。
定理 7.1 (Cauchy-Schwartz の不等式)
x = (x1 , x2 , . . . , xn ), y = (y1 , y2 , . . . , yn ) ∈
n
R に対して,
n
x·y =
n
n
x2i )1/2 (
xi yi ≤ (
i=1
i=1
yi2 )1/2 = x
2
y
2
i=1
が成り立つ。
証明
0 ≤ (x − λy)
2
2
=
(x − λy) · (x − λy)
=
x
− 2λx · y + λ2 y 22 .
2
2
これは λ についての 2 次式で 0 より大きいので,その判別式 ∆ は 0 以下になる。よって
∆ = |x · y|2 − x
2
2
y
2
2
≤ 0.
これより
|x · y| ≤ x
2
y 2.
となる。これを用いると,
x+y
2
2
=
(x + y) · (x + y)
=
x
2
2
+ 2x · y + y
≤
x
2
2
+2 x
2
y
2
2
2
+ y
2
2
7.1. ベクトルノームと行列
25
より
x+y
2
≤( x
2
2
+2 x
2
y
2
+ y 22 )1/2 = x
2
+ y
2
となる。
定義 7.2 x = (x1 , x2 , . . . , xn ), y = (y1 , y2 , . . . , yn ) ∈ Rn ならば,x と y の l2 , l∞ 距離は
それぞれ
n
x−y
2
(xi − yi )2 }1/2 と x − y
={
∞
= max |xi − yi |
i=1
1≤i≤n
で与えられる。
例題 7.2 次の連立1次方程式の近似解を Gauss の消去法に5桁のまるめを用いて求め,
解 (1, 1, 1) との l2 , l∞ 距離を求めよ。
解 5桁のまるめで Gauss の消去法を行うと,近似解
x
˜ = (x1 , x2 , x3 ) = (1.2001, 0.99991, 0.92538)
を得る。そこで,解と近似解の l2 距離を求めると
x−x
˜
2
=
[(1 − 1.2001)2 + (1 − 0.99991)2 + (1 − 0.92538)2 ]1/2
=
[(0.20001)2 + (0.00009)2 + (0.07462)2 ]1/2 = 0.21356
となる。また,l∞ 距離を求めると
x−x
˜
∞
= max{|1 − 1.2001|, |1 − 0.99991|, |1 − 0.92538|}
= max{0.20001, 0.00009, 0.07462} = 0.2001
となる。
定義 7.3 Rn のベクトル列 {x(k) }∞
k=1 がどんな正の数 ε に対しても,k ≥ N (ε) のとき,
x(k) − x < ε
が成り立つように整数 N (ε) が選べるなら,{x(k) }∞
k=1 は x にノーム収束 (norm conver-
gence) をするという。
定理 7.2 Rn のベクトル列 {x(k) }∞
k=1 が x に l∞ ノーム収束をするための必要十分条件は,
(k)
lim xi
k→∞
である。
= xi , i = 1, 2, . . . , n
26
第 7 章 行列を用いた反復法
証明 {x(k) }∞
k=1 が x に l∞ ノーム収束をするならば,どんな正の数 ε に対しても,k ≥ N (ε)
のとき,
(k)
max |xi
1≤i≤n
− xi | = x(k) − x
∞
<ε
(k)
が成り立つように整数 N (ε) が選べる。よって,それぞれの i = 1, 2, . . . , n に対して |xi −
xi | < ε が成り立つので,
(k)
lim xi
k→∞
= xi
(k)
逆に,すべての i = 1, 2, . . . , n において limk→∞ xi
= xi が成り立つならば,ε > 0 に対
して,Ni (ε) を k ≥ Ni (ε) のとき
(k)
|xi
− xi | < ε
が成り立つように選ぶことができる。よって,
N (ε) = max Ni (ε)
1≤i≤n
とおくと,k ≥ N (ε) ならば,
(k)
max |xi
1≤≤n
− xi | = x(k) − x
∞
<ε
が成り立つ。
(k)
(k)
(k)
(k)
例題 7.3 x(k) = (x1 , x2 , x3 , x4 ) = (1, 2 + k1 , k32 , e−k sin k) が l∞ ノーム収束するベ
クトルを求めよ。
解
lim 1 = 1, lim (2 +
k→∞
k→∞
1
3
) = 2, lim 2 = 0, lim e−k sin k = 0
k→∞ k
k→∞
k
より,{x(k) } は (1, 2, 0, 0) に l∞ ノーム収束する。
上の例題を l2 ノーム収束について直接行うと,計算が非常に大変である。そこで,次の
定理を用いる。
定理 7.3 x ∈ Rn に対して,
x
∞
≤ x
2
≤
√
n x
∞
が常に成り立つ。
証明 x の j 成分 xj は, x
∞
= max1≤i≤n |xi | = |xj | を満たすとする。
n
x
2
∞
= |xj |2 = x2j ≤
x2i = x
i=1
2
2
7.1. ベクトルノームと行列
27
より
x
さらに,
n
x
2
2
≤ x
∞
2
n
x2i ≤
=
i=1
x2j = nx2j = n x
2
∞
i=1
より
x
2
≤
√
n x
∞
となる。
(k)
(k)
(k)
(k)
例題 7.4 x(k) = (x1 , x2 , x3 , x4 ) = (1, 2 + k1 , k32 , e−k sin k) が l2 ノーム収束するベ
クトルを求めよ。
解 {x(k) } は x = (1, 2, 0, 0) に l∞ ノーム収束するので, ε > 0 に対して,N (ε/2) が存在
し,k ≥ N (ε/2) のとき,
x(k) − x
∞
<
ε
2
が成り立つ。よって,
x(k) − x
2
<
√
4 x(k) − x
∞
< 2(ε/2) = ε
となり,{x(k) } は x = (1, 2, 0, 0) に l2 ノーム収束する。
定義 7.4 n 次の行列 A のノーム (norm) は A で表され,すべての行列 A, B とすべて
の実数 α に対して,
1.
A ≥ 0,
A = 0 と A = 0 は同値
2.
αA = |α| A
3.
A+B ≤ A + B
4.
AB ≤ A
B
が成り立つ。
n 次の行列 A と B の距離は A − B で与えられる。
定義 7.5
· が Rn でのベクトルノームだとすると,
A = max Ax
x =1
は行列ノーム (matrix norm) である。
28
第 7 章 行列を用いた反復法
この行列ノームは自然行列ノーム (natural matrix norm) または誘導ノーム (induced
matrix norm) という。このテキストでは,断らないかぎり自然行列ノームを用いている。
どんなベクトル z = 0 に対しても,x = z/ z は単位ベクトルになるので,
z
Az
) = max
z=0
z
z
max Ax = max A(
z=0
x =1
が成り立つ。よって,
Az
z
A = max
z=0
と表すことができる。
系 7.1 z = 0 に対して
Az ≤ A · z
が成り立つ。
行列のノームは,行列がどのように単位ベクトルを引き伸ばすかを測り,最大の引き伸ば
し数が行列のノームである。ここで考える行列のノームは次の形で表せる。
A
A
∞
=
2
=
max
x
∞ =1
max
x
2 =1
Ax
∞,
l∞ ノーム
Ax 2 , l2 ノーム
定理 7.4 A = (aij ) が n 次の正方行列ならば,
n
A
∞
= max
1≤i≤n
|aij |
j=1
証明 x を l∞ ノームが1の n 次元ベクトルとすると,max1≤j≤n |xj | = x
n
Ax
∞
=
max |(Ax)i | = max |
1≤i≤n
1≤i≤n
aij xj |
j=1
n
≤
次に,p を
max
1≤i≤n
n
|aij | max |xj | ≤ max
1≤j≤n
j=1
n
1≤i≤n
n
|apj | = max
j=1
1≤i≤n
|aij |
j=1
となるように選ぶ。さらに,x の成分を
xj =
1
−1
, apj ≥ 0
, apj < 0
|aij |
j=1
∞
= 1 より
7.1. ベクトルノームと行列
とすると, x
29
= 1 かつすべての j = 1, 2, . . . , n に対して apj xj = |apj | となるので,
∞
n
Ax
∞
= max |
1≤i≤n
n
n
aij xj | ≥ |
j=1
n
apj xj | = |
j=1
|apj || = max
1≤i≤n
j=1
を得る。これより,
n
A
= max
∞
x
∞ =1
Ax
となるので,
∞
≥ max
1≤i≤n
|aij |
j=1
n
A

1

例題 7.5 A =  0
5
2
3
−1
∞
= max
1≤i≤n

−1

−1  の ·
1
∞
|aij |
j=1
ノームを求めよ。
解
3
|a1j |
=
|1| + |2| + | − 1| = 4
|a2j |
=
0 + |3| + | − 1| = 4
|a3j |
=
|5| + | − 1| + |1| = 7
j=1
3
j=1
3
j=1
より,
A
∞
= max{4, 4, 7} = 7
演習問題 7.1
1. 次のベクトルに対して x
∞,
x
2
ノームを求めよ。
(a) x = (3, −4, 0, 32 )
(b) x = (sin k, cos k, 2k )
2. 次のベクトル列は収束することを示し,その極限値を求めよ。
(a) x(k) = (1/k, e1−k , −2/k 2 )
2
(b) x(k) = (ke−k , cos k/k,
√
k 2 + k − k)
|aij |
j=1
30
第 7 章 行列を用いた反復法
3. 次の行列の ·
10
0
(a)
∞
ノームを求めよ。
15
1


2 −1
0


(b)  −1
2 −1 
0 −1
2
4. 次の連立1次方程式の解は x で,近似解は x
˜ で与えられている。 x−˜
x
を求めよ。
(a)
1
1
2 x1 + 3 x2
1
1
3 x1 + 4 x2
t
= 17 , − 16
=
=
∞
と A˜
x −b
∞
1
63
1
168
x
˜ = (0.142, −0.166)t
x
x1 + 2x2 + 3x3 =
1
(b) 2x1 + 3x2 + 4x3 = −1
3x1 + 4x2 + 6x3 =
2
x = (0, −7, 5)t
˜ = (−0.33, −7.9, 5.8)t
x
x1 + 2x2 + 3x3 =
(c) 2x1 + 3x2 + 4x3 =
3x1 + 4x2 + 6x3 =
1
−1
2
x = (0, −7, 5)t
˜ = (−0.2, −7.5, 5.4)t
x
7.2
固有値と固有ベクトル
n 次の正方行列を A とし, λ ∈ C に対して,
Ax = λx (x ∈ C n , x = 0)
が成り立つとき, λ を A の 固有値 ( eigenvalue) といい, x を固有値 λ に対する固有
ベクトル (eigenvector) という。では固有値と固有ベクトルは何なのか調べてみよう。ま
ず,幾何学的に考えてみる。例えば,平面上で直線 y = x + 2 を直線 Y = X に移す線形
0
変換を考えみる。これは y 軸方向での平行移動なので
の形をしたベクトルは線形
y
7.2. 固有値と固有ベクトル
31
0
の形をしている。このように線形変換後にそれ自身のスカラー倍
y
となって現れるベクトル,これが固有ベクトルである。またこのときのスカラー λ が固有
値である。それでは固有値と固有ベクトルはどうやって求めるのだろうか。Ax = λx を
書き直すと,
(A − λI)x = 0
変換の後でも λ
となり,これは同次の連立 1 次方程式と考えられる。ここで固有ベクトル x が存在する
ための必要十分条件は,|A − λI||x| = 0 より,
|A − λI| = 0
となる。よって,固有値 λ は t を未知数とする方程式
|A − tI| = 0
の解として求まる。逆に,この方程式の解 λ は A の固有値であることが分かる。
定義 7.6 t の n 次式
ΦA (t) = det(A − tI) = tn + c1 tn−1 + · · · + cn
を行列 A の 固有多項式 (characteristic polynomial) といい, t の n 次方程式
ΦA (t) = det(A − tI) = 0
を行列 A の 固有方程式 (characteristic equation) という。
これより固有値を求めるには固有方程式の解を求めればよいことが分かる。


3 0
0


例題 7.6 A =  0 2 −5  の固有値を求めよ。
0
1
−2
解
3−t
ΦA (t) =
0
0
0
0
2−t
−5
1 −2 − t
= (3 − t)(t2 + 1) = 0
より A の固有値は λ = 3, ±i となる。
この例題からもわかるように,行列の成分がすべて実数でも固有値に複素数が表れるこ
とがある。
32
第 7 章 行列を用いた反復法

0

例題 7.7 A =  1
1

1

1  の固有値と固有ベクトルを求めよ。
0
1
0
1
−t
1
1
解 ΦA (t) =
1 −t
1 = −(t + 1)2 (t − 2). よって, A の固有値は λ = 2, −1 であ
1
1 −t
る。次に A の固有ベクトルを求める。
λ = 2 に対する固有ベクトルは (A − 2I)x = 0 を満たす 0 でない x なので,この連立
方程式を解くと




−2
1
1
1
1 −2

 R1 ↔R3 

A − 2I
=
1  −→  1 −2
1 
 1 −2
1
1 −2
−2
1
1
−R1 +R2 →R2
2R1 +R3 →R3
−→

1

 0
0
1
−3
3
−

−2

3 
−3
R2
3
→R2

1 1

 0 1
0 0
R2 +R3 →R3
−→

−2

−1  .
0
これより自由度 1 となるので x3 = α とおくと,

 
 



x1
−x2 + 2x3
α
1

 
 



x =  x2  = 
x3
 =  α  = α  1  (α = 0)
x3
x3
α
1
となる。
次に λ = −1 に対する固有ベクトルは (A − 3I)x = 0 を満たす 0 でない x なので,連
立方程式を解くと

1 1

A+I = 1 1
1 1
−R1 +R2 →R2

1

1 
1
−R1 +R3 →R3
−→
となる。これより自由度 2 となるので x2 = β

 
−x2 − x3
−β − γ

 
x=
x2
β
=
x3
となる。
γ

1

 0
0
1
0
0

1

0 
0
= 0, x3 = γ = 0 とおくと,





−1
−1





=β 1 +γ 0 
0
1
7.2. 固有値と固有ベクトル
33
定義 7.7 ρ(A) = max{|λ|} を行列 A のスペクトル半径 (spectral radius) という。た
だし,λ は行列 A の固有値である。


3 0
0


例題 7.8 A =  0 2 −5  のスペクトル半径を求めよ。
0
1
−2
3−t
0
0 2−t
0
1
解 ΦA (t) =
0
−5
−2 − t
= (3 − t)(t2 + 1) = 0 より,A のスペクトル半径
ρ(A) は
ρ(A) = max{3, |i|, | − i|} = 3
となる。
定理 7.5 A が n 次の正方行列ならば,
1.
A
2
= [ρ(At , A)]1/2 ,
2. ρ(A) ≤ A ,ただし, · は自然ノーム

1

例題 7.9 A =  1
−1

1

A= 1
−1
1
2
1
1
2
1

0

1  の幾何ノーム A
2
2
を求めよ。

0

1  より,
2

1 1

t
AA= 1 2
0 1

−1
1 1

1  1 2
2
−1 1
 
0
3
 
1 = 2
2
−1
2
6
4

−1

4 .
5
At A のスペクトル半径を求めるには,At A の固有値を計算する必要がある。
0 =
|At A − λI|
3−λ
=
2
−1
2 6−λ
4
−1
4 5−λ
= −λ3 + 14λ2 − 42λ = −λ(λ2 − 14λ + 42)
34
第 7 章 行列を用いた反復法
より,λ = 0, 7 ±
A
2
√
=
7。よって
ρ(At A) =
max{0, 7 −
√
7, 7 +
√
7} =
7+
√
7 ≈ 3.106
行列を用いたテクニックで,反復法を用いたときに大事なことは,いつ累乗された行列
が小さくなるかということである。
定義 7.8 それぞれの i = 1, 2, . . . , n, j = 1, 2, . . . , n に対して
lim (Ak )ij = 0
k→∞
が成り立つとき,n 次の行列 A は収束する (convergent) という。
1
2
1
4
例題 7.10 行列 A =
0
1
2
は収束することを示せ。
A のベキを計算すると,
A2 =
1
4
1
4
0
1
4
, A3 =
1
8
3
16
Ak =
1
2k
k
0
, A4 =
1
8
1
16
1
8
0
1
16
そして,一般に
0
2k+1
となる。ここで,
1
2k
1
k
= 0, lim k+1 = 0
k
k→∞ 2
k→∞ 2
lim
より,A は収束行列である。
この例題で,A のスペクトル半径は ρ(A) =
1
2
である。このスペクトル半径と行列の収
束の間には重要な関係がある。これをまとめたのが次の定理である。
定理 7.6 次の命題は同値である。
1. A は収束行列である。
2. limn→∞ A = 0 がある自然ノームで成り立つ。
3. limn→∞ A = 0 がすべての自然ノームで成り立つ。
4. ρ(A) < 1
5. limn→∞ An x = 0 がすべての x で成り立つ。
7.3. 反復法による連立方程式の解法
35
演習問題 7.2
1. 次の行列の行列の固有値と固有ベクトルを求めよ。
(a)
2 −1
−1
2
(b)
1
−2

1
−2
1
2
0

0

0 
3
2 1

(d)  2 3
1 1

1

2 
2
2

(c)  1
0

2. 演習問題1の行列のスペクトル半径を求めよ。
3. A1 =
1
0
1
4
1
2
, A2 =
1
2
0
16
1
2
のとき,A1 は収束行列ではないが,A2 は収束
行列であることを示せ。
4. 演習問題1の行列の l2 ノーム A
7.3
2
を求めよ。
反復法による連立方程式の解法
この節では,18世紀の終わりに開発され,現在古典となっている Jacobi と Gauss −
Seidel の反復法について紹介する。反復法は次数の低い連立方程式で用いられることは滅
多にない。その理由は,反復法で要する時間は,Gauss の消去法などに要する時間を越え
てしまうからである。しかし,次数の高い連立方程式で,成分に多くの0が含まれている
ときには有効である。
反復法を用いて n 次の連立方程式 Ax = b を解くには,まず,x の初期近似値 x0 を決
め,x に収束するベクトル列 {x(k) } を生成する。反復法は連立方程式 Ax = b をそれと同
値な連立方程式 x = T x + c に変換するのに用いられる。
初期近似値 x0 が選ばれると,
x(k) = T x(k−1) + c
により,近似解ベクトル列が生成される。この方法は定点法を思い起こさせるだろう。
36
第 7 章 行列を用いた反復法
例 7.1 連立方程式 Ax = b:
E1
E2
E3
E4
:
:
:
:
10x1
−x1
2x1
−
x2
+ 11x2
−
x2
3x2
+ 2x3
−
x3
+ 10x3
−
x3
+
−
+
=
=
=
=
3x4
x4
8x4
6
25
−11
15
は解 x = (1, 2, −1, 1)t を持っている。Ax = b を x = T x + c に変換するには,式 Ei をそ
れぞれ xi について解く必要がある。i = 1, 2, 3, 4 において,
x1
x2
x3
x4
1
10 x2
=
1
= 11
x1
= − 15 x1
=
これより,

1
10 x2
3
8 x2
+
−
0
 1
 11
T =
 −1
 5
0
1
10
− 15
0
1
11
1
10
− 38
0
−
+
1
5 x3
1
11 x3
+
1
8 x3
3
11 x4
1
10 x4
−
+


3
0
8


3 
 25
− 11
 と c =  11

 − 11
1
 10
10 
15
0
8
1
8
3
5
25
11
11
10
15
8
+
+
−
+
.






を得る。ここで,初期近似ベクトルとして x(0) = (0, 0, 0, 0)t とおく。すると,x(1) は
(1)
x1
(1)
x2
(1)
x3
(1)
x4
=
1 (0)
= 11
x1
1 (0)
= − 5 x1
=
1 (0)
10 x2
1 (0)
10 x2
3 (0)
8 x2
+
−
−
+
1 (0)
5 x3
1 (0)
11 x3
+
1 (0)
8 x3
−
+
3 (0)
11 x4
1 (0)
10 x4
+
+
−
+
3
5
25
11
11
10
15
8
=
0.6000
=
2.2727
.
= −1.1000
=
1.8750
同様にして,反復を続けることができる。
この例で紹介したのが Jacobi の反復法 (Jacobi iteration mathod) とよばれるものであ
る。この方法は,Ax = b の式の i 番目の式を xi について解き,
n
xi =
(−
j=1,j=i
(k)
を求め,xi
aij xj
bi
)+
aii
aii
を x(k−1) から
(k)
xi
を用いて生成する方法である。
=
(k−1)
n
)
j=1,j=i (−aij xj
aii
+ bi
(7.1)
7.3. 反復法による連立方程式の解法

a11

 a21
まず,行列 A = 
 ..
 .
an1



A = 


a12
a22
..
.
an2
···
···
···
37
a1n
a2n
..
.
ann



を


 
 
0
0
· · · a1n
a11 0 · · · 0
 
 
0
··· 0  
0 a22 · · · 0   −a21



−
..
.. 
..
..
..   ..
−
.
.  
.
.
.   .
0
0 · · · ann
−an1 a−n2 · · · 0

0 −a12 · · · −a1n

0 0 · · · −a2n 
..
..
.. 

.
.
. 
0 0 ···
0
= D−L−U
に分けると,式 Ax = b,または式 (D − L − U )x = b は
Dx = (L + U )x + b
に変換される。ここで,D−1 が存在するならば,つまり,全ての i に対して,aii = 0 な
らば,
x = D−1 (L + U )x + D−1 b
となる。これより,Jacobi の反復法による行列形が得られる。つまり
x(k) = D−1 (L + U )x(k−1) + D−1 b, k = 1, 2, . . .
である。Tj = D−1 (L + U ), cj = D−1 b とおくと,
x(k) = Tj x(k−1) + cj
(7.2)
となる。
式 (7.1) は計算で用いられ,式 (7.2) は理論で用いられる。
Jacobi 反復法アルゴリズム
初期近似値 x(0) より,Ax = b を解く。
===================================================
入力 行列 A の成分 aij ; 列ベクトル b の成分 bi ;
初期近似値 XO = x(0) の成分 XOi ; 許容限度 T OL; 最大反復回数 N0 .
出力 近似解 x1 , x2 , . . . , xn または エラーメッセージ.
(1)
k ← 1.
(2)
while (k ≤ N ) do (3) − (6)
38
第 7 章 行列を用いた反復法
(3)
for i = 1, . . . P
, n do
−
(aij XOj )+bi
j=1,j=i
xi ←
aii
(4)
if(|x − XO < T OL) then
OUTPUT(x1 , . . . , xn );
STOP.
(5)
k ← k + 1.
(6)
for i = 1, . . . , n do
XOi ← xi .
(7)
OUTPUT(”反復回数の限界を超えました”);
STOP
===================================================
(k)
式(7.1) をもう一度注意深く観察すると,x(k−1) の成分は xi
た。しかし,i > 1
(k)
(k)
のとき,x1 , . . . , xi−1
を計算するのに用いられ
(k−1)
(k−1)
, . . . , xi−1
より,実際の解 x1 , . . . , xi−1 に対してよりよい近似になっていると思われる。そこで,直
(k)
前に求めた結果を用いて xi を計算する方が妥当なのではないだろうか。つまり,式 (7.1)
の代わりに
(k)
xi
=
−
はすでに求めてあるし,多分 x1
(k)
i−1
j=1 (aij xj )
(k−1)
n
)
j=i+1 (aij xj
−
+ bi
(7.3)
aii
を用いるのである。こうやって求める方法を Gauss-Seidel の反復法 (Gauss-Siedel iter-
ative technique) といい,例を用いて説明する。
例 7.2 連立方程式 Ax = b:
E1
E2
E3
E4
:
:
:
:
10x1
−x1
2x1
−
x2
+ 11x2
−
x2
3x2
+ 2x3
−
x3
+ 10x3
−
x3
+
−
+
3x4
x4
8x4
=
=
=
=
6
25
−11
15
は例 7.1 で Jacobi の反復法を用いて既に解いた。ここでは,Gauss − Siedel の反復法を
用いて解く。式 (7.3) を Jacobi Iterative アルゴリズムに適用すると,
(k)
1 (k−1)
10 x2
x1 =
(k)
1 (k)
x2 = 11
x1
(k)
1 (k)
x3 = − 5 x1
+
x4 =
−
(k)
1 (k)
10 x2
3 (k)
8 x2
−
+
1 (k−1)
5 x3
1 (k−1)
11 x3
+
1 (k)
8 x3
−
+
3 (k−1)
11 x4
1 (k−1)
10 x4
+
+
−
+
3
5,
25
11 ,
11
10 ,
15
8 .
ここで,x(0) = (0, 0, 0, 0)t とおき,反復を繰り返すと,次のような表を得る。
7.3. 反復法による連立方程式の解法
k
0
(k)
x1
(k)
x2
(k)
x3
(k)
x4
1
39
2
3
4
5
0.0000
0.6000
1.030
1.0065
0.0000
2.3272
2.037
2.0036
0.0000 −0.9873 −1.014 −1.0025
0.0000
0.8789 0.9844
0.9983
1.0009
2.0003
−1.0003
0.9999
1.0001
2.0000
−1.0000
1.0000
ここで,Step 4 の x − XO < T OL の代わりに,
x(5) − x(4)
x(5)
∞
=
0.0008
= 4 × 10−4
2.000
を用いると,x(5) は近似として受け入れられる。ここで,Jacobi の反復法と比べて Gauss-
Seidel の反復法はその反復回数が半分で済んでいることに注意して欲しい。
Gauss-Seidel 法を行列で表すには,式 (7.3) の両辺に aii をかけて整理する。すると,
i = 1, 2, . . . , n に対して,
(k)
(k)
(k)
ai1 x1 + ai2 x2 + · · · + aii xi
(k−1)
= −ai,i+1 xi+1
− · · · − ain x(k−1)
+ bi
m
となる。ここで,n 個のすべての式を書き出すと,
(k)
ai1 x1
(k)
(k)
a21 x1 + a22 x2
..
.
(k)
(k)
(k)
an1 x1 + an2 x2 + · · · + ann xn
(k−1)
= −a12 x2
=
(k−1)
(k−1)
+ b1
− · · · − a1n xn
− a13 x3
(k−1)
(k−1)
+ b2
− · · · − a2n xn
−a23 x3
=
=
bn
となる。
ここで,D を対角行列,L を下三角行列,U を上三角行列とすると,Gauss-Seidel 法を
(D − L)x(k) = U x(k−1) + b
または
x(k) = (D − L)−1 U x(k−1) + (D − L)−1 b
と表すことができる。
Tg = (D − L)−1 U ,cg = (D − L)−1 b とおくと,Gauss-Seidel 法は
x(k) = Tg x(k−1) + cg
となる。ここで,下三角行列 D − L が正則であるための必要十分条件は,aii = 0 である。
Gauss-Seidel 反復法アルゴリズム
40
第 7 章 行列を用いた反復法
初期近似値 x(0) より,Ax = b を解く。
===================================================
入力 行列 A の成分 aij ; 列ベクトル b の成分 bi ;
初期近似値 XO = x(0) の成分 XOi ; 許容限度 T OL; 最大反復回数 N0 .
出力 近似解 x1 , x2 , . . . , xn または エラーメッセージ.
(1)
k ← 1.
(2)
while (k ≤ N ) do (3) − (6)
(3)
for i = 1, . . . , n do
−
Pi−1
(k)
(aij x
Pn
)−
(k−1)
(aij x
)+bi
j=i+1
j
j=1
j
xi ←
aii
(4)
if(|x − XO < T OL) then
OUTPUT(x1 , . . . , xn );
STOP.
(5)
k ← k + 1.
(6)
for i = 1, . . . , n do
XOi ← xi .
(7)
OUTPUT(”反復回数の限界を超えました”);
STOP
===================================================
次に,もっと一般的な行列の反復法
x(k) = T x(k−1) + c, x(0) は任意
の収束について考える。
補助定理 7.1 スペクトル半径 ρ(T ) が ρ(T ) < 1 を満たすならば,(I − T )−1 が存在し,
∞
(I − T )−1 = I + T + T 2 + · · · =
Ti
i=0
である。
証明 T x = λx は (I − T )x = (1 − λ)x のとき成り立つ。よって,λ は T の固有値であり,
1 − λ は I − T の固有値である。しかし,|λ| ≤ ρ(T ) < 1 より,λ = 1 は T の固有値では
ない。つまり,0 は I − T の固有値にはなれない。したがって,(I − T )−1 は存在する。
Sm = I + T + T 2 + · · · + T m とおくと,
(I − T )Sm = (I + T + T 2 + · · · + T m ) − (T + T 2 + · · · + T m+1 ) = I − T m+1
となる。ここで,定理 7.6 より,T は収束することを用いると,
lim (I − T )Sm = lim (I − T m+1 ) = I
m→∞
m→∞
よって,
∞
(I − T )−1 = lim Sm = I + T + T 2 + · · · =
m→∞
となる。
Ti
i=0
7.3. 反復法による連立方程式の解法
41
定理 7.7
x(k) = T x(k−1) + c, k ≥ 1
で定義された数列 {x(k) } が,Rn 内のどのような点 x(0) に対しても,x = T x + c の一意
の解に収束するための必要十分条件は ρ(T ) < 1 である。
証明 まず,
x(k)
=
T x(k−1) + c
=
T (T x(k−2) + c) + c
=
..
.
T 2 x(k−2) + (T + I)c
=
T (k) x(0) + (T k−1 + · · · + T + I)c
より,ρ(T ) < 1 であると仮定すると,行列 T は収束し,その極限値は
lim T k x(0) = 0
m→∞
となる。また,補助定理 7.1 より,
∞
Ti
lim x(k) = lim T k x(0) +
k→∞
k→∞
c = 0 + (I − T )−1 c = (I − T )−1 c
i=0
となるので,ベクトル列 {x(k) } はベクトル x ≡ (I − T )−1 c つまり x = T x + c に収束
する。
逆を証明するには,定 refteiri7-17 より,Rn のどんなベクトル x に対しても,
lim T k z = 0
k→∞
であることを示せばよい。そこで,z を任意のベクトルし,x を x = T x + c の一意の解で
あるとする。x(0) = x − z,x(k) = T x(k−1) + c とおくと,{x(k) } は x に収束する。また,
x − x(k) = (T x + c) − (T x(k−1) + c) = T (x − x(k−1) )
より,
x − x(k) = T (x − x(k−1) ) = T 2 (x − x(k−2) ) = · · · = T k (x − x(0) ) = T k z
となる。したがって,
lim T k z = lim T k (x − x(0) ) = lim (x − x(k) ) = 0
l→∞
となる。
k→∞
k→∞
42
第 7 章 行列を用いた反復法
系 7.2 全ての自然ノームで T < 1 で,c は定数ベクトルならば,
x(k) = T x(k−1) + c
(0)
で定義されたベクトル列 {x(k) }∞
∈ Rn に対しても x ∈ Rn に収束し,以
k=0 はどんな x
下の誤差限度を保っている。
1.
x − x(k) ≤ T
2.
x − x(k) ≤
k
T k
1− T
x(0) − x
x(1) − x(0)
すでに,Jacobi や Gauss-Seidel の反復法は,行列
Tj = D−1 (L + U ) または Tg = (D − L)−1 U
を用いることにより,
x(k) = Tj x(k−1) + cj または x(k) = Tg x(k−1) + cg
で表されることを見てきた。
もし,スペクトル半径 ρ(Tj ) または ρ(Tg ) が1より小さければ,ベクトル列 {x(k) }∞
k=0
は Ax = b の解 x に収束する。
例えば,
x(k) = D−1 (L + U )x(k−1) + D−1 b
において,{x(k) }∞
k=0 が x に収束するならば,
x = D−1 )L + U )x + D−1 b
となり,これより
Dx = (L + U )x + b または (D − L − U )x = b
を得る。ここで,D − L − U = A より,x は Ax = b の解である。
定理 7.8 行列 A が狭義の対角優勢行列ならば,全ての x(0) に対して,Jacobi 法も Gauss-
Seidel 法も連立方程式 Ax = b の一意の解に収束するベクトル列 {x(k) } を生成する。
˜ ∈ Rn が連立方程式 Ax = b の解の近似ならば,x
˜ の剰余ベクトル (residual
定義 7.9 x
vector) は r = b − A˜
x である。
7.3. 反復法による連立方程式の解法
43
ここでは,いかにして剰余ベクトルをすばやく零に持っていくことができるかについて
考えてみる。
(k)
xi
(k)
(k)
(k)
(k−1)
= (x1 , x2 , . . . , xi−1 , xi
(k)
を Gauss-Seidel 法における近似ベクトル xi
(k)
ri
(k)
, . . . , x(k−1)
)t
n
とし,
(k)
(k)
= (r1i , r2i , . . . , rni )t
(k)
を Gauss-Seidel 法における近似ベクトル x(k) に対する剰余ベクトルとする。ri
成分は
i−1
(k)
rmi = bm −
(k)
amj xj
n
i−1
(k)
rmi = bm −
(k)
amj xj
(k−1)
−
amj xj
j=1
または
の第 m
j=i
n
(k−1)
−
j=1
amj xj
(k−1)
− ami xi
j=i+1
である。特に,第 i 成分は
(k)
rii
i−1
= bi −
(k)
aij xj
n
j=1
(k−1)
aij xj
(k−1)
− aii xi
j=i+1
より
aii xi
(k−1)
−
i−1
(k)
+ rii = bi −
(k)
aij xj
n
(k−1)
−
j=1
aij xj
(7.4)
j=i+1
(k)
となる。しかし,Gauss-Seidel 法では,xi は

i−1
1 
(k)
(k)
bi −
aij xj −
xi =
aii
j=1

n
(k−1) 
aij xj
(7.5)
j=i+1
である。よって,式 (7.4) は
(k−1)
aii xi
(k)
(k)
+ rii = aii xi
(k)
と表すことができる。したがって,Gauss-Seidel 法は xi
(k)
xi
(k−1)
= xi
と選ぶことで特徴づけることができる。
を
(k)
+
rii
aii
(7.6)
44
第 7 章 行列を用いた反復法
Gauss-Seidel 法と剰余ベクトルについて他の関係も導くことができる。ベクトル
(k)
(k)
(k)
(k−1)
xi+1 = (x1 , . . . , xi , xi+1 , . . . , x(k−1)
)t
n
(k)
に対する剰余ベクトル ri+1 を考える。第 i 成分は
(k)
ri,i+1
i
(k)
= bi −
aij xj
n
j=1
aij xj
j=i+1
i−1
(k)
= bi −
(k−1)
−
aij xj
n
(k−1)
−
j=1
aij xj
(k)
− aii xi
j=i+1
(k)
(k)
(k)
と表せる。ここで,式 (7.5) より ri,i+1 = 0。これより,Gauss-Seidel 法は xi+1 を ri+1 の
第 i 成分が 0 になるように選ぶことで特徴づけることができる。
(k)
(k)
しかし,1つの剰余ベクトルの成分が0になるように xi+1 を選ぶ方法は ri+1 のノー
ムを小さくするのに最も効率のよい方法だとはいえない。そこで,Gauss-Seidel 法の式
(7.6) を
(k)
rii
(7.7)
aii
と変えると,剰余ベクトルのノームを小さくすることができ,かつ早い収束を得ることがで
きる。式 (7.7) を用いた方法を緩和法 (relaxatin methods) という。また,ω が 0 < ω < 1
のとき,下方緩和法 (under-relaxation methods) といい,Gauss-Seidel 法で収束しな
系で用いることができる。ω > 1 のときは,上方緩和法 (over-relazation methods) と
いい,Gauss-Seidel 法で収束する系の収束速度を高めるのに用いられる。これを連続上方
(k)
xi
(k−1)
= xi
+ω
緩和法 (Successive Over-Relaxation) といい,頭文字をとって SOR という。これは
偏微分方程式の数値解を求めるときに特に有効である。
SOR アルゴリズム
初期近似値 x(0) とパラメタ ω より,Ax = b を解く。
===================================================
入力 連立方程式の次数 n; 行列 A の成分 aij , 1 ≤ i, j ≤ n; 列ベクトル b の成分
bi ; 初期近似値 XO = x(0) の成分 XOi ; 許容限度 T OL; 最大反復回数 N0 .
出力 近似解 x1 , x2 , . . . , xn または エラーメッセージ.
(1)
k ← 1.
(2)
while (k ≤ N ) do (3) − (6)
(3)
for i = 1, . . . , n do
ω(−
(4)
(5)
(6)
xi ← (1 − ω)XOi +
if(|x − XO < T OL) then
OUTPUT(x1 , . . . , xn );
STOP.
k ← k + 1.
for i = 1, . . . , n do
XOi ← xi .
Pi−1
j=1
Pn
aij xj −
j=i+1
aii
aij XOj +bi )
7.4. 誤差限界と反復法の改良
45
(7)
OUTPUT(”反復回数の限界を超えました”);
STOP
===================================================
演習問題 7.3
1. x(0) = 0 のとき,Jacobi 法を用いて最初の2回の反復を求めよ。
(a)
(b)
3x1
3x1
3x1
10x1
−x1
−x2
+6x2
+3x2
+x3 = 1
+2x3 = 0
+7x3 = 4
−x2
+10x2
−2x2
=
−2x3 =
+10x3 =
9
7
6
2. 演習問題1を Gauss-Seidel 法を用いて行え。
3.
演習問題1を ω = 1.1 で SOR 法を用いて行え。
4.
演習問題1を ω = 1.3 で SOR 法を用いて行え。
7.4
誤差限界と反復法の改良
x
˜ が方程式 f (x) = 0 の解 x の近似で |r| = |f (˜
x)| が小さいならば,|x − x
˜| も小さいと
˜ が線形系 Ax = b の解 x の近似で
思いがちだが必ずしもそうではなかった。同様に,x
˜ も小さいと思いがちだが,これは必ずし
r = b − A˜
x が小さいならば,当然 x − x
もそうではない。次の例題でそのことをみてみよう。
例題 7.11 連立方程式
1
2
1.0001 2
x1
x2
=
3
3.0001
˜ = (3, 0)t における剰余ベクトル r
が与えれらているとき,近似解 x
˜
厳密解 x を求め, x − x
∞
を計算せよ。
∞
を求めよ。また,
46
第 7 章 行列を用いた反復法
解
r
よって, r
∞
=
b − A˜
x
=
3
3.0001
−
1
2
1.0001 2
=
3
3.0001
−
3
3.0003
3
0
0
−0.0002
=
= 0.0002 となる。
次に,厳密解を求めると,x = (1, 1)t となる。これより,
˜
x−x
∞
= (3, 0)t − (1, 1)t
∞
= (2, −1)t
∞
= max{2, 1} = 2
となる。
この例題は,2本の直線の傾きがほぼ同じであるため,方程式の解(2直線の交点)と
離れていても近似解となりうる場合である。
では,このような場合をさければ良いということになるのだが,幾何学的に全ての問題
を捉えることが可能とは限らない。そこで,このような問題を扱うために行列 A のノー
ムを用いる。
˜の
定理 7.9 x
˜ が線形系 Ax = b の解の近似であるとする。また,行列 A は正則で r を x
剰余ベクトルとする。そのとき,全ての自然ノームにおいて
˜ ≤ r · A−1
x−x
が成り立つ。また,x = 0 で b = 0 ならば
˜
x−x
≤ A · A−1
x
r
b
が成り立つ。
解
r = b − A˜
x = Ax − A˜
x
で A は正則より
˜ = A−1 r
x−x
と表せる。また,定理 7.4 より
˜ = A−1 r ≤ A−1
x−x
となる。
r
7.4. 誤差限界と反復法の改良
47
b = Ax より, b ≤ A · x 。したがって,1/ x ≤ A / b となり,
˜
x−x
A · A−1
≤
x
b
r
を得る。
˜ / x は A · A−1 と相対剰余 r / b の積で抑え
この定理より,相対誤差 x − x
ることができる。
定義 7.10 ノーム
· に対する正則行列 A の条件数 (conditional number) は
K(A) = A · A−1
である。
この定義を用いると,定理 7.9 の不等式は
˜ ≤ K(A)
x−x
または
r
A
˜
x−x
r
≤ K(A)
x
b
と表せる。
どんな正則行列 A とノーム
· に対しても
1 = I = A · A−1 ≤ A · A−1 = K(A)
が成り立つ。このことより,K(A) が1に近いとき,行列 A は良条件 (well conditioned)
であるといい,K(A) が1よりかなり大きいとき,行列 A は悪条件 (ill-conditioned で
あるという。これは,小さな剰余誤差ベクトルが正確な近似解であることを表している。
例題 7.12 行列
1
2
1.0001 2
A=
の条件数を求めよ。
解 [K(A) = A · A−1 を求める。
A
∞
= 1.0001 + 2 = 3.0001
より,A のノームは決して大きくないが
A−1 =
1
2 − 2.0002
2
−2
−1.0001
1
t
=−
1
0.0002
2
−2
−1.0001 1
=
−10000 10000
5005
−5000
48
第 7 章 行列を用いた反復法
より
A−1
∞
= | − 10000| + 10000 = 20000
したがって,
K(A) = A · A−1 = (3.0001)(20000) = 60002
となる。
˜に
線形系 Ax = b の解 x の近似を t 桁の Gauss の消去法を用いて求めると,近似解 x
対する剰余誤差 r = b − Ax は
˜
r ≈ 10−t A · x
で与えられることが知られている。この近似より,有効な条件数は A の逆行列を用いなく
ても求めることができる。
49
第 8 章 近似理論
8.1
離散最小2乗法
次のような計測データが与えらたとき,データ点とデータ点の間の点の値を求めること
を考える。
xi
yi
xi
yi
1 1.3
6
8.8
7
8
9
10
10.1
12.5
13.0
15.6
2
3
4
5
3.5
4.2
5.0
7.0
表 8.1:
この表のデータより次のようなグラフを得ることができる。また,このグラフから x と
y の関係は多分1次式で表されるだろうと感じる。
図 8.1:
ここで,直線がデータにぴったり当てはまらない理由は,多分データの誤差のせいだろ
うと考えられる。よって,近似関数がデータにぴったり当てはまると考えるのは妥当では
ない。事実,そのような関数はもともとない振動を引き起こす。そこで,このような問題
50
第 8 章 近似理論
に対処する方法として,このデータに最もぴったりする近似直線 y = a1 x + a0 をみつけ
ることを考える。そのためには,まず,最もぴったりするとはどういうことなのかを理解
する必要がある。そこで,yˆi = a1 xi + a0 を予測値,yi を実測値とする。このとき,予測
値と実測値の差 yi − yˆi を予測誤差といい di で表す。つまり,
di = yi − yˆi = yi − (a1 xi + a0 ).
ここで,最もぴったりする近似直線を見つける問題は
E∞ (a0 , a1 ) = max {|yi − (a1 x + a0 )|}
1≤i≤10
を最小にする a0 , a1 を求める問題と同値である。この問題は一般にミニマックス問題 (min-
imax problem) とよばれ,初等的なアプローチでは扱うことができないことが知られて
いる。
最もぴったりする近似直線を求める別の方法は,
10
E1 (a0 , a1 ) =
|yi − (a1 xi + a0 )|
i=1
を最小にする a0 , a1 を見つける方法である。a0 , a1 を変数とする 2 変数関数 E1 (a0 , a1 ) の
最小値を求めるには,a0 , a1 に対する偏微分を零とおき,その結果生まれた連立方程式を
解けばよい。しかし,絶対値の関数は0で微分可能でないため,この方法では解が得られ
る保証はない。
そこで,紹介するのが最小2乗法 (least squares method) とよばれる方法で,予測誤差
の2乗の和を最小にする方法である。つまり,
10
[yi − (a1 x + a0 )]2 .
E2 (a0 , a1 ) =
i=1
を最小にする方法である。この方法は最良近似 (best fit approximation) 直線を求めるの
に,最も便利な方法であるだけでなく,その理論的な部分も含めて最もよく用いられる。
最小2乗法によってデータに最もよくぴったりする最小2乗近似 (least square approx-
imation) 直線を求めるには,
m
[yi − (a1 x + a0 )]2
E = E2 (a0 , a1 ) =
i=1
を a0 , a1 について最小化しなくてはならない。最小値が存在するには,a0 , a1 による偏微
分が存在し,その値が零にならなければならない。よって,
0=
∂
∂a0
m
m
[(yi − (a1 xi + a0 )]2 = 2
i=1
(yi − a1 xi − a0 )(−)
i=1
8.1. 離散最小2乗法
と
0=
∂
∂a1
51
m
m
[(yi − (a1 xi + a0 )]2 = 2
i=1
(yi − a1 xi − a0 )(−xi )
i=1
を得る。この2つの式を整理すると,a0 , a1 を未知数とする正規方程式 (normal equation)
とよばれる連立方程式を得る。
m
a0 · m + a1
=
i=1
m
m
a0
m
xi
x2i
xi + a1
i=1
yi
i=1
m
=
i=1
xi yi .
i=1
この連立方程式を解くと,
a1
=
a0
=
m
i=1
m
i=1 yi
2 ,
m
m
m ( i=1 x2i ) − ( i=1 xi )
m
m
m
m
2
i=1 xi yi
i=1
i=1 yi −
i=1 xi
2
m
m
m ( i=1 x2i ) − ( i=1 xi )
xi yi −
m
i=1
xi
xi
.
となる。
例題 8.1 表 8.1 のデータを用いて最小2乗近似直線を求めよ。
m
i=1
解 最小2乗近似直線を求めるには,2乗和
x2i と積和
m
i=1
xi yi を求める必要があ
る。そこで,次のような表を用意する。
x2i
xi yi
P (xi ) = 1.538xi − 0.360
1 1.3
1
2 3.5
4
3 4.2
9
4 5.0 169
5 7.0 25
6 8.8 36
7 10.1 49
8 12.5 64
1.3
7.0
12.6
20.0
35.0
52.8
70.7
100.0
1.18
2.72
4.25
5.79
7.33
8.87
10.41
11.94
9 13.0 81
10 15.6 100
117.0
156.0
13.48
15.02
55 81.0 385
572.4
xi
yi
E=
表 8.2:
10
i=1 (yi
− P (xi ))2 ≈ 2.34
52
第 8 章 近似理論
正規方程式より,
a0 =
385(81) − 55(572.4)
= −0.360
10(385) − (55)2
a1 =
10(572.4) − 55(81)
= 1.538
10(385) − (55)2
を得ることができ,これより,P (x) = 1.538x − 0.360 となる。この最小2乗近似直線と
データをグラフにすると次のようになる。
図 8.2:
最小2乗近似直線アルゴリズム
与えられたデータに対する最小2乗近似直線 y = a1 x + a0 を求める。
===================================================
入力 データの数 N ; データ (xi , yi );
出力 最小2乗近似直線 y = a1 x + a0 または エラーメッセージ.
(1)
i ← 0, xsum ← 0, ysum ← 0, sqsum ← 0, prodsum ← 0;
(2)
while (i ≤ N ) do (3) − (4)
(3)
xsum ← xsum + xi ,
ysum ← ysum + yi ,
sqsum ← sqsum + x2i ,
prodsum ← prodsum + xi yi .
prodsum−xsum∗ysum
(4)
a ← m∗sqsum−xsum∗xsum
,
sqsum∗xsum−prodsum∗xsum
b←
.
m∗sqsum−xsum∗xsum
(5)
OUTPUT
STOP
===================================================
データ {(xi , yi ) : i = 1, 2, . . . , m} を n 次の曲線
Pn (x) = an xn + an−1 xn−1 + · · · + a1 x + a0
8.1. 離散最小2乗法
53
で近似することも,最小2乗近似直線を求めるときと同じようにできる。つまり,定数
m
i=1 (yi
a0 , a1 , . . . , an を最小2乗誤差 E2 =
− Pn (xi ))2 が最小になるように選べばよい。
m
E2
(yi − Pn (xi ))2
=
i=1
m
m
m
yi2 − 2
=
i=1
i=1
m
m

i=1
i=1
m
n
i=1
n

m
aj xji  yi +
j=0
yi xji
j=0
aj xji 
j=0
n
aj
+
i=1
2
n

i=1
m
yi2 − 2
=
i=1


yi2 − 2
=
(Pn (xi ))2
Pn (xi )yi +
n
m
aj
xj+k
i
aj ak
j=0
i=1
k=0
最小2乗直線のときと同様に,E2 を最小化するには,∂E2 /∂aj = 0 が全ての j = 0, 1, . . . , n
で成り立つ必要がある。よって,それぞれの j で
m
0=
∂E2
= −2
yi xji + 2
∂aj
i=1
n
m
xj+k
i
ak
i=1
k=0
が成り立つ。これより,n+1 個の未知数に対して,n+1 個の正規方程式 (normal equation)
n
m
m
xj+k
i
ak
i=1
k=0
yi xji , j = 0, 1, . . . , n
=
i=1
が得られる。これは,次のような連立方程式に書き直すと解きやすい。
m
m
x0i
a0
+ a1
i=1
i=1
+ · · · + an
i=1
m
m
x2i + a2
xn+1
i
x3i + · · · + an
i=1
yi x0i
=
i=1
m
i=1
m
xni
i=1
m
x1i + a1
m
x2i
+ a2
i=1
m
a0
m
x1i
yi x1i
=
i=1
i=1
..
.
m
m
i=1
m
m
xn+1
+ a2
i
xni + a1
a0
i=1
xn+2
+ · · · + an
i
i=1
m
x2n
i
yi xni
=
i=1
i=1
これらの正規方程式は xi が異なるならば一意の解を持つことが知られている。
例題 8.2 次のデータに適合する2次の最小2乗多項式を求めよ。
i
1
xi
yi
0
1.0000
2
3
4
0.25
0.50
0.75
1.2840 1.6487 2.1170
表 8.3:
5
1.00
2.7183
54
第 8 章 近似理論
5
i=1
x0i = 5,
を用いると,
解
5
i=1
x1i = 0 + 0.25 + 0.50 + 0.75 + 1.00 = 2.5, ... より,正規方程式
5a0 + 2.5a1 + 1.875a2
=
8.77680
2.5a0 + 1.875a1 + 1.5625a2
=
5.4514
1.875a0 + 1.5625a1 + 1.3828a2
=
4.4015
この方程式を Gauss の消去法のプログラムを用いて解くと,
a0 = 1.0051, a1 = 0.86468, a2 = 0.84316
となる。これより,求める最小2乗多項式は
P2 (x) = 1.0051 + 0.86468x + 0.84316x2
でそのグラフは
図 8.3:
となる。
ときどき,データが指数関係にあると考えるのが妥当なときがある。このような場合は,
近似関数として
y = beax
または
y = bxa
を用いることが考えられる。しかし,このような関数に最小2乗法を用いようとすると,
m
(yi − beaxi )2
E=
i=1
8.1. 離散最小2乗法
55
または
m
(yi − bxai )2
E=
i=1
の最小化を行わなければならない。ここで生じる正規方程式は
m
0
=
∂E
=2
(yi − beaxi )(−eaxi )
∂b
i=1
0
=
∂E
=2
(yi − beaxi )(−bxi eaxi )
∂a
i=1
m
または
m
0
=
∂E
=2
(yi − bxai )(−xai )
∂b
i=1
0
=
∂E
=2
(yi − bxai )(−b(log xi )xai )
∂a
i=1
m
残念ながら,この連立方程式を厳密解く方法は知られていない。
データが指数関係にあると推測されるとき良く用いられる方法は,近似方程式の対数を
考える方法である。
例題 8.3 次のデータの近似曲線を求めよ。
i
xi
yi
log yi
x2i
xi logyi
1
2
3
4
5
1.00
1.25
1.50
1.75
2.00
5.10
5.79
6.53
7.45
8.46
1.629
1.756
1.876
2.008
2.135
1.0000
1.5625
2.2500
3.0625
4.0000
1.629
2.195
2.814
3.514
4.270
表 8.4:
xi と log yi のグラフを描くと,1次の関係があると推測できる。そこで,近似関数は y = beax
または log y = log b + ax となる。正規方程式より,
a=
log b =
(5)(14.422) − (7.5)(9.404)
= 0.5056
(5)(11.875) − (7.5)2
(11.875)(9.404) − (14.422)(7.5)
= 1.122
(5)(11.875) − (7.5)2
56
第 8 章 近似理論
ここで,b = e1.122 = 3.071 より,
y = 3.071e0.5056x
となり,次の表と図を得る。
i
xi
yi
3.071e0.5056x
1
2
3
4
5
1.00
1.25
1.50
1.75
2.00
5.10
5.79
6.53
7.45
8.46
5.09
5.78
6.56
7.44
8.44
表 8.5:
図 8.4:
演習問題 8.1
1. 例題2のデータを用いて最小2乗近似直線を計算せよ。
2. 次のデータを用いて次数1,2,3の最小2乗多項式を求めよ。
xi
1.0
1.1
1.3
yi
1.84 1.96 2.21
1.5
1.9
2.1
2.45 2.94 3.18
3. 次の表は30人の数値解析のクラスの課題の得点と期末試験の点数である。最小2乗
近似直線を求め,この直線を用いて期末で90点以上取るには,課題でどのくらいの得点
8.2. 直交系多項式と最小2乗近似
57
をあげていれば良いかを推測せよ。
8.2
課題
期末
課題
期末
302
45
323
83
325
285
339
334
322
331
279
316
347
343
290
326
233
254
72
54
54
79
65
99
63
65
99
83
74
76
57
45
337
337
304
319
234
337
234
339
343
314
344
185
340
316
99
70
62
66
51
53
51
67
83
42
79
59
75
45
直交系多項式と最小2乗近似
前節では,最小2乗近似を用いてデータに適合する曲線を求めることを考えた。もう1
つの最小近似の応用に,関数の近似がある。
f ∈ C[a, b] であるような関数が与えられたとき,
b
E=
[f (x) − Pn (x)]2 dx
a
を最小にするような n 次の多項式 Pn (x) を求めるという問題である。
E を最小にするような多項式を最小2乗近似多項式をいう。
n
n
n−1
Pn (x) = an x + an−1 x
ak xk
+ · · · + a1 x + a0 =
k=0
ak xk
f (x) −
a
2
n
b
E ≡ E(a0 , a1 , . . . , an ) =
dx
k=0
とおく。問題は,E を最小にする係数 a0 , a1 , . . . , an を求めることである。そのための必
58
第 8 章 近似理論
要条件は
∂E
= 0, j = 0, 1, . . . , n
∂aj
である。
n
b
b
2
[f (x)] dx − 2
E=
a
ak
∂E
= −2
∂aj
b
k
ak x
a
n
xj f (x)dx + 2
a
b
ak
k=0
2
n
x f (x)dx +
a
k=0
なので,
b
k
dx
k=0
xj+k dx
a
となる。よって,多項式 Pn (x) を求めるには n + 1 個の正規方程式
n
b
ak
a
k=0
b
xj+k dx =
xj f (x)dx, j = 0, 1, . . . , n
a
を n + 1 個の未知数 aj について解く必要がある。f ∈ C[a, b] ならば,この正規方程式は
必ず一意の解を持つことが知られている。
例題 8.4 区間 [0, 1] において関数 f (x) = sin πx に対する2次の最小2乗近似多項式を求
めよ。
解 P2 (x) = a2 x2 + a1 x + a0 の正規方程式は
1
a0
1
1dx + a1
0
1
a0
0
1
xdx + a1
0
1
a0
1
xdx + a2
0
x dx + a2
0
x2 dx + a1
0
0
1
3
x dx =
0
1
sin πxdx = −[
0
1
2
1
x2 dx =
0
1
x3 dx + a2
1
x4 dx =
0
1
1
cos πx]10 =
π
π
1
1
x sin πxdx = −[ x cos πx]10 =
π
π
x2 sin πxdx =
0
π2 − 4
π3
となる。これより,
1
1
2 1
1
1
1 1
1
1
π2 − 4
a0 + a1 + a2 = , a0 + a1 + a2 = , a0 + a1 + a2 =
2
3
π 2
3
4
π 3
4
5
π3
となり,この連立の方程式を解くと。
a0 =
12π 2 − 120
720 − 60π 2
≈ −0.050465, a1 = −a2 =
≈ 4.12251
3
π
π3
したがって,f (x) = sin πx に対する2次の最小2乗近似多項式は
P2 (x) = −4.12251x2 + 4.12251x − 0.050465
8.2. 直交系多項式と最小2乗近似
59
となる。
この例題からも分かるように,最小2乗近似多項式を求めるには,(n + 1) × (n + 1) の
連立方程式を解かなければならないし,係数は
b
xj+k dx =
a
bj+k+1 − aj+k+1
j+k+1
で与えられるので,この連立方程式の数値解は簡単に得ることができない。このような連
立方程式から作られる行列を Hilbert の行列 (Hilbert matrix) という。
そこで,別の方法で最小2乗近似を求めることを考える。まずは線形代数で学んだいく
つかの定義が必要となる。
定義 8.1 関数の集合 {φ0 , φ1 , . . . , φn } が区間 [a, b] 上で1次独立 (linearly independent)
であるとは,
c0 φ0 (x) + c1 φ1 (x) + · · · + cn φn (x) = 0, x ∈ [a, b]
ならば,c0 = c1 = · · · = cn = 0 が言えることである。そうでないとき,つまり,ci が0
以外でも上の式が成り立つとき,関数の集合は1次従属 (linearly dependent) という。
定理 8.1 φj (x) が次数 j の多項式ならば,区間 [a, b] 上で {φ0 , φ1 , . . . , φn } は1次独立で
ある。
証明 実数 c0 , c1 , . . . , cn を用いて {φ0 , . . . , φn } の1次結合を考える。
P (x) = c0 φ0 (x) + c1 φ1 (x) + · · · + cn φn (x) = 0
より,多項式 P (x) は区間 [a, b] で消滅するので,P (x) は零多項式である。よって,全て
の係数は零である。ということは,xn の係数も零である。しかし,cn φn (x) 以外に xn の
係数を含んでいるものはない。よって cn = 0 となり
n−1
P (x) =
cj φj (x)
j=0
と表せる。ここで,xn−1 を含んでいる項は cn−1 φn−1 だけである。よって,cn−1 = 0 と
なり
n−2
P (x) =
cj φj (x)
j=0
を得る。以下同様にして,cn−2 , cn−3 , . . . , c1 , c0 は全て零である。よって,{φ0 , φ1 , . . . , φn }
は1次独立。
60
第 8 章 近似理論
例題 8.5 φ0 (x) = 2, φ1 (x) = x−3, φ2 (x) = x2 +2x+7 からなる集合 {φ0 , φ1 , φ2 } は区間
[a, b] 上で1次独立であることを示しなさい。また,< φ0 , φ1 , φ2 >= {c0 φ0 +c1 φ1 +c2 φ2 , ci ∈
R} とすると,Q(x) = a0 + a1 x + a2 x2 ∈< φ0 , φ1 , φ2 > であることを示しなさい。
解 φj (x) は次数 j の多項式。したがって,定理 8.1 より区間 [a, b] 上で 1 次独立である。
次に,Q(x) は {φ0 , φ1 , φ2 } の1次結合であることを示す。まず,
1=
x2
3
1
φ0 , x = φ1 (x) + 3 = φ1 (x) + φ0 (x)
2
2
3
1
φ2 (x) − 2x − 7 = φ2 (x) − 2 φ1 (x) + φ0 (x) − 7 φ0
2
2
13
φ2 (x) − 2φ1 (x) − φ0
2
=
=
より
Q(x) =
=
1
3
13
φ0 + a1 φ1 (x) + φ0 (x) + a2 φ2 (x) − 2φ1 (x) − φ0 (x)
2
2
2
1
3
13
a0 + a1 − a2 φ0 (x) + (a1 − 2a2 )φ1 (x) + a2 φ2 (x)
2
2
2
a0
この例題で扱った問題はもっと一般的な場合へと拡張できる。
n
を次数 n 以下の多項
式の集まりとすると,次のような定理が成り立つ。
定理 8.2 {φ0 (x), φ1 (x), . . . , φn (x)} を
n
n
内の1次独立な多項式の集まりとするならば,
内のどんな多項式も φ0 (x), φ1 (x), . . . , φn (x) の1次結合で一意的に表すことができる。
もっと一般的な関数近似を学ぶには,重み関数と直交の概念が必要となる。
定義 8.2
積分可能な関数 w が区間 I 上で w(x) ≥ 0 であり,I のどの部分区間でも
w(x) ≡ 0 であるとき,w を重み関数 (weight function) という。
{φ0 , φ1 , . . . , φn } は区間 [a, b] で1次独立,w は重み関数とする。関数 f ∈ C[a, b] を P (x) =
n
k=0 ak φk (x) を用いて近似するには,
2
n
b
E(a0 , a1 , . . . , an ) =
w(x) f (x) −
a
ak φk (x)
dx
k=0
の最小化を行わなければならない。もし,w(x) ≡ 1, φk (x) = xk ならば,この問題はこの
節の最初に考えた問題と同じである。
0=
∂E
=2
∂aj
n
b
ak φk (x) φj (x)dx
w(x) f (x) −
a
k=0
8.2. 直交系多項式と最小2乗近似
61
より正規方程式は
n
b
w(x)f (x)φj (x)dx =
a
b
ak
w(x)φk (x)φj (x)dx, j = 0, 1, . . . , n
a
k=0
となる。ここで,関数 φ0 , φ1 , . . . , φn が
b
0
αj > 0
w(x)φk (x)φj (x)dx =
a
j=k
j=k
(8.1)
を満たすと,正規方程式は
b
b
w(x)f (x)φj (x)dx = aj
a
w(x)[φj (x)]2 dx = aj αj
a
となるので,aj は次のようにして簡単に求まる。
aj =
1
αj
b
w(x)f (x)φj (x)dx
a
よって,最小2乗近似問題は φ0 , φ1 , . . . , φn が式 (8.1) を満たせばぐっと簡単になる。
定義 8.3 {φ0 , φ1 , . . . , φn } が
b
0
αj > 0
w(x)φk (x)φj (x)dx =
a
j=k
j=k
を満たすとき,重み関数 w に対して直交系 (orthogonal system) であるといい,さらに,
全ての k において αk = 1 のとき,正規直交系 (orthonormal system) という。
定理 8.3
{φ0 , φ1 , . . . , φn } が区間 [a, b] で,重み関数 w に対して直交系をなすならば,
f ∈ C[a, b] の重み関数 w に対する最小2乗近似は
n
P (x) =
ak φk (x)
k=0
ただし,k = 0, 1, . . . , n に対して
ak =
b
a
w(x)φk (x)f (x)dx
b
a
w(x)[φk (x)]2 dx
=
1
αk
b
w(x)φk (x)f (x)dx
a
次の定理は Gram-Schmidt の直交化をもとに,いかに直交系の多項式を作るかを教えて
くれる。
62
第 8 章 近似理論
定理 8.4 次のように定義された多項式の集合 {φ0 , φ1 , . . . , φn } は区間 [a, b] で重み関数 w
に対して直交系をなす。
φ0 (x) ≡ 1, φ1 (x) = x − B1
ただし,
b
xw(x)[φ0 (x)]2 dx
a
b
w(x)[φ0 (x)]2 dx
a
B1 =
k ≥ 2 に対して,
φk (x)(x − Bk )φk−1 (x) − Ck φk−2 (x)
ただし,
b
xw(x)[φk−1 (x)]2 dx
a
b
w(x)[φk−1 (x)]2 dx
a
Bk =
b
a
Ck =
xw(x)φk−1 (x)φk−2 (x)dx
b
a
w(x)[φk−2 (x)]2 dx
定理 8.4 は,直交系の多項式を漸化的に作り出す方法を示している。また,証明は帰納法
を多項式 φn (x) の次数に用いることにより完成する。
系 8.1 定理 8.4 の多項式 {φ0 , φ1 , . . . , φn } は区間 [a, b] で1次独立である。また,次数
k < n であるどんな多項式 Qk (x) に対しても
b
w(x)φn (x)Qk (x)dx = 0
a
が成り立つ。
証明 φn (x) は n 次の多項式。したがって,定理 8.1 より {φ0 , φ1 , . . . , φn } は1次独立。Qk
を次数 k の多項式とすると,定理 8.2 より,
k
Qk (x) =
cj φj (x)
j=0
となる定数,c0 , c1 , . . . , cn が存在する。ここで,φn は φj に j = 0, 1, . . . , k < n において
直交することに注意すると,
,
k
b
w(x)Qk (x)φn (x)dx =
a
となる。
j=0
k
b
cj
w(x)φj (x)φn (x)dx =
a
cj · 0 = 0
j=0
8.3. Chebyshev の多項式と整級数の経済化
63
例 8.1 Legendre の多項式 {Pn (x)} は区間 [−1, 1] で重み関数 w(x) ≡ 1 に対して直交系
をなしている。Legendre の多項式は全ての n において Pn (1) = 1 であり,漸化的に多項
式を形成していく。定理 8.4 における漸化式を利用すると,P0 (x) ≡ 1 より,
B1 =
1
xdx
−1
1
dx
−1
また,
B2 =
1
−1
1
−1
= 0, P1 (x) = (x − B1 )P0 (x) = x
x3 dx
x2 dx
= 0, C2 =
1
x2 dx
−1
1
1dx
−1
=
よって
P2 (x) = (x − B2 )P1 (x) − C2 P0 (x) = (x − 0)x −
1
3
1
1
· 1 = x2 −
3
3
演習問題 8.2
1. 次の関数に対する1次の最小2乗近似多項式を求めよ。
(a) f (x) = x2 + 3x + 2, [0, 1]
(b) f (x) = x1 , [1, 3]
(c) f (x) =
1
2
cos x +
1
3
sin 2x, [0, 1]
2. 1 の関数に関して,2次の最小2乗近似多項式を求めよ。
8.3
Chebyshev の多項式と整級数の経済化
Chebyshev 多項式 (Chebyshev polynomial){Tn (x)} は区間 (−1, 1) で重み関数 w(x) =
(1 − x2 )−1/2 に対して直交系である。前節と同じ方法で導き出すことができるが,先に定
義を与えて,あとで確かに直交系であることを示すほうが簡単である。
x ∈ [−1, 1] のとき,
Tn (x) = cos[n arccos x]
と定義する。この定義から Tn (x) が多項式であることを見抜くのは難しい。そこで,
例題 8.6 Tn (x) は多項式であることを示せ。
解 まず,
T0 (x) = cos 0 = 1, T1 (x) = cos (arccos x) = x.
次に,n > 1 に対して,θ = arccos x とおくと
64
第 8 章 近似理論
Tn+1 (x) = cos((n + 1)θ) = cos(nθ) cos θ − sin(nθ) sin θ
Tn−1 (x) = cos(nθ) cos θ + sin(nθ) sin θ
より
Tn+1 (x) + Tn−1 (x) = 2 cos(nθ) cos θ = 2xTn (x)
となる。ここで,T0 (x) = 1, T1 (x) = x より,漸化式 Tn (x) は次数 n の多項式であること
が分かる。
この漸化式を用いて Chebyshev の多項式を幾つか求めてみよう。
T2 (x)
=
2xT1 (x) − T0 (x) = 2x2 − 1
T3 (x)
=
2xT2 (x) − T1 (x) = 4x3 − 3x
T4 (x)
=
2xT3 (x) − T2 (x) = 8x4 − 8x2 + 1
T1 , T2 , T3 , T4 のグラフを描くと次のようになる。
図 8.5:
例題 8.7 {Tn (x)} は直交系であることを示せ。
解
1
Tn (x)Tm (x)
√
dx =
1 − x2
−1
ここで,θ = arccos x より,
1
−1
cos(n arccos x) cos(m arccos x)
√
dx
1 − x2
dθ = − √
1
dx
1 − x2
よって
1
−1
Tn (x)Tm (x)
√
dx = −
1 − x2
0
π
cos(nθ) cos(mθ)dθ =
π
cos(nθ) cos(mθ)dθ
0
8.3. Chebyshev の多項式と整級数の経済化
となる。
65
1
[cos((n + m)θ) + cos((n − m)θ)]
2
cos(nθ) cos(mθ) =
に注意すると,
1
−1
Tn (x)Tm (x)
√
dx =
1 − x2
=
=
1
2


π
cos((n + m)θ)dθ +
0
1
2
1
2(n+m) sin((n + m)θ)
1
1 π
4n sin(2nθ) + 2 θ 0

0
+
π
cos((n − m)θ)dθ
0
1
2(n−m)
sin((n − m)θ)
π
0
n=m
n=m
π
2
となる。
Chebyshev の多項式は近似誤差の最小化に用いられる。例えば,
1. Lagrange の補完法における誤差の最小化を補完点を最適の場所に置くことにより
行う。
2. 正確さを失わずに近似多項式の次数の低減を行う。
定理 8.5 Chebyshev の多項式 Tn (x), n ≥ 1 は [−1, 1] の間の
x
¯k = cos
2k − 1
π
2n
で零を持つ。さらに,Tn (x) は極値を
x
¯k = cos
kπ
n
で持ち,その値は
Tn (¯
xk ) = (−1)k
である。
証明 x
¯k = cos
2k − 1
π
2n
のとき,
Tn (¯
xk ) = cos(n arccos x
¯k ) = cos n arccos cos
2k − 1
π
2n
= cos
2k − 1
π
2
=0
よって,それぞれの x
¯k は Tn の異なる零である。また,Tn の次数は n であるから,Tn の
全ての零はこの形である。
66
第 8 章 近似理論
定理の後半部分を示すには,まず
Tn (x) =
d
n sin(n arccos x)
√
[cos(n arccos x)] =
dx
1 − x2
に注意する。k = 1, 2, . . . , n − 1 のとき,
Tn (¯
xk ) =
n sin n arccos cos
kπ
n
1 − cos
kπ
n
2
=
n sin(kπ)
=0
sin kπ
n
となる。Tn (x) は n 次の多項式であるから,その導関数 Tn (x) の次数は n − 1 である。ま
た,Tn (x) の零は n − 1 箇所でおきる。よって,これらの点以外で Tn (x) が極値を取るこ
とができるのは,端点だけである。つまり,x
¯0 = 1 と x
¯n = −1。
これより,k = 0, 1, . . . , n のとき,
Tn (¯
xk ) = cos n arccos cos
kπ
n
= cos(kπ) = (−1)k
となり,最大値は k が偶数のとき,最小値は k が奇数のときに起こる。
モニック (最高次の係数が1)Chebyshev 多項式 T˜n (x) は Chebyshev 多項式 Tn (x) の最
高次の係数を 2n−1 で割ることにより導くことができる。したがって,
T˜0 (x) = 1, T˜n (x) =
1
Tn (x), n ≥ 1
2n−1
となる。Chebyshev 多項式が満たす漸化式より,
T˜2 (x) =
T˜n+1 (x) =
1
xT˜1 (x) − T˜0 (x)
2
1
˜
xTn (x) − T˜n−1 (x), n ≥ 2
4
が得られる。T˜1 , T˜2 , T˜3 , T˜4 , T˜5 のグラフは図 8.6 に示されている。T˜n (x) は Tn (x) の定数倍
より,定理 8.5 を用いると T˜n (x) の零も Tn (x) の零と同じ場所
x
¯k = cos
2k − 1
π , k = 1, 2, . . . , n
2n
でおきる。また,T˜n (x) の極値も Tn (x) の極値と同じ場所でおき,
x
¯k = cos
となる。
kπ
n
(−1)k
, T˜n (¯
xk ) = n−1
2
8.3. Chebyshev の多項式と整級数の経済化
67
図 8.6:
次数 n のモニック多項式の集合を ˜ n で表す。
定理 8.6 多項式 T˜n (x) は次の性質を持っている。全ての Pn (x) ∈ ˜ n において
1
= max |T˜n (x)| ≤ max |Pn (x)|
2n−1
x∈[−1,1]
x∈[−1,1]
が成り立つ。ここで,等号は Pn ≡ T˜n のとき成り立つ。
証明 Pn (x) ∈ ˜ n において
max |Pn (x)| ≤
x∈[−1,1]
1
2n−1
= max |T˜n (x)|
x∈[−1,1]
が成り立つと仮定する。Q = T˜n − Pn とおくと,T˜n (x) と Pn (x) は共に n 次のモニック多
項式より,Q(x) は最高次数 n − 1 の多項式である。さらに,T˜n (x) の極値を取る点で
(−1)k
Q(¯
xk ) = T˜n (¯
xk ) − Pn (¯
xk ) = n−1 − Pn (¯
xk )
2
を満たす。ここで,
1
2n−1
が k = 0, 1, 2, . . . , n で成り立つことに注意すると
|Pn (¯
xk )| ≤
Q(¯
xk )
≤0
k 奇数
≥0
k 偶数
Q は連続より,中間値の定理を用いると,多項式 Q(x) は少なくとも1つの零を j =
0, 1, . . . , n − 1 において x
¯j と x
¯j+1 の間に持つ。したがって,Q は少なくとも n 個の零
を区間 [−1, 1] の間に持つ。しかし,Q(x) の次数は n 未満。したがって,Q ≡ 0 となり,
Pn (x) ≡ T˜n .
68
第 8 章 近似理論
系 8.2 P( x) が最高次数 n の補間多項式で,そのノードが T˜n+1 (x) の根であるならば,
f ∈ C n+1 [−1, 1] に対して,
max |f (x) − P (x)| ≤
x∈[−1,1]
1
max |f (n+1) (x)|
2n (n + 1)! x∈[−1,1]
が成り立つ。
このテクニックは
1
[(b − a)x + a + b]
2
とおくことにより一般の閉区間 [a, b] に拡張することができる。
x
˜=
例題 8.8 f (x) = xex , x ∈ [0, 1.5] に対して最高次数3次の補間多項式をノード x0 =
0, x1 = 0.5, x2 = 1, x3 = 1.5 を用いて求めよ。
解 Lagrange の補間多項式より,
L0 (x) =
(x − x1 )(x − x2 )(x − x3 )
= −1.333x3 + 4.0000x2 − 3.6667x + 1
(x0 − x1 )(x0 − x2 )(x0 − x3 )
L1 (x) =
4.0000x3 − 10.000x2 + 6.0000x
L2 (x) =
−4.0000x3 + 8.0000x2 − 3.0000x
L3 (x) =
1.3333x3 − 2.000x2 + 0.66667x
よって
P3 (x)
= f (0)L0 (x) + f (0.5)L1 (x) + f (1.0)L2 (x) + f (1.5)L3 (x)
= 1.3875x3 + 0.056570x2 + 1.2730x
例題 8.9 f (x) = xex , x ∈ [0, 1.5] に対して最高次数3次の補間多項式を T˜4 の零を用いて
求めよ。
解 T˜4 の零 x
¯k = cos((2k + 1)/8)π を区間 [0, 1.5] に適用できるようにすると
x
˜k =
1
[(1.5 − 0)¯
xk + (1.5 + 0)] = 0.75 + 0.75¯
xk
2
これを用いて
x
˜0 = 1.44291, x
˜1 = 1.03701, x
˜2 = 0.46299, x
˜3 = 0.05709
8.4. 有理関数近似
69
を求める。これより,ノードにおける Lagrange 多項式の係数を計算すると
˜ 0 (x)
L
=
˜ 1 (x)
L
= −4.3799x3 + 8.5977x2 − 3.4026x + 0.16705
˜ 2 (x)
L
= 4.3799x3 − 11.112x2 + 7.1738x − 0.37415
˜ 3 (x)
L
= −1.8142x3 + 5.3390x2 − 4.7976x + 1.2568
1.8142x3 − 2.8249x2 + 1.0264x − 0.049728
よって,3次補間多項式は
P˜3 (x) = 1.3811x3 + 0.044652x2 + 1.3031x − 0.014352
となる。
演習問題 8.3
1. T˜3 の零を用いて,区間 [−1, 1] における以下の関数の次数2の補間多項式を求めよ。
(a) f (x) = ex
(b) f (x) = sin x
(c) f (x) = log(x + 2)
2. T˜3 の零を用いて,以下の関数の次数2の補間多項式を求めよ。
(a) f (x) = x1 , [1, 3]
(b) f (x) = e−x , [0, 2]
(c) f (x) = x log x, [1, 3]
8.4
有理関数近似
多項式を近似に用いるには次のような利点がある。
1. 連続関数を近似するために必要な十分の多項式の数がある。
2. 多項式は簡単に値の計算ができる。
3. 微分および積分が存在し,それらが簡単に求められる。
しかし,欠点もある。欠点の1つとして多項式は振動しやすく,この振動による誤差が誤
差限界を大きくしてしまう。そこで,多項式のよい性質を保ちながら振動の少ない有理関
数による近似を考える。
70
第 8 章 近似理論
定義 8.4 次数 N の有理関数 r(x) とは,多項式 p(x), q(x) の商
r(x) =
p(x)
q(x)
で与えられ,p(x) と q(x) の次数の和が N になるものである。
例えば,
p(x)
p0 + p1 x + · · · + pn xn
=
q(x)
q0 + q1 x + · · · + qm xm
r(x) =
は次数 N = n+m の有理関数である。r が x = 0 で定義されるためには,q0 = 0 である。実
際,q0 = 1 とおくことができる。よって,N + 1 個のパラメタ q1 , q2 , . . . , qm , p0 , p1 , . . . , pn
を使って,関数 f を近似することができる。
Pad´
e の近似テクニックは Taylor 多項式近似の有理関数への拡張である。k = 0, 1, . . . , N
の n + 1 個のパラメタを f (k) (0) = r(k) (0) となるように選ぶ。n = N で m = 0 のとき,
Pad´e 近似は単なる Maclaurin 多項式である。
f (x) を有理関数 r(x) で近似することを考える。
f (x) − r(x) = f (x) −
f (x)
p(x)
f (x)q(x) − p(x)
=
=
q(x)
q(x)
∞
i=0
ここで,f の Maclaurin 展開が f (x) =
f (x) − r(x) =
∞
i=0
m
i
i=0 qi x
−
q(x)
n
i=0
pi xi
ai xi で与えられるとする。すると,
ai x i
m
i
i=0 qi x
−
n
i=0
pi xi
q(x)
となる。よって,q1 , q2 , . . . , qm , p0 , p1 , . . . , pn をそれぞれの k = 0, 1, . . . , N に対して
f (k) (0) − r(k) (0) = 0
が成り立つように選んでやればよい。ところが,これは f (x) − r(x) が N + 1 個の零を
x = 0 で持つことと同じである。したがって,q1 , q2 , . . . , qm , p0 , p1 , . . . , pn を
∞
m
ai xi
i=0
n
qi xi −
i=0
pi xi q(x)
i=0
が次数 N 以下の項を持たないように選ぶことができる。表記を簡単にするために,pn+1 =
pn+2 = · · · = pN = 0 と qm+1 = qm+2 = · · · = qN = 0 とおく。すると xk の係数は
k
ai qk−i
− pk
i=0
と表せる。よって,Pad´e 近似のための有理関数は N + 1 個の線形方程式
k
ai qk−i − pk , k = 0, 1, . . . , N
i=0
8.4. 有理関数近似
71
を N + 1 個の未知数 q1 , q2 , . . . , qm , p0 , p1 , . . . , pn について解くことにより得ることがで
きる。
例題 8.10 e−x の Maclaurin 展開は
∞
(−1)n n
x
n!
n=0
で与えられる。次数5の Pad´
e 近似を求めよ。
解 n = 3, m = 2 とすると,
1−x+
x2
x3
−
+ ···
2
6
(1 + q1 x + q2 x2 ) − (p0 + p1 x + p2 x2 + p3 x3 )
より xk の係数を求めることができる。
x5
:
x4
:
x3
:
x2
:
x1
:
0
x
1
1
+ q1 −
120 24
1
1
1
− q1 + q2
24 6
2
1 1
− + q1 − q2
6 2
1
− q1 + q2
2
−1 + q1 = p1
−
1
q2 = 0
6
=0
: 1 = p0
この連立方程式を解くと,
r(x) =
3 2
1 3
1 − 35 x + 20
x − 60
x
2
1 2
1 + 5 x + 20 x
を得る。
Pad´
e の有理関数近似アルゴリズム
関数 f (x) の有理関数近似
r(x) =
p(x)
=
q(x)
n
i
i=0 pi x
m
j
j=0 qj x
を求める。
===================================================
入力 負でない整数 m, n.
出力 係数 q0 , q1 , . . . , qm , p0 , p1 , . . . , pn .
72
第 8 章 近似理論
(1)
(2)
N ← m + n;
for i = 0, 1, . . . , N do
(i)
ai ← f i!(0) .
(3)
q0 ← 1;
p0 ← a0 ;
(4)
for j = 1, 2, . . . , N do (5) − (10).
(5)
for j = 1, 2, . . . , i − 1 do
if(j ≤ n) then
bi,j ← 0.
(6)
if(i ≤ n) then
bi,i ← 0.
(7)
for j = i + 1, i + 2, . . . , N do
bi,j ← 0.
(8)
for j = 1, 2, . . . , i do
if(j ≤ m) then
bi,n+j ← −ai−j .
(9)
for j = n + i + 1, n + i + 2, . . . , N do
bi,j ← 0.
(10)
bi,N +1 ← ai .
(11)-(22) で連立方程式を部分ピボット選択法で解く
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
for i = n + 1, n + 2, . . . , N − 1 do (12) − (18).
部分ピボットの決定 |bk,i | ← maxi≤j≤N |bj,i |.
if(bk,i = 0) then
OUTPUT(”この連立方程式は一意の解を持たない”);
STOP.
if(k = i) then
for j = i, i + 1, . . . , N + 1 do
bcopy ← bi,j ;
bi,j ← bk,j ;
bk,j ← bcopy .
for j = i + 1, i + 2, . . . , N do (16) − (18).
b
xm ← bj,i
.
i,i
for k = i + 1, i + 2, . . . , N + 1 do
bj,k ← bj,k − xm · bi,k .
bj,i ← 0.
if(bN,N = 0) then
OUTPUT(”この連立方程式は一意の解を持たない”);
STOP.
if(m > 0) then
b
+1
qm ← N,N
.
bN,N
for i = N − 1, N − 2, . . . , n + 1 do
b
(22)
(23)
−
PN
bi,j qj−n
.
qi−n ← i,N +1 j=i+1
bi,i
fori = n, n − 1, . . . , 1 do
P
pi ← bi,N +1 − N
j=n+1 bi,j qj−n .
OUTPUT(q0 , q1 , . . . , qm , p0 , p1 , . . . , pn );
STOP.
8.4. 有理関数近似
73
===================================================
例題 8.10 で得た e−x の有理関数近似
r(x) =
3 2
1 3
x − 60
x
1 − 35 x + 20
2
1 2
1 + 5 x + 20 x
は x = 0.2 において,
|e−0.2 − r(0.2)| = |0.81873075 − 0.81873071| = 7.55 × 10−9
という高い精度で近似ができたが x = 1.0 においては
|e−1 − r(1)| = |0.36787944 − 0.36781609| = 6.33 × 10−5
という誤差になった。もともと Pad´e の近似テクニックは,Maclaurin 展開を用いているの
で,区間内でどうしても誤差の大きさに揺れがある。誤差の揺れの少ないものに Chebyshev
の多項式を使う方法がある。Chebyshev の有理関数近似のテクニックは Pad´e のテクニッ
クとほぼ同じで,xk の項を k 次の Chebyshev 多項式 Tk (x) で置き換えてやればよい。
関数 f を N 次の有理関数
n
k=0 pk Tk (x)
m
k=0 qk Tk (x)
r(x) =
で近似することを考える。まず,関数 f (x) を Chebyshev 多項式を用いて次のように表す。
∞
f (x) =
ak Tk (x)
k=0
これより
∞
f (x) − r(x) =
ak Tk (x) −
k=0
または
f (x) − r(x) =
n
k=0
ak Tk (x)
n
k=0 pk Tk (x)
m
k=0 qk Tk (x)
m
k=0 qk Tk (x) −
m
k=0 qk Tk (x)
n
k=0
pk Tk (x)
となる。ここで,係数 q0 , q1 , . . . , qm , p0 , p1 , . . . , pn を上の式の分子において Tk (x) の係数
が零になるように選ぶ。これより
(a0 T0 (x) +
−
a1 T1 (x) + · · · )(T0 (x) + q1 T1 (x) + · · · + qm Tm (x))
(p0 T0 (x) + p1 T1 (x) + · · · + pn Tn (x))
は次数 N 以下の項を持たない。
74
第 8 章 近似理論
ここで,Chebyshev の手順が Pad´e の手順よりプログラムにするのに難しくなる問題が
ある。一つは q(x) と f (x) の級数の積が Chebyshev の多項式どうしであることである。こ
の問題は
1
[Ti+j (x) + T|i−j| (x)]
2
を用いることにより解決する。もう一つの問題は f (x) の Chebyshev 級数の計算である。
理論上これは難しくない。例えば,
Ti (x)Tj (x) =
∞
f (x) =
ak Tk (x)
k=0
とすると,Chebyshev 多項式の直交性より,
a0 =
1
1
π
−1
f (x)
2
√
dx, ak =
2
π
1−x
1
−1
f (x)Tk (x)
√
dx, k ≥ 1
1 − x2
となる。しかし,これらの積分は一般に閉じた形で求められることはなく,数値積分が必
要となる。
例題 8.11 e−x の次数5の Chebyshev 有理関数近似を求めよ。
解 e−x の Chebyshev 展開による最初の5項は
P˜5 (x) = 1.266066T0 (x) − 1.130318T1 (x) + 0.2714957T2 (x) − 0.044337T3 (x)
+ 0.005474T4 (x) − 0.000543T5 (x)
で与えられる。 n = 3, m = 2 の次数5の Chebyshev 有理関数近似を行うには,
P˜5 (x)[T0 (x) + q1 T1 (x) + q2 T2 (x)] − [p0 T0 (x) + p1 T1 (x) + p2 T2 (x) + p3 T3 ]
の係数が零になるように p0 , p1 , p2 , p3 , q1 , q2 を選ぶ必要がある。
Ti (x)Tj (x) =
1
[Ti+j (x) + Ti−j (x)]
2
を用いて整理すると
T0
: 1.266066 − 0.565159q1 + 0.1357485q2 = p0
T1
:
T2
: 0.271495 − 0.587328q1 + 1.268803q2 = p2
T3
:
T4
: 0.005474 − 0.022440q1 + 0.135748q2 = 0
T5
:
−1.130318 + 1.401814q1 − 0.587328q2 = p1
−0.044337 + 0.138485q1 − 0.565431q2 = p3
−0.000543 + 0.002737q1 − 0.022169q2 = 0
8.4. 有理関数近似
75
となる。この式を解くと
rT (x) =
1.055265T0 (x) − 0.613016T1 (x) + 0.077478T2 (x) − 0.004506T3 (x)
T0 (x) + 0.378331T1 (x) + 0.022216T2 (x)
を得る。8。3節で
T0 (x) = 1, T1 (x) = x, T2 (x) = 2x2 − 1, T3 (x) = 4x3 − 3x
であることを学んだ。よって,
rT (x) =
0.977787 − 0.599499x + 0.154956x2 − 0.018022x3
0.977784 + 0.378331x + 0.044432x2
となる。下の表に rT (x) の値と,それと比較するために例題 8.10 で求めた r(x) の値が載
せてある。
x
e−x
|e−x − r(x)|
r(x)
0.2 0.81873075 0.81873075
0.4 0.67032005 0.67031963
0.6 0.54881164 0.54880763
0.8 0.44932896 0.44930966
1.0 0.36787944 0.36781609
−9
7.55 × 10
4.11 × 10−7
4.00 × 10−6
1.93 × 10−5
6.33 × 10−5
rT (x)
|e−x − rT (x)|
0.81872510
0.67031310
0.54881292
0.44933809
0.36787155
5.66 × 10−6
6.95 × 10−6
1.28 × 10−6
9.13 × 10−6
7.89 × 10−6
表 8.6:
Chebyshev 有理関数近似アルゴリズム
関数 f (x) の有理関数近似
r(x) =
p(x)
=
q(x)
n
k=0 pk Tk (x)
m
k=0 qk Tk (x)
を求める。
===================================================
入力 負でない整数 m, n.
出力 係数 q0 , q1 , . . . , qm , p0 , p1 , . . . , pn .
(1)
N ← m R+ n;
π
(2)
a0 ← π2 0 f (cos(θ))dθ;
for k = 1, 2, . . . ,RN + m do
π
ak ← π2 0 f (cos(θ)) cos(kθ)dx.
(3)
q0 ← 1.
(4)
for i = 0, 1, 2, . . . , N do (5) − (9).
(5)
for j = 0, 1, . . . , i do
if(j ≤ n) then
bi,j ← 0.
76
第 8 章 近似理論
(6)
if(i ≤ n) then
bi,i ← 0.
(7)
for j = i + 1, i + 2, . . . , n do
bi,j ← 0.
(8)
for j = n + 1, n + 2, . . . , N do
if(i = 0) then
bi,j ← − 12 (ai+j−n + a|i−j+n| )
else bi,j ← − 12 aj−n .
(9)
if(i = 0 then
bi,N +1 ← ai
else
bi,N +1 ← 12 ai .
((10) − (21) で連立方程式を部分ピボット選択法で解く)
(10) for i = n + 1, n + 2, . . . , N − 1 do (11) − (17).
(11)
部分ピボットの決定 |bk,i | ← maxi≤j≤N |bj,i |.
(12)
if(bk,i = 0) then
OUTPUT(”この連立方程式は一意の解を持たない”);
STOP.
(13)
if(k = i) then
for j = i, i + 1, . . . , N + 1 do
bcopy ← bi,j ;
bi,j ← bk,j ;
bk,j ← bcopy .
(14)
for j = i + 1, i + 2, . . . , N do (15) − (17).
b
(15)
xm ← bj,i
.
i,i
(16)
for k = i + 1, i + 2, . . . , N + 1
bj,k ← bj,k − xm · bi,k .
(17)
bj,i ← 0.
(18) if(bN,N = 0) then
OUTPUT(”この連立方程式は一意の解を持たない”);
STOP.
(19) if(m > 0) then
b
+1
qm ← N,N
.
bN,N
(20) for i = N − 1, N − 2, . . . , n + 1 do
b
−
PN
bi,j qj−n
qi−n ← i,N +1 j=i+1
.
bi,i
(21) for i = n, n − 1, . . . , 1 do
P
pi ← bi,N +1 − N
j=n+1 bi,j qj−n .
(22) OUTPUT(q0 , q1 , . . . , qm , p0 , p1 , . . . , pn );
STOP.
===================================================
演習問題 8.4
1. f (x) = e2x に対する次数2の Pad´e 有理関数近似を求めよ。また,x = 0.2, 0.4, 0.6,
0.8, 1.0 における f (x) の値と比較せよ。
8.5. 三角多項式近似
77
2. f (x) = x log(x + 1) に対する次数3の Pad´e 有理関数近似を求めよ。また,x =
0.2, 0.4, 0.6, 0.8, 1.0 における f (x) の値と比較せよ。
3. f (x) = e−x に対する次数2の Chebyshev 有理関数近似を求めよ。
4. f (x) = cos x に対する次数3の Chebyshev 有理関数近似を求めよ。
8.5
三角多項式近似
任意の関数をサインとコサイン関数の級数を用いて表そうという試みは,1750年代
に弦の振動の研究から始まった。最初にこの問題を考えたのは,D’Alembert(ダランベー
ル) である。そして Euler(オイラー) に受け継がれた。しかし,この問題の答えとして,サ
インとコサインからなる無限級数を使うべきだとしたのは,D. Bernoulli(ベルヌーイ) で
ある。これが今日私たちがフーリー級数として知っているものである。19世紀の前半,
J. Fourier(フーリエ) はこれらの級数を用いて,熱伝導について研究し,完全な理論を作
り上げた。
Fourie 級数を構築するために,最初に必要なことは,
φ0 (x)
=
φk (x)
=
1
2
cos kx, k = 1, 2, . . . , n
φn+k (x)
=
sin kx, k = 1, 2, . . . , n − 1
からなる関数列 {φ0 , φ1 , . . . , φ2n−1 } は区間 [−π, π] で直交系をなすということである。
例題 8.12 関数列 {φ0 , φ1 , . . . , φ2n−1 } は区間 [−π, π] で重み関数 w(x) ≡ 1 に対して直交
系をなすことを示せ。
解
π
φn (x)φm (x)dx =
−π
0
π
n=m
n=m
を示せばよい。まず,
π
1
sin kxdx = − cos kx
k
−π
π
cos kxdx =
−π
π
−π
1
1
= − [cos(kπ) − cos(−kπ)] = − [cos(kπ) − cos(kπ)] = 0
k
k
1
sin kx
k
π
=
−π
1
1
[sin(kπ) − sin(−kπ)] = − [0 − 0] = 0
k
k
78
第 8 章 近似理論
であることに注意する。次に,
sin α sin β
=
cos α cos β
=
sin α cos β
=
より,n = m ならば,
1
[cos(α − β) − cos(α + β)]
2
1
[cos(α − β) + cos(α + β)]
2
1
[sin(α − β) + sin(α + β)]
2
π
φn (x)φm (x)dx = 0.
−π
また,n = m のとき,φn (x) = cos nx または φn (x) = sin nx となり,
π
π
φn (x)φm (x)dx
=
−π
π
−π
π
φn (x)φm (x)dx
=
−π
cos2 nxdx =
sin2 nxdx =
−π
1 + cos(2nx)
2
1 − cos(2nx)
2
π
=π
−π
π
=π
−π
を得る。
φ0 , φ1 , . . . , φ2n−1 からなる集合を Tn とする。この集合は三角多項式 (trigonometric
polynomial) とよばれる。テキストによっては φ2n = sin nx を Tn に含むものもある。
関数 f ∈ C[−π, π] に対して,Tn 内の関数の和
n−1
a0
Sn (x) =
+
2
(ak cos kx + bk sin kx) + an cos nx
k=0
を用いて最小2乗近似を求めたい。
例題 8.12 で示したように,関数列 {φ0 , φ1 , . . . , φ2n } は区間 [−π, π] で重み関数 w(x) ≡ 1
に対して直交系をなす。したがって,定理 8.3 より,f (x) の最小2乗近似は,
ak =
bk =
1
π
1
π
π
f (x) cos kxdx, k = 0, 1, 2, . . . , n
−π
π
f (x) sin kxdx, k = 1, 2, . . . , n − 1
−π
とおくことにより得ることができる。
n → ∞ のときの Sn (x) の極限値は f の Fourier 級数 (Fourier series) とよばれる。
Fourier 級数は常微分方程式,偏微分方程式の解を表すのに用いられる。三角多項式を
Fourier 級数の部分和ということもある。
例題 8.13 f (x) = |x|, −π < x < π を近似する三角多項式を求め,S1 , S2 , S3 を図示せよ。
8.5. 三角多項式近似
79
a0
+
2
Sn (x) =
n
(ak cos kx + bk sin kx)
k=1
における a0 , ak , bk を求めればよい。
a0
=
1
π
π
|x| dx =
−π
2
π
π
xdx =
0
π
2 x2
π 2
=π
0
偶関数
ak
=
1
π
=
2
π
=
bk
=
π
|x| cos kxdx =
−π
1
x sin kx
k
π
0
π
π
2
π
1
−
k
x cos kxdx
0
u=x
dv = cos kx
du = dx v = k1 sin kx
π
sin kxdx
0
2
1
2
− cos kx = 2 [(−1)k − 1]
kπ
k
k
π
0
π
1
|x| sin kx dx = 0
π −π
奇関数
これより,求める三角多項式は
Sn (x) =
π
2
+
2
π
n
k=1
(−1)k − 1
cos kx
k2
となる。次に S1 , S2 , S3 のグラフを下の図に表す。
図 8.7:
f の Fourier 級数は
S(x) = lim Sn (x) =
n→∞
2
π
+
2
π
∞
k=1
(−1)k − 1
cos kx
k2
で与えられる。ここで,| cos kx| ≤ 1 より,この級数は全ての k と x で存在する。
80
第 8 章 近似理論
Fourier 級数が全ての x で,f (x) を近似したのと同じように,大量の飛び飛びのデータ
を補間する離散最小2乗近似 (discrete least square approximation) がある。
例えば,2m 個のデータ {(xi , yi )}2m−1
j=0 が与えられたとする。計算を簡単にするために,
これらのデータは区間 [−π, π] 内に,図のように等間隔で与えれているとする。
図 8.8:
よって,j = 0, 1, . . . , 2m − 1 に対する xj は
xj = −π +
j
m
π
で表される。もし,区間が [−π, π] でないときには,簡単な線形変換
−π +
2π
(x − a)
b−a
でデータを区間 [−π, π] に移すことができる。
離散の場合の最終目標は,
2m−1
[yi − Sn (xj )]2
E(Sn ) =
j=0
を最小化する三角多項式 Sn (x) を決定することである。このためには,定数 a0 , a1 , . . .,
an , b1 , b2 , . . . , bn−1 , bn を
2m−1
E(Sn ) =
j=0
a0
yi −
+
2
2
n−1
(ak cos kxj + bk sin kxj ) + an cos nxj
k=1
が最小になるように選ぶ必要がある。
この定数の決定は,{φ0 , φ1 , . . . , φ2n } が [−π, π] で等間隔に分布した点 {xj } に対して直
交系であることを使えば簡単になる。そこで,まず,等間隔に分布した点 {xj } に対して
直交系であるとは,k = l のとき,
2m−1
φk (xj )φl (xj ) = 0
j=0
が成り立つことである。これを示すにはまず次の補助定理が必要となる。
(8.2)
8.5. 三角多項式近似
81
補助定理 8.1 整数 r が 2m の倍数でないとき,
2m−1
2m−1
cos rxj = 0,
sin rxj = 0
j=0
j=0
さらに,r が m の倍数でないとき,
2m−1
2m−1
(cos rxj )2 = m,
(sin rxj )2 = m
j=0
j=0
が成り立つ。
証明 Euler の公式より,i2 = −1, θ が実数ならば,
eiθ = cos θ + i sin θ
が成り立つ。これより,
2m−1
2m−1
cos rxj + i
j=0
2m−1
sin rxj =
j=0
2m−1
eirxj
(cos rxj + i sin rxj ) =
j=0
j=0
となる。しかし,
eirxj = eir(−π+jπ/m) = e−irπ · eirjπ/m
より,
2m−1
2m−1
j=0
2m−1
sin rxj = e−irπ
cos rxj + i
j=0
eirjπ/m
j=0
2m−1
eirjπ/m は初項1で公比が eirπ/m = 1
となる。ここで,r が 2m の倍数でないので,
j=0
の幾何級数となり,
2m−1
eirjπ/m =
j=0
1 − (eirπ/m )2m
1 − e2irπ
=
irπ/m
1−e
1 − eirπ/m
となり,e2irπ = cos 2rπ + i sin 2rπ = 1 であることに注意すると
2m−1
2m−1
j=0
2m−1
sin rxj = e−irπ
cos rxj + i
j=0
eirjπ/m = 0
j=0
となる。ここで,複素数が零であるためには,複素数の実部と虚部は共に零でなければな
らないので,
2m−1
2m−1
cos rxj = 0,
j=0
sin rxj = 0
j=0
82
第 8 章 近似理論
を得る。
r が m の整数倍でないならば,当然 2m の倍数ではないから,上で求めた結果を利用す
ることができ,
2m−1
2m−1
(cos rxj )2
=
j=0
j=0
1 + cos 2rxj
2

2m−1
=
1
2
を得る。同様に,

2m−1
cos 2rxj  =
1+
j=0
j=0
1
(2m + 0) = m
2
2m−1
(sin rxj )2 = m
j=0
を得ることができる。
これで,式 (8.2) で定義された直交性について示す準備が整った。例えば,
2m−1
2m−1
φk (x)φn+l (xj ) =
j=0
(cos kxj )(sin lxj )
j=0
の場合を考えてみよう。
cos kxj sin lxj =
1
[sin(l + k)xj + sin(l − k)xj ]
2
と表せ,また,l + k ,l − k 共に 2m の倍数ではない。よって,補助定理 8.1 より,


2m−1
2m−1
2m−1
1
1
(cos kxj )(sin lxj ) =
sin(l + k)xj +
sin(l − k)xj  = (0 + 0) = 0
2
2
j=0
j=0
j=0
となる。このテクニックを用いることにより,どんな2組の関数の直交性についても示す
ことができ,次の定理を得ることができる。
定理 8.7
Sn (x) =
a0
+
2
n−1
(ak cos kx + bk sin kx) + an cos nx
k=1
とすると,最小2乗和
2m−1
(yi − Sn (xj ))2
E(a0 , a1 , . . . , an , b1 , b2 , . . . , bn ) =
j=0
8.5. 三角多項式近似
83
は,
ak
=
bk
=
1
m
2m−1
1
m
2m−1
yi cos kxj , k = 0, 1, . . . , n
j=0
yi sin kxj , k = 1, 2, . . . , n − 1
j=0
で最小化される。
証明 証明は ak , bk に対して,E の偏微分を取り 0 とおき,直交性を用いて式を簡単に
する。つまり,
0=
∂E
=2
∂bk
2m−1
[yi − Sn (xj )](− sin kxj )
j=0
とし,次に,
2m−1
0 =
2m−1
yj sin kxj +
j=0
2m−1
=
Sn (xj ) sin kxj
j=0
yj sin kxj −
j=0
n−1
−
2m−1
n
2m−1
sin kxj −
j=0
al
l=1
2m−1
bl
l=1,l=k
a0
2
sin kxj cos lxj
j=0
2m−1
(sin kxj )2
sin kxj sin lxj − bk
j=0
j=0
を得る。ここで,直交性より最初と最後の項以外は全て零となる。また,補助定理 8.1 よ
り,最後の級数の和は m である。したがって,
bk =
1
m
2m−1
yj sin kxj , k = 1, 2, . . . , n
j=0
となる。
例題 8.14 f (x) = x4 − 3x3 + 2x2 − tan x(x − 2) とし,xj = j/5, yj = f (xj ) より生ま
れるデータ {(xj , yj )}9j=0 に対する離散最小2乗近似 S3 (x) を求めよ。
解 まず,区間 [0, 2] を [−π, π] に変換する必要がある。この変換は
zj = π(xj − 1)
によって行うことができる。このとき,データ点は
zj , f (1 +
zj
)
π
9
j=0
84
第 8 章 近似理論
に移る。これより,最小2乗三角多項式は
S3 (z) =
a0
+ a3 cos 3z +
2
2
(ak cos kz + bk sin kz)
k=1
ただし,
ak
bk
=
=
1
5
1
5
9
f (1 +
zj
) cos kzj , k = 0, 1, 2, 3
π
f (1 +
zj
) sin kzj , k = 1, 2
π
j=0
9
j=0
である。
上で求めた和を計算すると
S3 (z) =
−
0.76201 + 0.77177 cos z + 0.017423 cos 2z + 0.0065673 cos 3z
0.38676 sin z + 0.047806 sin 2z
となる。
演習問題 8.5
1. f (x) = x2 , [−π, π] に対する最小2乗三角多項式 S2 (x) を求めよ。
2. f (x) = ex , [−π, π] に対する最小2乗三角多項式 S3 (x) を求めよ。
3.
f (x) =
0 −π < x ≤ 0
1 0<x<π
に対する最小2乗三角多項式 Sn (x) を求めよ。
3. f (x) = x2 sin x に対する離散最小2乗三角多項式 Sn (x) を下の条件で求めよ。
(a) n = 3, m = 6
(b) n = 4, m = 6
8.6
高速 Fourier 変換
前節で 2m 個のデータ点 {(xj , yj }2m−1
j=0 ,ただし,xj = −π + (j/m)π ,に対する n 次の
離散最小2乗三角多項式を求めた。
8.6. 高速 Fourier 変換
85
これらの点に対する補間三角多項式も離散最小2乗三角多項式とほぼ同じである。これ
は最小2乗三角多項式が誤差
2m−1
(yi − Sm (xj ))2
E(Sm ) =
j=0
を最小化し,また,補間三角多項式によるこの誤差は,Sm (xj ) = yj のとき,零になるか
らである。ただし,係数 ak , bk が最小2乗三角多項式のときと,同じ値になるには,多少
の変更が必要である。なぜならば,補助定理 8.1 より
2m−1
(cos rxj )2 = m
j=0
であるが,補間では
2m−1
(cos mxj )2
j=0
の値を必要とする。そして,この値は
2m−1
2m−1
(cos mxj )2 =
j=0
j=0
1 + cos 2mxj
= 2m
2
となる。したがって,ak , bk が離散最小2乗多項式と一致するには,つまり,
ak
bk
=
=
1
m
2m−1
1
m
2m−1
yj cos kxj , k = 0, 1, . . . , m
j=0
yj sin kxj , k = 1, 2, . . . , m − 1
j=0
を満たすには,補間三角多項式は
Sm (x) =
a0 + am cos mx
+
2
m−1
(ak cos kx + bk sin kx)
(8.3)
k=0
と表されなければならない。
この補間三角多項式を有限フーリエ級数といい,ak , bk を求めることを,離散データの
フーリエ変換,ak , bk から離散データを復元することをフーリエ逆変換という。
等間隔で与えられた大量のデータの三角多項式による補間は非常に正確な結果を生む。
この方法は,ディジタル・フィルタリング,量子力学,光学等,数多くのシミュレーション
に適した近似のテクニックである。しかし,1960年代半ばまでは,このテクニックは
あまり利用されなかった。その理由は,2m 個のデータ点の補間を直接行うとおよそ (2m)2
86
第 8 章 近似理論
回の掛け算と (2m)2 回の足し算が必要となり,大量のデータが与えられた場合,処理時間
が莫大であった。さらに,このような計算の場合,まるめ誤差が近似をこえてしまうこと
がよくある。
1965年,J.W. Cooley と J.W. Tukey が雑誌 Mathematics of Computation に,補
間三角多項式の係数 ak , bk を O(m log2 m) 回の掛け算と O(m log2 m) 回の足し算で求める
方法を発表した。これは,直接行う場合と比べどれだけの違いがあるかというと,m = 106
のとき,直接行うとほぼ 1012 回の演算が必要であるが,それに対して,この方法では
O(106 log2 106 ) = O(106 (6 log2 10)) = O(106 ) 回の演算しか必要がない。
この Cooley と Tukey の方法を高速 Fourier 変換 (fast Fourier transform) アルゴ
リズムといい,FFT と書く。FFT は用いるデータ点の数が素因数分解しやすい数とする。
特に,2 の累乗で表される数とする。
FFT では ak , bk を直接求める代わりに,複素三角多項式
1
m
2m−1
ck eikx
k=0
の複素係数
2m−1
yj eikπj/m , k = 0, 1, . . . , 2m − 1
ck =
(8.4)
j=0
を求める。
複素係数 ck がいったん求まれば,Euler の公式
eiθ = cos θ + i sin θ
より,
1
ck (−1)k
m
=
=
=
1
1
ck e−iπk =
m
m
1
m
2m−1
1
m
2m−1
2m−1
yj eikπj/m e−iπk =
j=0
yj cos k −π +
j=0
πj
m
1
m
2m−1
yj eik(−π+(πj/m))
j=0
+ i sin k −π +
πj
m
yj (cos kxj + i sin kxj )
j=0
となる。よって
ak + ibk =
ただし,b0 と bm は零である。
(−1)k
ck
m
(8.5)
8.6. 高速 Fourier 変換
87
演算回数の削減がどのように行われるのか詳しく説明する。
m = 2p の場合を考える。k = 0, 1, . . . , m − 1 のそれぞれに対して
2m−1
2m−1
yj eikπj/m +
ck + cm+k =
j=0
2m−1
yj ei(m+k)πj/m =
j=0
yj eikπj/m (1 + eiπj )
j=0
となるが,
2
0
1 + eiπj =
j 偶数
j 奇数
より,2m の半分の m 項だけ加えればよい。ここで,j を 2j と置き換えると
m−1
y2j eikπ(2j)/m
ck + cm+k = 2
j=0
または,
m−1
y2j eikπj/(m/2)
ck + cm+k = 2
(8.6)
j=0
と表せる。同様にして,
1 − eiπj =
より,
0
2
j 偶数
j 奇数
m−1
ck − cm+k = 2eiπ/m
y2j+1 eikπj/(m/2)
(8.7)
j=0
と表せる。なお,ck と cm+k は式 (8.6) と式 (8.7) より,求めることができるので,この2
つの式により,全ての ck を決定することができる。さらに,式 (8.6) と式 (8.7) は式 (8.4)
と同じ形をしている。違いは,番号 m が m/2 になっている所だけである。
式 (8.4) では,2m 個の係数 c0 c1 , . . . , c2m−1 を求める必要があり,直接計算すると,そ
れぞれの係数に対して 2m 回の複素の掛け算が必要であるので,全体として (2m)2 回の演
算が必要となる。それに対して,式 (8.6) では m 個の係数 k = 0, 1, . . . , m − 1 と,それぞ
れの係数に対して m 回の演算を必要とし,式 (8.7) では,m 個の係数 k = 0, 1, . . . , m − 1
と,それぞれの係数に対して m + 1 回 (y2j+1 と eikπj/(m/2) の複素の掛け算を m 回と
最後に eikπ/m との複素の掛け算) の演算を必要とする。よって,この2つの式を用いて
c0 , c1 , . . . , c2m−1 を計算すると,(2m)2 = 4m2 回の演算を
m · m + m(m + 1) = 2m2 + m
回の演算へと計算回数を減らすことができる。
88
第 8 章 近似理論
ここで,m = 2p であることを利用し,このテクニックを繰り返す。すると,式 (8.6)
と式 (8.7) それぞれから新たに2つの式が生まれる。また,式 (8.6) と式 (8.7) における,
m − 1 を m/2 − 1 で置き換えることができる。したがって 2m2 に対応する演算回数は,
2
m m m
·
+
2 2
2
m
+1
2
= m2 + m
となり,全体で
(m2 + m) + m = m2 + 2m
回の複素の掛け算を必要とする。このテクニックをもう一度用いると,また,それぞれの
式から2つの式が生まれ,項の数は m/4 になる。よって,m2 に対応する演算回数は
4
となり,全体で
m
4
2
+
m
4
m
+1
4
=
m2
+m
2
m2
m2
+ m + 2m =
+ 3m
2
2
回の複素の掛け算を必要とする。このテクニックを r 回繰り返すと,必要な複素の掛け算
の回数を
m2
+ mr
2r−2
回に減らすことができる。ここで,r = p + 1 になるとこの過程は終了する。なぜならば,
m = 2p より 2m = 2p+1 。その結果,r = p + 1 回の過程の後で,複素の掛け算は
(2p )2
+ m(p + 1) = 2m + pm + m = 3m + m log2 m = O(m log2 m)
2p−1
となる。また,これらの式の表し方より,複素の足し算の回数もほぼ掛け算の回数と同じ
である。
例題 8.15 xj = −π + jπ/4, j = 0, 1, . . . , 7 で与えられる8個のデータ点 {(xj , yj )}7j=0
に対する高速 Fourier 変換を行え。
解 8個のデータ点より 2m = 8 となり,m = 22 ,p = 2 である。式 (8.3) から
S4 (x) =
ただし,
ak =
1
4
a0 + a4 cos 4x
+
2
7
yj cos kxj , bk =
j=0
1
4
3
(ak cos kx + bk sin kx),
k=1
7
yj sin kxj , k = 0, 1, 2, 3, 4
j=0
8.6. 高速 Fourier 変換
89
ここで,
F (x) =
ただし,
1
4
7
ck eikx ,
j=0
7
yj eikπj/4 , k = 0, 1, . . . , 7
ck =
j=0
とおくと,式 (8.5) より k = 0, 1, 2, 3, 4 において
1
ck e−ikπ = ak + ibk
4
が成り立つ。直接 ck を計算すると
c0
c1
c2
c3
c4
c5
c6
c7
= y0 + y1 + y2 + y3 + y4 + y5 + y6 + y7 ;
√
√
= y0 + ((i + 1)/ 2)y1 + iy2 + ((i − 1)/ 2)y3 − y4
√
√
− ((i + 1)/ 2)y5 − iy6 − ((i − 1)/ 2)y7 ;
= y0 + iy1 − y2 − iy3 + y4 + iy5 − y6 − iy7 ;
√
√
= y0 + ((i − 1)/ 2)y1 − iy2 + ((i + 1)/ 2)y3 − y4
√
√
− ((i − 1)/ 2)y5 + iy6 − ((i + 1)/ 2)y7 ;
= y0 − y1 + y2 − y3 + y4 − y5 + y6 − y7 ;
√
√
= y0 − ((i + 1)/ 2)y1 + iy2 − ((i − 1)/ 2)y3 − y4
√
√
+ ((i + 1)/ 2)y5 − iy6 + ((i − 1)/ 2)y7 ;
= y0 − iy1 − y2 + iy3 + y4 − iy5 − y6 + iy7 ;
√
√
= y0 − ((i − 1)/ 2)y1 − iy2 − ((i + 1)/ 2)y3 − y4
√
√
+ ((i − 1)/ 2)y5 + iy6 + ((i + 1)/ 2)y7 .
となる。ここで,c1 , c1 , . . . , c7 を直接求めるための演算回数を数える。データ点が少ない
ため,1 や-1 の係数が沢山あるが,これはデータ点が増えるとなくなるので,ここでは,
1 や-1 の掛け算も演算の回数に含める。すると,64回の掛け算または割り算と56回の
足し算または引き算が用いられていることが分かる。
ここで,高速 Fourier 変換を用いるためには,まず,r = 1 で
90
第 8 章 近似理論
d0
=
d1
=
d2
=
d3
=
d4
=
d5
=
d6
=
d7
=
1
(c0 + c4 ) = y0 + y2 + y4 + y6 ;
2
1
(c0 − c4 ) = y1 + y3 + y5 + y7 ;
2
1
(c1 + c5 ) = y0 + iy2 − y4 − iy6 ;
2
√
1
(c1 − c5 ) = ((i + 1)/ 2)(y1 + iy3 − y3 − iy7 );
2
1
(c2 + c6 ) = y0 − y2 + y4 − y6 ;
2
1
(c2 − c6 ) = i(y1 − y3 + y5 − y7 );
2
1
(c3 + c7 ) = y0 − iy2 + y4 + iy6 ;
2
√
1
(c3 − c7 ) = ((i − 1)/ 2)(y1 − iy3 − y5 + iy7 ).
2
とおき,次に r = 2 で
e0
=
e1
=
e2
=
e3
=
e4
=
e5
=
e6
=
e7
=
1
(d0 + d4 ) = y0 + y4 ;
2
1
(d0 − d4 ) = y2 + y6 ;
2
1
(id1 + d5 ) = i(y1 + y5 );
2
1
(id1 − d5 ) = i(y3 + y7 );
2
1
(d2 + d6 ) = y0 − y4 ;
2
1
(d2 − d6 ) = i(y2 − y6 );
2
√
1
(id3 + d7 ) = ((i − 1)/ 2)(y1 − y5 );
2
√
1
(id3 − d7 ) = ((i − 1)/ 2)(y3 − y7 ).
2
とおき,最後に r = p + 1 = 3 で,
8.6. 高速 Fourier 変換
91
1
(e0 + e4 ) = y0 ;
2
1
f1 =
(e0 − e4 ) = y4 ;
2
1
f2 =
(ie1 + e5 ) = i(y2 );
2
1
f3 =
(ie1 − e5 ) = i(y6 );
2
√
√
1
f4 =
(((i + 1)/ 2)e2 + e6 ) = ((i − 1)/ 2)y1 ;
2
√
√
1
(((i + 1)/ 2)e2 − e6 ) = ((i − 1)/ 2)y5 ;
f5 =
2
√
√
1
((i − 1)/ 2)e3 + e7 ) = (−(i + 1)/ 2)(y3 );
f6 =
2
√
√
1
f7 =
((i − 1)/ 2e3 − e7 ) = (−(i + 1)/ 2)(y7 ).
2
とおく。ここで,c0 , . . . , c7 , d0 , . . . , d7 , e0 , . . . , e7 , および f0 , . . . , f7 はデータ点からは独立
で,これらは,m = 4 という事実にだけ依存している。つまり,それぞれの m に対して,
2m−1
2m−1
2m−1
一意な定数 {ck }2m−1
k=0 , {dk }k=0 , {ek }k=0 および {fk }k=0 が存在する。しかし,実際の
計算では,これらを求める必要はなく,次に掲げるものだけを求めればよい。
f0
=
1. f0 = y0 ; f1 = y4 ; f2 = iy2 ; f3 = iy6 ;
√
√
√
f4 = ((i − 1)/ 2)y1 ; f5 = ((i − 1)/ 2)y5 ; f6 = (−(i + 1)/ 2)y3 ;
√
f7 = (−(i + 1)/ 2)y7 .
√
2. e0 = f0 + f1 ; e1 = −i(f2 + f3 ); e2 = ((−i + 1)/ 2)(f4 + f5 );
√
e3 = ((−i − 1)/ 2)(f6 + f7 ); e4 = f0 − f1 ; e5 = f2 − f3 ;
e6 = f4 − f5 ; e7 = f6 − f7 .
3. d0 = e0 + e1 ; d1 = −i(e2 + e3 ); d2 = e4 + e5 ; d3 = −i(e6 + e7 );
d4 = e0 − e1 ; d5 = e2 − e3 ; d6 = e4 − e5 ; d7 = e6 − e7 .
4. c0 = d0 + d1 ; c1 = d2 + d3 ; c2 = d4 + d5 ; c3 = d6 + d7 ;
c4 = d0 − d1 ; c5 = d2 − d3 ; c6 = d4 − d5 ; c7 = d6 − d7 .
この方法で定数 c0 , c1 , . . . , c7 を計算するのに必要な演算回数は表 8.7 に示されている。こ
こでも,1 と-1 による掛け算の回数は含まれている。
ステップ4で掛け算または割り算を必要としていないという事実から,どんな m にお
2m−1
いても定数 {ck }2m−1
k=0 は定数 {dk }k=0 から
ck
ck+m
= d2k + d2k+1
= d2k − d2k+1 , k = 0, 1, . . . , m − 1
92
第 8 章 近似理論
を用いることにより導けることを表している。つまり,複素の掛け算はどこにも必要が
ない。
Step
掛け算/割り算
足し算/引き算
(1)
8
0
(2)
(3)
(4)
合計
8
8
0
24
8
8
8
24
表 8.7:
ここまでをまとめると,直接計算では64回の掛け算または割り算と56回の足し算
または引き算が係数 c0 , c1 , . . . , c7 を求めるのに必要であったが,高速 Fourier 変換のテク
ニックを用いると,24回の掛け算または割り算と24回の足し算または引き算にするこ
とができることが分かった。
次のアルゴリズムは m = 2p のときに高速 Fourier 変換を行う。
高速フーリエ変換アルゴリズム
それぞれの j = 0, 1, 2, . . . , 2m − 1 に対して xj = −π + jπ/m,ただし,m = 2p を満た
すデータ {(xj , yj )}2m−1
j=0 に対する次の複素フーリエ級数の係数を求める。
1
m
2m−1
ck eikx =
k=0
1
m
2m−1
ck (cos kx + i sin kx), i =
√
−1
k=0
===================================================
入力 m, p; y0 , y1 , . . . , y2m−1 .
出力 複素数 c0 , c1 , . . . , c2m−1 ; 実数 a0 , a1 , . . . , am ; b1 , b2 , . . . , bm−1 .
(1)
M ← m;
q ← p;
ζ ← eπi/m .
(2)
for j = 0, 1, 2, . . . , 2m − 1 do
cj ← yj .
(3)
for j = 1, 2, . . . , M do
ξj ← ζ j ;
ξj+M ← −ξj .
(4)
K ← 0;
ξ0 ← 1.
(5)
for L = 1, 2, . . . , p + 1 do (6) − (12).
(6)
while(K < 2m − 1) do (7) − (11).
(7)
for j = 1, 2, . . . , M do (8) − (10).
(8)
Let K = kp · 2p + kp−1 · 2p−1 + · · · + k1 · 2 + k0 ;
K1 ← K/2q ← kp · 2p−q + · · · + kq+1 · 2 + kq ;
K2 ← kq · 2p + kq+1 · 2p−1 + · · · + kp · 2q .
8.6. 高速 Fourier 変換
93
(9)
η ← cK+M ξK2 ;
cK+M ← cK − η;
cK ← cK + η.
(10)
K ← K + 1.
(11)
K ← K + M.
(12)
K ← 0;
M ← M/2;
q ← q − 1.
(13) while(K < 2m − 1) do (14) − (16).
(14)
Let K = kp · 2p + kp−1 · 2p−1 + · · · + k1 · 2 + k0 ;
j ← k0 · 2p + k1 · 2p−1 + · · · + kp−1 · 2 + kp .
(15)
if(j > K) then
cj と ck の入れ替え
(16)
K ← K + 1.
(17) a0 ← c0 /m;
am ← (e−iπm cm /m).
(18) for j = 1, . . . , m − 1 do
aj ← (e−iπj cj /m);
bj ← (e−iπj cj /m);
(19) OUTPUT (c0 , c1 , . . . , c2m−1 ; a0 , a1 , . . . , am ; b1 , b2 , . . . , bm−1 );
STOP.
===================================================
演習問題 8.6
1. f (x) = π(x − π), [−π, π] に対する次数2の三角補間多項式 S2 (x) を求めよ。
2. f (x) = π(x − π), [−π, π] に対する次数4の三角補間多項式 S2 (x) を以下の方法で求
めよ。
(a) 直接計算
(b) 高速フーリエ変換
95
第 9 章 常微分方程式の2点境界値問題
常微分方程式が1つ以上の境界値を満たすとき,この微分方程式は2点境界値問題とよば
れる。1階の微分方程式の場合は,1つの条件だけ与えられるので,境界値問題と初期値
問題は同じである。ここでは,次のような2つの境界値を与えられた2階の微分方程式を
考える。
y = f (x, y, y ), a ≤ x ≤ b
y(a) = α, y(b) = β
9.1
狙い撃ち法 (Shooting Method)
次の定理は2点境界値問題が一意の解を持つための条件を与えてくれる。
定理 9.1 関数 f および fy , fy は集合 D = {(x, y, y ) : a ≤ x ≤ b, −∞ < y < ∞, −∞ <
y < ∞} 上で連続で,境界値問題
y = f (x, y, y ), a ≤ x ≤ b, y(a) = α, y(b) = β
を満たすとする。このとき,
1. 全ての (x, y, y ) ∈ D で fy (x, y, y ) > 0 が成り立ち
2. 全ての (x, y, y ) ∈ D で |fy (x, y, y )| ≤ M を満たす定数 M が存在する
ならば,この2点境界値問題は一意の解を持つ。
例題 9.1 次の境界値問題は一意の解を持つことを示せ。
y = −e−xy − sin y , 1 ≤ x ≤ 2, y(1) = y(2) = 0
解 f (x, y, y ) = −e−xy − sin y より,
fy (x, y, y ) = xe−xy > 0 かつ |fy (x, y, y )| = | − cos y | ≤ 1
よって,この境界値問題は一意の解を持つ。
96
第 9 章 常微分方程式の2点境界値問題
f (x, y, y ) が
f (x, y, y ) = p(x)y + q(x)y + r(x)
の形で表されるとき,微分方程式
y = f (x, y, y )
は線形 (linear) であるという。線形のとき,定理 9.1 はもっと簡単になる。
系 9.1 線形境界値問題
y = p(x)y + q(x)y + r(x), a ≤ x ≤ b, y(a) = α, y(b) = β
が次の条件を満たすならば,一意の解を持つ。
1. 区間 [a, b] で p(x), q(x), r(x) は連続
2. 区間 [a, b] で q(x) > 0
線形境界値問題が一意の解を持つための十分条件は,非常に簡単にチェックできる。そ
こで,まず,線形境界値問題
y = p(x)y + q(x)y + r(x), a ≤ x ≤ b, y(a) = α, y(b) = β
の解の近似を行ってみる。まず,初期値問題
y = p(x)y + q(x)y + r(x), a ≤ x ≤ b, y(a) = α, y (a) = 0
(9.1)
y = p(x)y + q(x)y, a ≤ x ≤ b, y(a) = 0, y (a) = 1
(9.2)
と
を考え,y1 (x) を式 (9.1) の解,y2 (x) を式 (9.2) の解とする。この y1 (x) と y2 (x) から
y(x) = y1 (x) +
β − y1 (b)
y2 (x)
y2 (b)
とおくと,
y (x)
y (x)
β − y1 (b)
y2 (x)
y2 (b)
β − y1 (b)
= y1 (x) +
y2 (x)
y2 (b)
= y1 (x) +
を得る。よって,
y
=
=
=
β − y1 (b)
(p(x)y2 + q(x)y2 )
y2 (b)
β − y1 (b)
β − y1 (b)
p(x) y1 +
y2 + q(x) y1 +
y2 + r(x)
y2 (b)
y2 (b)
p(x)y (x) + q(x)y(x) + r(x)
p(x)y1 + q(x)y1 + r(x) +
(9.3)
9.1. 狙い撃ち法 (Shooting Method)
97
となる。これより,
β − y1 (b)
y2 (x)
y2 (b)
は y = p(x)y + q(x)y + r(x) の解である。さらに,
y(x) = y1 (x) +
β − y1 (b)
β − y1 (b)
y2 (a) = α +
·0=α
y2 (b)
y2 (b)
β − y1 (b)
y2 (b) = y1 (b) + β − y1 (b) = β
= y1 (b) +
y2 (b)
y(a) = y1 (a) +
y(b)
となるので,y(x) はこの境界値問題の一意の解である。
線形微分方程式における狙い撃ち法は,境界値問題を2つの初期値問題 (9.1, 9.2) に置
き換えることを基にしている。y1 (x), y2 (x) の近似解を求める方法は6章で学んだように
沢山あるので,いずれかの方法で y1 (x), y2 (x) を求めれば,式 (9.3) より,境界値問題の
解 y(x) を近似することができる。この方法をグラフで表すと次のようになり,名前の由
来が分かる。
図 9.1:
次のアルゴリズムは4次の Runge-Kutta 法を用いて y1 (x) と y2 (x) の近似を求める。この
アルゴリズムは,系 9.1 の仮定を満たさなくても多くの問題でうまくいく。
線形狙い撃ち法アルゴリズム
次の2点境界値問題の近似解を求める。
y = p(x)y + q(x)y + r(x), a ≤ x ≤ b, y(a) = α, y(b) = β
===================================================
入力 端点 a, b; 境界条件 α, β; 小区間の数 N.
出力 i = 0, 1, . . . , N における y(xi ) の近似 w1,i ; y (xi ) の近似 w2,i .
(1)
h ← (b − a)/N ;
w1,0 ← α;
w2,0 ← 0;
v1,0 ← 0;
v2,0 ← 1.
(2)
for i = 0, 1, . . . , N − 1 do (3), (4).
98
第 9 章 常微分方程式の2点境界値問題
(3)
(4)
x ← a + ih.
k1,1 ← hu2,i .
k1,2 ← h[p(x)y2,i + q(x)u1,i + r(x)];
k2,1 ← h[u2,i + 21 k1,2 ];
k2,2 ← h[p(x + h/2)(u2,i + 12 k1,2 ) + q(x + h/2)(u1,i + 21 k1,1 ) + r(x + h/2)];
k3,1 ← h[u2,i + 12 k2,2 ];
k3,2 ← h[p(x + h/2)(u2,i + 12 k2,2 ) + q(x + h/2)(u1,i + 21 k2,1 ) + r(x + h/2)];
k4,1 ← h[u2,i + k3,2 ];
k4,2 ← h[p(x + h)(u2,i + k3,2 ) + q(x + h)(u1,i + k3,1 ) + r(x + h)];
u1,i+1 ← u1,i + 61 [k1,1 + 2k2,1 + 2k3,1 + k4,1 ];
u2,i+1 ← u2,i + 16 [k1,2 + 2k2,2 + 2k3,2 + k4,2 ;
k1,1 ← hv2,i ;
k1,2 ← h[p(x)v2,i + q(x)v1,i ];
k2,1 ← h[v2,i + 12 k1,2 ];
k2,2 ← h[p(x + h/2)(v2,i + 12 k1,2 ) + q(x + h/2)(v1,i + 21 k1,1 )];
k3,1 ← h[v2,i + 12 k2,2 ];
k3,2 ← h[p(x + h/2)(v2,i + 12 k2,2 ) + q(x + h/2)(v1,i + 21 k2,1 )];
k4,1 ← h[v2,i + 12 k3,2 ];
k4,2 ← h[p(x + h)(v2,i + k3,2 ) + q(x + h)(v1,i + k3,1 ) + r(x + h)];
v1,i+1 ← v1,i + 61 [k1,1 + 2k2,1 + 2k3,1 + k4,1 ];
v2,i+1 ← v2,i + 16 [k1,2 + 2k2,2 + 2k3,2 + k4,2 ;
(5)
w1,0 ← α;
β−u1,N
w2,0 ← v1,N
;
OUTPUT (x, w1,0 , w2,0 ).
(6)
for i = 1, 2, . . . , N do
W 1 = u1,i + w2,0 v1,i ;
W 2 = u2,i + w2,0 v2,i ;
x = a + ih;
OUTPUT (x, W 1, W 2).
(7)
STOP.
===================================================
例題 9.2 境界値問題
y = y + 2y + cos x, 0 ≤ x ≤
π
π
, y(0) = −0.3, y( ) = −0.1
2
2
は厳密解
1
(sin x + 3 cos x)
10
を持っている。線形狙い撃ち法において h = π/4 を用いて近似解を求めよ。
y(x) = −
解 線形狙い撃ち法を用いると,近似解は次の2つの初期値問題を求めることにより得る
ことができる。
y1
=
y1 + 2y1 + cos x, 0 ≤ x ≤
π
, y1 (1) = −0.3, y1 (1) = 0
2
π
, y2 (1) = 0, y2 (1) = 1
2
ここで,線形狙い撃ち法アルゴリズムを N = 10, h = π/20 で用いると次の表を得る。
y2
=
y2 + 2y2 , 0 ≤ x ≤
9.1. 狙い撃ち法 (Shooting Method)
99
i
xi
wi
0
1
2
3
4
0.00000000
0.15700000
0.31400000
0.47100000
0.62800000
-0.30000000
-0.31194024
-0.31620601
-0.31269163
-0.30148260
5
6
7
8
9
10
0.78500000
0.94200000
1.09900000
1.25600000
1.41300000
1.57000000
-0.28285335
-0.25726039
-0.22533093
-0.18784717
-0.14572681
-0.10000000
ここで,wi は y(xi ) を近似する。
y(xi ) = y1 (xi ) +
−0.1 − y1 ( π2 )
y2 xi
y2 ( π2 )
演習問題 9.1
1. 次の境界値問題
y = 4(y − x), 0 ≤ x ≤ 1, y(0) = 0, y(1) = 2
は厳密解 y(x) = e2 (e4 − 1)−1 (e2x − e−2x ) + x を持っている。線形狙い撃ち法で刻
み幅 h = 1/2 を用いて解を近似せよ。
2. 次の境界値問題
y = −3y + 2y + 2x + 3, 0 ≤ x ≤ 1, y(0) = 2, y(1) = 2
を,線形狙い撃ち法で刻み幅 h = 0.1 を用いて解を近似せよ。
3. 次の境界値問題
y = −(x + 1)y + 2y + (1 − x2 )e−x , 0 ≤ x ≤ 1, y(0) = −1, y(1) = 0
を,線形狙い撃ち法で刻み幅 h = 0.1 を用いて解を近似せよ。
4. 次の境界値問題
y = y + 2y + cos x, 0 ≤ x ≤
π
π
, y(0) = −0.3, y( ) = −0.1
2
2
1
(sin x + 3 cos x) を持っている。線形狙い撃ち法で刻み幅 h = π/8
10
を用いて解を近似し,厳密解と比較せよ。
は厳密解 y(x) =
100
9.2
第 9 章 常微分方程式の2点境界値問題
非線形問題における狙い撃ち法
非線形の2階の境界値問題
y = f (x, y, y ), a ≤ x ≤ b, y(a) = α, y(b) = β
(9.4)
における狙い撃ち法は,線形のときとほとんど同じである。ただ,違いは線形のときのよ
うに,2つの初期値問題で置き換えることはできない。その代わりに,パラメタ t を用い
た初期値問題の列の解を用いて,境界値問題の解の近似を行う。つまり,
y = f (x, y, y ), a ≤ x ≤ b, y(a) = α, y (a) = t
(9.5)
において,パラメタ t = tk が
lim y(b, tk ) = y(b) = β
k→∞
を満たすように t を選ぶ。ここで,y(x, tk ) は初期値問題 9.5 で,t = tk のときの解であり,
y(x) は境界値問題 9.4 の解である。このテクニックは,狙い撃ち法 (shooting method)
とよばれる。この方法は,まず,点 (a, α) から物体を発射したときの向きをパラメタ t0 で
与え,初期値問題
y = f (x, y, y ), a ≤ x ≤ b, y(a) = α, y (a) = t0
の解からなる解曲線に沿って y(b, t0 ) を求める。このとき,y(b, t0 ) が β に十分近くないな
らば,別のパラメタ t1 , t2 , . . . を,y(b, tk ) が β に十分近づくまで選ぶ。このパラメタ tk を
選ぶには,境界値問題 9.4 が定理 9.1 の仮定を満たすとする。もし,y(x, t) が初期値問題
9.5 の解ならば,次に
y(b, t) − β = 0
を満たす t を求める。この式は,2章で扱った非線形問題であるので,この式を解く方法
は色々ある。割線法を用いてこの式を解くには,2つの初期近似値 t0 , t1 を選び,その後
k = 2, 3, . . . , に対して
tk = tk−1 −
(y(b, tk−1 ) − β)(tk−1 − tk−2 )
y(b, tk−1 ) − y(b, tk−2 )
を生成する必要がある。もっと威力のある方法として Newton 法を用いて数列 {tk } を生
成するには,1つの初期近似値 t0 だけが必要である。しかし,漸化式は
tk = tk−1 −
で与えられ,
y(b, tk−1 ) − β
dy
dt (b, tk−1 )
dy
(b, tk−1 ) の値を知らなければならないので,問題である。
dt
(9.6)
9.2. 非線形問題における狙い撃ち法
101
そこで,この問題を解決すべく,初期値問題 9.5 を,解は変数 x とパラメタ t に依存し
ていることを強調して表すと
y (x, t) = f (x, y(x, t), y (x, t)), a ≤ x ≤ b, y(a, t) = α, y (a, t) = t
となる。ここで,
(9.7)
dy
(b, tk−1 ) の値を求めるために,式 (9.7) を t で偏微分すると,
dt
∂y
(x, t) =
∂t
=
+
∂f
(x, y(x, t), y (x, t))
∂t
∂f
∂x ∂f
∂y
(x, y(x, t), y (x, t))
+
(x, y(x, t), y (x, t)) (x, t)
∂x
∂t
∂y
∂t
∂f
∂y
(x, y(x, t), y (x, t))
(x, t)
∂y
∂t
となる。ここで,x と t は1次独立であることに注意すると,∂x/∂t = 0 となり,
∂y
∂f
∂y
∂f
∂y
(x, t) =
(x, y(x, t), y (x, t)) (x, t) +
(x, y(x, t), y (x, t)
(x, t)
∂t
∂y
∂t
∂y
∂t
(9.8)
を得ることができる。初期値より
∂y
∂y
(a, t) = 0,
(a, t) = 1
∂t
∂t
となる。ここで,z(x, t) =
∂y
∂t (x, t)
とおき,x と t での微分の順序の交換が可能だとする
と,式 (9.8) は
z (x, t) =
∂f
∂f
(x, y, y )z(x, t) +
(x, y, y )z (x, t)
∂y
∂y
(9.9)
となり,初期値は
a ≤ x ≤ b, z(a, t) = 0, z (a, t) = 1
となる。
よって,Newton 法では,反復を繰り返すたびに,2つの初期値問題 9.7 と 9.9 を解く
必要がある。この2つの初期値問題の解は,4次の Runge-Kutta 法で近似する。すると,
式 (9.6) より
tk = tk−1 −
y(b, tk−1 ) − β
z(b, tk−1
が求まる。
Newton 法を用いた非線形狙い撃ち法アルゴリズム
次の2点境界値問題の近似解を求める。
y = f (x, y, y ), a ≤ x ≤ b, y(a) = α, y(b) = β
102
第 9 章 常微分方程式の2点境界値問題
===================================================
入力 端点 a, b; 境界条件 α, β; 小区間の数 N ; 許容限度 T OL; 最大反復回数 M.
出力 i = 0, 1, . . . , N における y(xi ) の近似 w1,i ; y (xi ) の近似 w2,i ; またはメッセージ.
(1)
h ← (b − a)/N ;
k ← 1;
T K ← (β − α)/(b − a).
(2)
while (k ≤ M ) do (3) − (10).
(3)
w1,0 ← α;
w2,0 ← T K;
u1 ← 0;
u2 ← 1.
(4)
for i = 1, . . . , N do (5), (6).
(5)
x ← a + (i − 1)h.
(6)
k1,1 ← hw2,i−1 .
k1,2 ← hf (x, w1,i−1 , w2,i−1 );
k2,1 ← h(w2,i−1 + 21 k1,2 );
k2,2 ← hf (x + h/2, w1,i−1 + 12 k1,1 , w2,i−1 + 12 k1,2 );
k3,1 ← h(w2,i−1 + 12 k2,2 );
k3,2 ← hf (x + h/2, w1,i−1 + 12 k2,1 , w2,i−1 + 12 k2,2 );
k4,1 ← h(w2,i−1 + 12 k3,2 );
k4,2 ← hf (x + h, w1,i−1 + k3,1 , w2,i−1 + k3,2 );
w1,i ← w1,i−1 + 16 (k1,1 + 2k2,1 + 2k3,1 + k4,1 );
w2,i ← w2,i−1 + 16 (k1,2 + 2k2,2 + 2k3,2 + k4,2 );
k1,1 ← hu2 ;
k1,2 ← h[fy (x, w1,i−1 , w2,i−1 )u1 + fy (x, w1,i−1 , w2,i−1 )u2 ];
k2,1 ← h[u2 + 12 k1,2 ];
k2,2 ← h[fy (x + h/2, w1,i−1 , w2,i−1 )(u1 + 21 k1,1 )
+fy (x + h/2, w1,i−1 , w2,i−1 )(u2 + 12 k1,2 )];
k3,1 ← h[u2 + 12 k2,2 ];
k3,2 ← h[fy (x + h/2, w1,i−1 , w2,i−1 )(u1 + 21 k2,1 )
+fy (x + h/2, w1,i−1 , w2,i−1 )(u2 + 12 k2,2 )];
k4,1 ← h[u2 + k3,2 ];
k4,2 ← h[fy (x + h, w1,i−1 , w2,i−1 )(u1 + 21 k3,1 )
+fy (x + h, w1,i−1 , w2,i−1 )(u2 + k3,2 )];
u1 ← u1 + 61 [k1,1 + 2k2,1 + 2k3,1 + k4,1 ;
u2 ← u2 + 16 [k1,2 + 2k2,2 + 2k3,2 + k4,2 ;
(7)
if(|w1,N − β| ≤ T OL) then do (8), (9).
(8)
for i = 0, 1, . . . , N do
x ← a + ih;
OUTPUT (x, w1,i , w2,i ).
(9)
STOP.
w
−β
(10)
T K ← T K − 1,N
;
u1
k ← k + 1.
(11) OUTPUT( 最大反復関数を超えました );
STOP.
=================================================== (1)
で選択された値 t0 = T K は2点 (a, α) と (b, β) を結ぶ線分の傾きである。定理 9.1 の仮定
9.2. 非線形問題における狙い撃ち法
103
を満たせば,どんな t0 でも必ず収束するが,t0 の選び方により収束速度の改良につなげ
ることができる。
例題 9.3 次の境界値問題を h = 0.1 で狙い撃ち法を用いて近似解を求めよ。
1
43
(32 + 2x3 − yy ), 1 ≤ x ≤ 3, y(1) = 17, y(3) =
8
3
解 狙い撃ち法を用いるには,反復ごとに次の初期値問題を解く必要がある。
1
y
(32 + 2x3 − yy ), 1 ≤ x ≤ 3, y(1) = 17, y (1) = tk
=
8
∂f
1
∂f
z+
z = − (y z + yz ), 1 ≤ x ≤ 3, z(1) = 0, z (1) = 1
z
=
∂y
∂y
8
y =
終了条件として,
|w1,N (tk ) − y(3)| ≤ 10−5
を用いると,4回の反復で t4 = −14.000203 を得ることができる。この結果は表に示して
ある。
xi
w1,i
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
i
1.00000000
1.10000000
1.20000000
1.30000000
1.40000000
1.50000000
1.60000000
1.70000000
1.80000000
1.90000000
2.00000000
2.10000000
2.20000000
2.30000000
2.40000000
2.50000000
17.00000000
15.75549654
14.77339188
13.99775528
13.38863302
12.91672415
12.56005224
12.30181136
12.12893003
12.03108855
12.00003105
12.02907422
12.11274983
12.24654065
12.42668230
12.65001271
-14.00018771
-11.02333504
-8.71129092
-6.86761495
-5.36340417
-4.11123148
-3.05010427
-2.13642267
-1.33835032
-0.63220162
-0.00006000
0.57182956
1.09416887
1.57538505
2.02218700
2.43996928
w2,i
16
17
2.60000000
2.70000000
12.91385627
13.21593374
2.83310940
3.20518954
18
19
2.80000000
2.90000000
13.55429150
13.92724540
3.55916386
3.89748611
20
3.00000000
14.33333581
4.22220804
104
第 9 章 常微分方程式の2点境界値問題
演習問題 9.2
1. 次の境界値問題を h = 0.5 で狙い撃ち法を用いて近似解を求めよ。
y = −(y )2 − y + log x, 1 ≤ x ≤ 2, y(1) = 0, y(2) = log 2
また,厳密解 y = log x と比較せよ。
2. 次の境界値問題を h = 0.25 で狙い撃ち法を用いて近似解を求めよ。
y = 2y 3 , −1 ≤ x ≤ 0, y(−1) =
1
1
, y(0) =
2
3
また,厳密解 y = 1/(x + 3) と比較せよ。
3. 次の境界値問題を h = 0.1, T OL = 10−4 で狙い撃ち法を用いて近似解を求めよ。
y = y 3 − yy , 1 ≤ x ≤ 2, y(1) =
1
1
, y(2) =
2
3
また,厳密解 y = 1/(x + 1) と比較せよ。
9.3
線形境界値問題における差分法
境界値問題における線形狙い撃ち法および非線形狙い撃ち法は,安定性の問題がある。
そこで,ここでは安定性に重きをおいたテクニックを紹介する。ただし,計算量は増える。
境界値問題に差分法を用いるには,まず,微分方程式を差分方程式に直す必要がある。そ
れには,微分方程式の中の微分係数を近似する差分係数で置き換える。
線形2点境界値問題
y = p(x)y + q(x)y + r(x), a ≤ x ≤ b, y(a) = α, y(b) = β
(9.10)
に差分法を用いることを考えてみる。まず,y と y を差分係数で近似する。それには,
整数 N > 0 を選び,区間 [a, b] を(N+1)個の等区間に分ける。このとき,端点はメッ
シュ点 xi = a + ih である。ここで,h = (b − a)/(N + 1) である。刻み幅 h をこのように
して選ぶと,7章の反復法による連立方程式の解法を用いることができる。
内部メッシュ点 xi , i = 1, 2, . . . , N において近似される微分方程式は
y (xi ) = p(xi )y (xi ) + q(xi )y(xi ) + r(xi )
(9.11)
である。ここで,y を xi の周りでの3次の Taylor 多項式を用いて表すと
y(xi+1 ) = y(xi + h) = y(xi ) + hy (xi ) +
h2
h3
h4
y (xi ) + y (xi ) + y (4) (ξi+ )
2
6
24
9.3. 線形境界値問題における差分法
105
ただし,ξi+ ∈ (xi , xi+1 )。また,
y(xi−1 ) = y(xi − h) = y(xi ) − hy (xi ) +
h2
h3
h4
y (xi ) − y (xi ) + y (4) (ξi− )
2
6
24
ただし,ξi− ∈ (xi , xi+1 ) である。
この2つの式を加えると,
y(xi+1 ) + y(xi−1 ) = 2y(xi ) + h2 y (xi ) +
h4 (4) +
[y (ξi ) + y (4) (ξi− )]
24
となり,これを y (xi ) について解くと
y (xi ) =
h2
1
[y(xi+1 ) − 2y(xi ) + y(xi+1 )] − [y (4) (ξi+ ) + y (4) (ξi− )]
2
h
24
が得られる。ここで,中間値の定理を用いると,さらに簡単な式を作ることができる。つ
まり,
1
h2 (4)
[y(x
)
−
2y(x
)
+
y(x
)]
−
[y (ξi )]
i+1
i
i+1
h2
24
ただし,ξi ∈ (xi−1 , xi+1 ) である。この式のことを y (xi ) の中央差分公式 (centereddifference formula) という。
次に,y (xi ) の中央差分公式を求める。y を xi の周りでの1次の Taylor 多項式を用い
て表すと
y (xi ) =
y(xi+1 ) = y(xi + h) = y(xi ) + hy (xi ) +
h2
h3
y (xi ) + y (ξi+ )
2
6
ただし,ξi+ ∈ (xi , xi+1 )。また,
y(xi−1 ) = y(xi − h) = y(xi ) − hy (xi ) +
h3
h2
y (xi ) + y (ξi− )
2
6
ただし,ξi− ∈ (xi , xi+1 ) である。
上から下の式を引くと,
y(xi+1 ) − y(xi−1 ) = 2hy (xi ) +
h3
[y (ξi+ ) − y (ξi− )]
6
となり,これを y (xi ) について解くと
y (xi ) =
h2
1
[y(xi+1 ) − y(xi+1 )] − [y (ξi+ ) − y (ξi− )]
2h
6
が得られる。ここで,中間値の定理を用いると,
y (xi ) =
1
h2
[y(xi+1 ) − y(xi+1 )] − [y (ξi )]
2h
6
106
第 9 章 常微分方程式の2点境界値問題
ただし,ξi ∈ (xi−1 , xi+1 ) である。
これらの中央差分公式を式 (9.11) に用いると
y(xi+1 ) − 2y(xi ) + y(xi−1 )
h2
y(xi+1 ) − y(xi−1 )
+ q(xi )y(xi )
2h
h2
+ r(xi ) − [2p(xi )y (ηi ) − y (4) (ξi )]
12
= p(xi )
となる。ここで,境界条件 y(a) = α, y(b) = β と打切り誤差が O(h2 ) より
w0 = α, wN +1 = β
と i = 1, 2, . . . , N に対して
−wi+1 + 2wi − wi−1
h2
+ p(xi )
wi+1 − wi−1
2h
+ q(xi )wi = −r(xi )
(9.12)
と定義する。
式 (9.12) を次のように書き換えると
− 1+
h
h
p(xi ) wi−1 + (2 + h2 q(xi ))wi − 1 − p(xi ) wi+1 = −h2 r(xi )
2
2
N 次の連立方程式が得られ,それより N 行 N 列の行列を得ることができる。つまり,
Aw = b
ただし,

2 + h2 q(x1 )

 −1 − h p(x )
2

2

A=
0


..


.
−1 + h2 p(x1)
0
2 + h2 q(x2 )
..
.
..
.
−1 + h2 p(x2 )
..
.
..
.
···
..
.
..
.
..
.
...
0
−1 − h2 p(xN )
0





w=



(9.13)
w1
w2
..
.
wN −1
wN










, b = 






0
..
.






0



−1 + h2 p(xN −1 ) 
2 + h2 q(xN )
−h2 r(x1 ) + 1 + h2 p(x1 ) w0
−h2 r(x2 )
..
.
−h2 r(xN −1 )
−h2 r(xN ) + 1 − h2 p(xN ) wN +1









定理 9.2 p(x), q(x), r(x) が区間 [a, b] で連続で,区間 [a, b] 上で q(x) ≥ 0 ならば,連立方
程式 9.13 は,
h ¡ 2/L,ただし,L = maxa≤x≤b |p(x)| おいて一意の解をもつ。
9.3. 線形境界値問題における差分法
107
この定理の仮定は境界値問題 9.10 が一意の解を持つことを保証するが,y ∈ C 4 [a, b] につ
いては保証しない。そこで,y 4 が連続であることを示さなければならない。
線形差分法アルゴリズム
次の2点境界値問題の近似解を求める。
y = p(x)y + q(x)y + r(x), a ≤ x ≤ b, y(a) = α, y(b) = β
===================================================
入力 端点 a, b; 境界条件 α, β; 小区間の数 N ≥ 2.
出力 i = 0, 1, . . . , N + 1 における y(xi ) の近似 wi .
(1)
h ← (b − a)/(N + 1);
x ← a + h;
a1 ← 2 + h2 q(x);
b1 ← −1 + (h/2)p(x);
d1 ← −h2 r(x) + (1 + (h/2)p(x))α.
(2)
for i = 2, 3, . . . , N − 1 do
x ← a + ih;
ai ← 2 + h2 q(x);
bi ← −1 + (h/2)p(x);
ci ← −1 − (h/2)p(x);
di ← −y 2 r(x).
(3)
x ← b − h.
aN ← 2 + h2 q(x);
cN ← −1 − (h/2)p(x);
dN ← −h2 r(x) + (1 − (h/2)p(x))β.
(4)
l 1 ← a1 .
u1 ← b1 /a1 ;
z1 ← d1 /l1 ;
(5)
for i = 2, 3, . . . , N − 1 do
li ← ai − ci ui−1 ;
ui ← bi /li ;
zi ← (di − ci zi−1 )/li .
(6)
lN ← aN − cN uN −1 ;
zN ← (dN − cN zN −1 )/lN .
(7)
w0 ← α;
wN +1 ← β;
wN ← zN .
(8)
for i = N − 1, N − 2, . . . , 1 do
wi ← zi − ui wi+1 .
(9)
for i = 0, 1, . . . , N + 1 do
x ← a + ih;
OUTPUT (x, wi ).
(10)
STOP.
===================================================
108
第 9 章 常微分方程式の2点境界値問題
例題 9.4 線形差分法を用いて次の境界値問題の解を近似せよ。
2
2
sin(log x)
y =− y + 2 +
, 1 ≤ x ≤ 2, y(1) = 1, y(2) = 2.
x
x
x2
解 上のアルゴリズムで,N = 9 とすると,小区間の数は10となり,h = 0.1。このとき
の結果は下の表に表している。
i
0
1
2
3
4
5
6
7
8
9
10
xi
wi
1.00000000
1.10000000
1.20000000
1.30000000
1.40000000
1.50000000
1.60000000
1.70000000
1.80000000
1.90000000
2.00000000
1.00000000
1.09260052
1.18704313
1.28333687
1.38140205
1.48112026
1.58235990
1.68498902
1.78888175
1.89392110
2.00000000
演習問題 9.3
1. 線形差分法を用いて次の境界値問題の近似解を次の条件で求めよ。
y = 4(y − x), 0 ≤ x ≤ 1, y(0) = 0, y(1) = 2
また,厳密解 y(x) = e2 (e4 − 1)−1 (e2x − e−2x ) + x と比較せよ。
(a) h = 12
(b) h = 14
2. 線形差分法を用いて次の境界値問題の近似解を次の条件で求めよ。
y = y + 2y + cos x, 0 ≤ x ≤
π
π
, y(0) = −0.3, y( ) = −0.1
2
2
1
また,厳密解 y(x) = − 10
(sin x + 3 cos x) と比較せよ。
(a) h =
(b) h =
π
4
π
8
3. 線形差分法を用いて次の境界値問題の近似解を h = 0.1 で求めよ。
y = −3y + 2y + 2x + 3, 0 ≤ x ≤ 1, y(0) = 2, y(1) = 1
9.4. Rayleigh-Ritz 法
9.4
109
Rayleigh-Ritz 法
変分原理
独立変数を x, 従属変数を y とするとき,x, y および y の与えられた関数 F (x, y, y )
に対し,定積分
x1
I[y] =
F (x, y, y )dx
x0
で定められる汎関数 (functional) の極大値,極小値,または停留値を求める問題を変分
問題という。
ただし,積分の両端 x = x0 ,および x = x1 における y の値 y(x0 ) = y0 , y(x1 ) = y1 は
指定されているものとする。求める関数 y(x) に,区間 (x0 , x1 ) で微小な変化 δy を与えた
とき I[y] の変化を δI[y] と書き,これを第1変分という。そのとき,
x1
x
δI[y] = [Fy δy]x10 +
Fy −
x0
d
Fy
dx
δydx = 0
から,変分学の基本予備定理により,Euler の方程式
Fy −
d
Fy = 0
dx
が導かれる。ただし,Fy = ∂F/∂y, Fy = ∂F/∂y で δy は両端 x0 , x1 で 0 とする。
直接法
Euler の方程式を解くかわりに,求めるべき関数 y(x) に対して,あるパラメタを含んだ
近似関数を仮定し,汎関数 I[y] をそのパラメタ関数とみて,その極小値または極大値,一
般に停留値を求める方法を直接法という。
その中で,近似関数をある完備関数系で展開して,その係数を上述のパラメタとして考
える方法を Ritz 法といい,これを多少変形したものに Galerkin 法がある。
なお,微分方程式の境界値問題で,微分方程式を直接解くかわりに,この方程式を Euler
の方程式とする変分問題に直し,直接法によって解くこともしばしば行われる。このよう
な方法を Rayleigh-Ritz 法とよぶ。
Rayleigh-Ritz 法を詳しく説明するために,線形2点境界値問題として Sturm-Liouville
型方程式
d
dy
− (p(x) ) + q(x)y = f (x), 0 ≤ x ≤ 1
dx
dx
および境界条件
y(0) = y(1) = 0
を考える。ここからの議論を簡単にするために,p ∈ C 1 [0, 1],q, f ∈ C[0, 1] とする。さら
に,x ∈ [0, 1] において
p(x) ≥ δ, q(x) ≥ 0
110
第 9 章 常微分方程式の2点境界値問題
となる定数 δ > 0 が存在すると仮定する。この仮定は上の2点境界値問題が一意の解を持
つことを保証してくれる。
C02 [0, 1] = {u ∈ C 2 [0, 1], u(0) = u(1) = 0} とすると,次の定理が成り立つ。
定理 9.3 関数 p ∈ C 1 [0, 1], q, f ∈ C[0, 1] で 0 ≤ x ≤ 1 において
p(x) ≥ δ > 0, q(x) ≥ 0
とすると,関数 y ∈ C02 [0, 1] が微分方程式
d
dy
(p(x) ) + q(x)y = f (x), 0 ≤ x ≤ 1
dx
dx
の一意の解であるための必要十分条件は汎関数
−
1
I[u] =
(9.14)
{p(x)(u (x))2 + q(x)(u(x))2 − 2f (x)u(x)}dx
(9.15)
0
を極小にする関数が y ∈ C02 [0, 1] であることである。
この定理の証明は3つのステップを踏んでいる。最初のステップでは,式 (9.14) を満たす
解 y は式
1
1
f (x)u(x)dx =
0
p(x)
0
dy(x) du(x)
+ q(x)y(x)u(x)dx
dx
dx
(9.16)
も満たすことを示す。
2つ目のステップでは,y ∈ C02 [0, 1] が式 (9.15) を満たすための必要十分条件は式 (9.16)
を満たすことであることを示す。
3つ目のステップでは,式 (9.16) が一意の解を持つことを示す。この一意の解は式 (9.15)
の解でもあり,従って式 (9.14) の解でもある。よって,式 (9.14), (9.15) の解は同一である。
Rayleigh-Ritz 法は完備関数系で汎関数を最小化することにより解 y を近似する。この
とき,完備関数系を {φ0 , φ1 , . . . , φn } とすると,
φi (0) = φi (1) = 0, i = 1, 2, . . . , m
である。式 (9.14) の解 y(x) の近似
n
φ(x) =
ci φi (x)
i=1
は汎関数 I[
n
i=1 ci φi ]
を最小化する c1 , c2 , . . . , cn を求めることにより得られる。
式 (9.15) より
n
I[φ]
=
I
ci φi
i=1
1
=
(9.17)
n
0
n
ci φi (x)]2 + q(x)[
{p(x)[
i=1
n
ci φi (x)]2 − 2f (x)
i=1
ci φi (x)}dx (9.18)
i=1
9.4. Rayleigh-Ritz 法
111
となり,これが極小値を持つには,I を c1 , c2 , . . . , cn の関数と考えたとき,
∂I
= 0, j = 1, 2, . . . , n
∂cj
が成り立つことである。これより,
∂I
=
∂cj
n
1
n
2p(x)
0
ci φi (x)φj (x) + 2q(x)
i=1
ci φi (x)φj (x) − 2f (x)φj (x) dx
i=1
を得る。したがって,j = 1, 2, . . . , n に対して
n
1
0=
i=1
0
1
(p(x)φi (x)φj (x) + q(x)φi (x)φj (x))dx ci −
f (x)φj (x)dx
(9.19)
0
を得る。
式 (9.19) で表された正規方程式より,n 次の連立方程式 Ac = b が得られる。ここで,
c = (c1 , c2 , . . . , cn )t ,対称行列 A の成分は
1
aij =
0
(p(x)φi (x)φj (x) + q(x)φi (x)φj (x))dx
で,b は
1
bi =
f (x)φi (x)dx
0
である。
完備関数系のもとになる基底関数で最も簡単なのは,区分的に1次式である。そこで,
基底関数を作成する。まず,区間 [0, 1] を点 x0 , x1 , . . . , xn+1 を選ぶことにより n 個の区
間に分割する。
0 = x0 < x1 < · · · < xn < xn+1 = 1
i = 0, 1, 2, . . . , n で hi = xi+1 − xi とし,基底関数 φ1 (x), φ2 (x), . . . , φn (x) を


0
0 ≤ x ≤ xi−1



 1 (x − x ) x
i−1
i−1 < x ≤ xi
hi−1
φi (x) =
1

xi < x ≤ xi+1

hi (xI+1 − x)


 0
x
<x≤1
i+1
と定義する。図で表すと次のようになる。
(9.20)
112
第 9 章 常微分方程式の2点境界値問題
図 9.2:
関数 φi は区分的に1次式より,その導関数 φi は区間 (xj , xj+1 ) で連続となり i =
1, 2, . . . , n で


0



 1
[φi (x) =
0 < x < xi−1
xi−1 < x < xi
hi−1

− h1i



 0
xi < x < xi+1
xi+1 < x < 1
で与えられる。φi と φi は区間 (xi−1 , xi ) でだけ零でないので
φi (x)φj (x) ≡ 0, φi (x)φj (x) ≡ 0
が j = i − 1, i, i + 1 を除いて成り立つ。その結果,連立方程式 Ac = b の係数行列 A は3
重対角行列でその成分は
1
aii
=
0
(p(x)(φi (x))2 + q(x)(φi (x))2 )dx
2
1
=
p(x)dx + −
hi−1
xi−1
2
1
+
xi
hi−1
xi
2
1
hi
xi+1
p(x)dx
xi
(xi − xi−1 )2 q(x)dx +
xi−1
1
hi
2
xi+1
(xi+1 − xi )2 q(x)dx
xi
1
ai,i+1
=
(p(x)φi (x)φi+1 (x) + q(x)φi (x)φi+1 (x))dx
0
=
1
hi
−
2
xi+1
p(x)dx +
xi
1
hi
2
xi+1
(xi+1 − x)(x − xi )q(x)dx
xi
1
ai,i−1
=
0
=
−
(p(x)φi (x)φi−1 (x) + q(x)φi (x)φi−1 (x))dx
1
hi−1
2
xi
p(x)dx +
xi−1
1
hi−1
2
xi
(xi − x)(x − xi−1 )q(x)dx
xi−1
9.4. Rayleigh-Ritz 法
113
で与えられる。また,b の成分は
1
bi =
f (x)φi (x)dx =
0
1
xi
hi−1
xi−1
(x − xi−1 )f (x)dx +
1
hi
xi+1
(xi+1 − x)f (x)dx
xi
で与えられる。ここで,次の6個の積分を求める必要がある。
Q1,i
Q2,i
Q3,i
Q4,i
Q5,i
Q6,i
=
=
=
=
=
=
2
1
hi
xi+1
(xi+1 − x)(x − xi )q(x)dx i = 1, 2, . . . , n − 1
xi
2
1
hi−1
xi+1
xi
2
1
(xi+1 − x)2 q(x)dx i = 1, 2, . . . , n
xi
p(x)dx i = 1, 2, . . . , n + 1
hi−1
xi−1
1
xi
hi−1
xi−1
1
hi
(x − xi−1 )2 q(x)dx i = 1, 2, . . . , n
xi−1
2
1
hi
xi
(x − xi−1 )f (x)dx i = 1, 2, . . . , n
xi+1
(xi+1 − x)f (x)dx i = 1, 2, . . . , n
xi
これらを用いて A と b を表すと
aii
= Q4,i + Q4,i+1 + Q2,i + Q3,i i = 1, 2, . . . , n
ai,i+1
= −Q4,i+1 + Q1,i i = 1, 2, . . . , n
ai,i−1
= −Q4,i + Q1,i−1 i = 2, 3, . . . , n
bi
= Q5,i + Q6,i i = 1, 2, . . . , n
これより,Ac = b を c について解くと Rayleigh-Ritz 近似
n
φ(x) =
ci φi (x)
i=1
が求まる。
この方法の実践での問題は 6n 個の積分を行わなければならないことである。積分は直
接または合成 Simpson などの求積法で求めることができる。そこでこれに変わる方法と
して,関数 p, q, f を区分的に連続な1次式で近似してから近似を積分する方法がある。
例えば,Q1,i で q(x) の区分的に1次式を用いた補間は
n+1
Pq (x) =
q(xi )φi (x)
i=0
114
第 9 章 常微分方程式の2点境界値問題
ただし,φ1 , φ2 , . . . , φn は式 (9.20) で定義したもので,
x1 −x
x1
φ0 (x) =
0
0 ≤ x ≤ x1
その他
φn+1 =
x−xn
1−xn
0
xn ≤ x ≤ 1
その他
となる。
積分範囲は [xi , xi+1 ] より,Pq (x) は
Pq (x) = q(xi )φi (x) + q(xi+1 )φi+1 (x)
と書き直せる。これは1次の補間多項式なので,q ∈ C 2 [xi , xi+1 ] ならば
|q(x) − Pq (x)| = O(h2i ), xi ≤ x ≤ xi+1
となる。よって,i = 1, 2, . . . , n − 1 に対して Q1,i の近似は近似された非積分関数を積分
することにより得られる。つまり
Q1,i
=
≈
=
1
hi
2
1
hi
2
xi+1 (xi+1 − x)(x − xi )q(x)dx
xi
xi+1 (xi+1 − x)(x − xi )
xi
q(xi )(xi+1 − x) q(xi+1 )(x − xi )
+
hi
hi
hi
(q(xi ) + q(xi+1 ))
12
さらに,q ∈ C 2 [xi , xi+1 ] において
|Q1,i −
hi
(q(xi ) + q(xi+1 ))| = O(h2i )
12
である。同様にして,残りの積分を求めると
Q2,i
≈
Q3,i
≈
Q4,i
≈
Q5,i
≈
Q6,i
≈
hi−1
(3q(xi ) + q(xi−1 ))
12
hi
(3q(xi ) + q(xi+1 ))
12
hi−1
(p(xi ) + p(xi−1 ))
2
hi−1
(2f (xi ) + f (xi−1 ))
6
hi
(2f (xi ) + f (xi+1 ))
6
例題 9.5 次の境界値問題
−y + π 2 y = 2π 2 sin(πx), 0 ≤ x ≤ 1, y(0) = y(1) = 0
の解を区分的1次式 Rayleigh-Ritz 法を用いて近似せよ。
dx
9.4. Rayleigh-Ritz 法
115
区間 [0, 1] を10等分すると,hi = h = 0.1,xi = 0.1i となる。これより,
Q1,i
=
1
0.1
2
0.1i+0.1
0.1i
0.1i
Q2,i
(x − 0.1i + 0.1)2 π 2 dx =
= 100
0.1i−0.1
0.1i+0.1
Q3,i
(0.1i + 0.1 − x)(x − 0.1i)π 2 dx =
= 100
Q4,i
= 100
π2
30
(0.1i + 0.1 − x)2 π 2 dx =
0.1i
0.1i
π2
60
π2
30
dx = 10
0.1i−0.1
0.1i
Q5,i
(x − 0.1i + 0.1)2π 2 sin πxdx
= 10
0.1i−0.1
= −2π cos(0.1πi) + 20[sin(0.1πi) − sin((0.1i − 0.1)π)]
0.1i+0.1
Q6,i
= 10
(0.1i + 0.1 − x)2π 2 sin πxdx
0.1i
= 2π cos(0.1πi) − 20[sin((0.1i + 0.1)π) − sin(0.1πi)]
ここで,線形系 Ac = b は
ai,i
ai,i+1
ai,i−1
bi
π2
i = 1, 2, . . . , 9
15
2
π
i = 1, 2, . . . , 8
= −10 +
60
π2
= −10 +
i = 2, 3, . . . , 9
60
= 40 sin(0.1πi)(1 − cos(0.1π))
= 20 +
より3重対角行列による連立方程式の解 c は
c9 = 0.3102866742 c8 = 0.59902003271
c6 = 0.9549641893 c5 = 1.004108771
c3 = 0.8123410598 c2 = 0.5902003271
c7 = 0.8123410598
c4 = 0.9549641893
c1 = 0.3102866742
で与えられる。したがって,区分的に1次式による近似は
9
φ(x) =
ci φi (x)
i=1
となる。
Rayleigh − Ritz アルゴリズム
116
第 9 章 常微分方程式の2点境界値問題
次の Sturm-Liouville 境界値問題
−
d
dx
p(x)
dy
dx
+ q(x)y = f (x), 0 ≤ x ≤ 1, y(0) = y(1) = 0
の解を区分的に1次式
n
φ(x) =
ci φi (x)
i=1
で近似する。
===================================================
入力 整数 n ≥ 1; 分割点 0 = x0 < x1 < · · · < xn = 1.
出力 係数 c1 , c2 , . . . , cn .
(1)
for i = 0, 1, . . . , n do
hi ← xi+1 − xi ;
(2)
for i = 1, 2, 3, . . . , n do
8
0 ≤ x ≤ xi−1
> 0
>
< 1 (x − x ) x
i−1
i−1 < x ≤ xi
hi−1
φi (x) ←
1
>
(x
−
x)
x
< x ≤ xi+1
I+1
i
> hi
:
0
xi+1 < x ≤ 1
(3)
for i = 1, 2, . . . , n − 1 compute
Q1,i , Q2,i , . . . , Q6,i ;
Q2,n , Q3,n , . . . , Q6,n .
(4)
for i = 1, 2, . . . , n − 1 do
αi ← Q4,i + Q4,i+1 + Q2,i + Q3,i ;
βi ← Q1,i − Q4,i+1 ;
bi ← Q5,i + Q6,i .
(5)
αn ← Q4,n + Q4,n+1 + Q2,n + Q3,n ;
bn ← Q5,n + Q6,n .
3重対角行列による連立方程式を Crout 法で解く
(6)
a1 ← α 1 ;
ζ1 ← β1 /α;
z1 ← b1 /a1 .
(7)
for i = 2, . . . , n − 1 do
ai ← αi − βi−1 ζi−1 ;
ζi ← βi /ai ;
zi ← (bi − βi−1 zi−1 )/ai .
(8)
an ← αn − βn−1 ζn−1 ;
zn ← (bn − βn−1 ζn−1 )/an .
(9)
cn ← zn ;
OUTPUT (cn ).
(10) for i = n − 1, . . . , 1 do
ci ← zi − ζi ci+1 .
(11) STOP
===================================================
117
第 10 章 偏微分方程式
10.1
3つの偏微分方程式
ここでは偏導関数を含んだ方程式の初等的な解法について学んでいく。偏微分方程式は
独立変数 x, y, z, . . .,これらの変数の関数 u,偏導関数 ux , uy , uxx , uyy , uxz , . . . を含んだ
方程式である。
最も一般的な 2 変数の 2 階線形偏微分方程式は次の形で与えられる。
auxx + buxy + cuyy + dux + euy + f u + g = 0.
ただし,a, b, c, d, e, f, g は x, y の既知の関数。また独立変数 x,y が定義されている平面上
の領域で上の式を満たす u をこの偏微分方程式の解という。
定数係数の場合,2次曲線
ax2 + bxy + cy 2 + dx + ey + f = 0
に対比させて,b2 − 4ac が負,零,正にしたがって,


 < 0 楕円型 (elliptic)
b2 − 4ac =
= 0 放物線型 (parabolic)


> 0 双曲線型 (hyperbolic)
とよぶ。したがって楕円型 2 階偏微分方程式は
∇2 u(x, y) =
∂2u
∂2u
(x,
y)
+
(x, y) = f (x, y)
∂x2
∂y 2
の形で表され,放物線型2階偏微分方程式は
∂u
∂2u
(x, t) = α2 2 (x, t)
∂t
∂x
で表され,双曲線型2階偏微分方程式は
2
∂2u
2∂ u
(x,
t)
=
α
(x, t)
∂t2
∂x2
118
第 10 章 偏微分方程式
で表される。
放物線型偏微分方程式
∂u
∂2u
(x, t) = α2 2 (x, t)
∂t
∂x
は熱伝導方程式または,拡散方程式として知られている。ここでは,細長い均質な棒に熱
が伝わるとき,位置 x,時刻 t での棒の温度 u(x, t) が満たす偏微分方程式を導出する。そ
の方法は,微小体積への温度の流入量は,温度の勾配に比例するという経験則に基づく方
法である。
x0 での切断面を通して ∆t 時間の間に棒に流入してくる熱量は,温度勾配 ux (x0 , t) に
比例するので KAux (x0 , t)∆t (K : 熱伝導率, A : 断面積)。同じく ∆t 時間に x0 + ∆x で
の切断面を通して流入する熱量は KAux (x0 + ∆x, t)∆t。よって x0 と x0 + ∆x の間に流
入する総熱量は
KA[ux (x0 + ∆x, t) − ux (x0 , t)]∆t
とる。
一方,この棒の比熱を g(単位質量の温度を単位時間に 1◦ C 上げるのに必要な熱量) とす
るとき,質量 ρA∆x の部分が温度変化 ut をもたらすための熱量を ∆t 時間与えると,総
熱量は
gut ρA∆x∆t
となる。これが上の総熱量と等しくならなければならないので
KA[ux (x0 + ∆x, t) − ux (x0 , t)]∆t = gut ρA∆x∆t.
両辺を A∆x∆t で割ると
K[
ux (x0 + ∆x, t) − ux (x0 , t)
] = gρut .
∆x
ここで ∆x → 0 とすると
Kuxx = gρut
となり
ut = kuxx
k=
K
>0
gρ
を得る。
拡散方程式はその名の通り,熱の伝導もしくは物質濃度の拡散を表す。物質濃度の拡散
とは,水に溶かされた砂糖が周囲に広がっていくなどの過程である。ある地点の温度が周
10.1. 3つの偏微分方程式
119
囲の温度よりも低いならば,そこでの uxx は正なので,ut も正となり温度は上昇する。つ
まり,周囲の温度になじむという調節過程をこの方程式は表している。
外部から熱の供給 f (x, t) がある場合には,棒の温度 u(x, t) は次の式を満たす。
ut = kuxx + f (x, t) (k > 0).
u(x, t) が時間 t に対して一定のとき,つまり ut = 0 のとき,u(x, t) は定常温度分布を表
す。初期条件は,定常温度分布の t = 0 における温度分布 f (x) を表す。つまり,
u(x, 0) = f (x)
となる。また棒が有限な長さ L を持つときの境界条件には次のようなものが考えられる。
1. 棒の両端の温度が U1 , U2 に保たれているとき
u(0, t) = U1 , u(L, t) = U2 .
2. 棒の温度分布が極限温度分布に近づくとき
lim u(x, t) = U1 +
x→∞
U2 − U1
x
L
3. 棒の両端が断熱されて,両端からの熱の出入りが無いとき
ux (0, t) = ux (L, t) = 0.
双曲線型2階偏微分方程式
2
∂2u
2∂ u
(x,
t)
=
α
(x, t)
∂t2
∂x2
は波動方程式として知られている。ここでは,水平に張られた弾性弦が微小振動するとき,
位置 x,時刻 t において弦の垂直方向の変位 u(x, t) がみたす偏微分方程式を導出する。
まず 2 点間に張った弦を考える。弦をはじいて振動させるとき振幅は小さいものとする。
また弦の張力は他の力に比べて大きいものとする。振動している弦の方程式をみつけるた
め x1 から x1 + ∆x の間の弦の小さな部分について調べる。
120
第 10 章 偏微分方程式
水平方向には動きがないので,水平方向の力はつりあっている。よって
|T1 | cos α = |T2 | cos β = T = 定数
(水平方向).
また垂直方向の力の差は,運動方程式より質量 ρ∆s と加速度 utt の積で表わされる。ただ
し ρ は単位長での質量,∆s はいま考えている弦の小さな部分の長さ。よって
|T2 | sin β − |T1 | sin α = ρ∆sutt
(垂直方向).
ここで振動が小さいことに注意すると,∆s ≈ ∆x。 両辺を T で割ると
ρ∆x
utt ≈ tan β − tan α.
T
両辺を ∆x で割り,接線の傾きと微分係数は等しいことを用いると,
ux (x + ∆x, t) − ux (x, t)
ρ
utt ≈
.
T
∆x
ここで ∆x → 0 とすると,
ρ
utt = uxx または utt = c2 uxx .
T
これは 1 次元波動方程式 (one dimensional wave equation) とよばれる。
初期条件は t = 0 のときの弦の形状および初速度を指定する条件である。例えば,初期
の形状が y = f (x) である弦に初速度 g(x) を与えた場合には,初期条件は
u(x, 0) = f (x), ut (x, 0) = g(x)
となる。また弦が有限な長さ L を持つとき,境界条件については,例えば次のものが考え
られる。
(i) 弦の両端を固定するとき
u(0, t) = 0, u(L, t) = 0.
(ii) 弦の両端点が振動方向に自由に動けるとき
ux (0, t) = 0, ux (L, t) = 0.
薄い膜の振動は,膜が静止の状態では xy 平面に位置し,時刻 t における垂直方向の変
位が u(x, y, t) であるとする。また,薄い膜が引っ張られた後の単位面積あたりの質量を
ρ(x, y) とし,単位長あたりの張力はどの場所でもどの方向でも同じであるとする。する
と,次の 2 次元波動方程式 (two dimensional wave equation) で表される。
utt = c2 (uxx + uyy ).
10.1. 3つの偏微分方程式
121
この方程式を極座標 (r, θ) で表わすと,次のようになる。
1
1
utt = c2 (urr + ur + 2 uθθ ).
r
r
次に,大気・海洋で基本的な役割を果たす浅水波を考え,波動方程式の導出を行う。大規
模大気あるいは海洋変動をモデル化するのに用いることができる。なぜなら,海洋や大気
はその水平幅に対してその厚さが非常に薄い。したがって,浅いという取り扱いができ,
また流体層内が上から下まで一様に動くという,浅水近似を用いることができる。この近
似の下では,運動方程式は
ut = −
1
px
ρ0
と表せる。ここで,ut は波の速さ,p は圧力。海水表面の盛り上がりを h とすると,圧力
は h で生ずると考え,
p = gρ0 h
となる。これを用いて最初の式から p を消去すると
ut = −
1
gρ0 hx = −ghx
ρ0
(10.1)
となる。しかし,水面の盛り上がりは,水の収束・発散でもたらされるので,
ht = −Hux
(10.2)
と表される。式 (10.1) と (10.2) から u または h を消去すると,
utt = −ghxt = −ghtx = −g(−Huxx ) = gHuxx
または
htt = −Huxt = Hghxx
より,
utt = gHuxx htt = gHhxx
(10.3)
を得る。一般に連続体に復元力が作用して波動が生ずる場合,復元力が強いほど波の速度
は速い。別の方法で波動方程式の導出を行う。ここでは,ばねで接続された質点を考える。
質点の質量を m,ばね定数を a とし,n 番目の質点の変位を u(x, t) で表す。ばね間の
距離が δx であるとする。このとき n 番目の質点での変位は
mutt = a[u(x + δx, t) − u(x, t) − (u(x, t) − u(x − δx, t))]
で表される。ここで,u(x ± δx, t) の Taylor 展開を行うと
u(x ± δx, t) = u(x, t) ± δxux (x, t) +
δx3
δx2
uxx (x, t) ±
uxxx (ξ, t)
2
6
122
第 10 章 偏微分方程式
となり,これを元の式に代入すると,
mutt = a[
δx2
uxx (x, t)]
2
を得る。これより,
utt = c2 uxx , c = δx
a/m
となる。この導出方法は地震波を考察するのに用いられる。
楕円型偏微分方程式
∂2u
∂2u
(x, y) + 2 (x, y) = f (x, y)
2
∂x
∂y
は Poisson 方程式として知られている。この式で,f は境界 S を持つ平面領域 R への入
力を表す。この型の式は,時間に対して独立な現象を表すときに生じる。例えば,平面領
域での熱伝導現象における定常温度分布,重力場のポテンシャル,静電場のポテンシャル,
非圧縮性流体の速度ポテンシャルなどがある。
Poisson 方程式で一意の解を得るためには,さらなる条件が必要となる。例えば,熱伝
導現象における定常温度分布(ある一定の温度に保たれる)では,f (x, y) ≡ 0 なる条件が
得られる。これより,Laplace 方程式とよばれる次の式
∂2u
∂2u
(x, y) + 2 (x, y) = 0
2
∂x
∂y
を得る。また,平面領域 R の熱伝導現象における定常温度分布において,領域内の温度
が,領域 R の境界 ∂R における温度分布で得られるとき,この条件を Dirichlet 境界条
件 (Dirichlet boundary condition) といい,
u(x, y) = g(x, y), (x, y) ∈ ∂R
で与えられる。
10.2
楕円型偏微分方程式
楕円型偏微分方程式として,Poisson 方程式の境界値問題
∂2u
∂2u
(x,
y)
+
(x, y) = f (x, y)
∂x2
∂y 2
(10.4)
を平面 R = {(x, y) : a < x < b, c < y < d} で考える。ただし,u(x, y) = g(x, y), (x, y) ∈
∂R. もし,f と g が R 上で連続ならば,この方程式は一意の解を持つ。
ここで,用いる方法は境界値問題への差分法の応用である。つまり,微分方程式におけ
る微分を適当な差分係数 (difference quotient) で置き換えて解く方法である。最初のス
テップは,整数 m と n を選び,刻み幅 h = (b − a)/n と k = (d − c)/m を決めることで
ある。次に,区間 [a, b] を幅 h で n 等分し,区間 [c, d] を幅 k で m 等分する。
10.2. 楕円型偏微分方程式
123
図 10.1:
xi = a + ih, i = 0, 1, 2, . . . , n
yi = c + jk, j = 0, 1, 2, . . . , m
で与えられる点 (xi , yi ) を通る水平線と垂直線を長方形 R に引く。
直線 x = xi と y = yj は格子線 (grid lines) で,格子線の交点は格子のメッシュ点
(mesh points) である。格子の内部のメッシュ点に対しては,xi の周りの x における
Taylor 級数を用いた中心差分公式
∂2u
u(xi+1 , yi ) − 2u(xi , yi ) + u(xi−1 , yi ) h2 ∂ 4 u
(x
,
y
)
=
−
(ξi , yj )
i
i
∂x2
h2
12 ∂x4
(10.5)
を用いる。ただし,ξi ∈ (xi−1 , xi+1 ). 同様にして,yi の周りの y における Taylor 級数を
用いた中心差分公式
∂2u
u(xi+1 , yi ) − 2u(xi , yi ) + u(xi−1 , yi ) k 2 ∂ 4 u
(x
,
y
)
=
−
(xi , ηj )
i
i
∂y 2
k2
12 ∂y 4
(10.6)
を用いる。ただし,ηj ∈ (yi−1 , yi+1 ).
これらの2つの公式を用いて式 (10.4) を表すと,i = 1, 2, . . . , n − 1,j = 1, 2, . . . , m − 1
に対して,
=
u(xi+1 , yj ) − 2u(xi , yj ) + u(xi−1 , yj ) u(xi , yj+1 ) − 2u(xi , yj ) + u(xi , yj−1 )
+
h2
k2
2 4
2 4
h ∂ u
k ∂ u
f (xi , yj ) +
(ξi , yj ) +
(xi , ηj )
12 ∂x4
12 ∂y 4
となる。また,境界条件は
となる。
u(x0 , yj ) =
g(x0 , yj ), u(xn , yj ) = g(xn , yj ), j = 0, 1, . . . , m
u(xi , y0 ) =
g(xi , y0 ), u(xi , ym ) = g(xi , ym ), i = 1, 2, . . . , n − 1
124
第 10 章 偏微分方程式
この差分方程式を求める方法を差分法 (Finite-Difference Method) という。このとき,
局所打切り誤差が O(h2 +k 2 ) であるように u(xi , yj ) の近似 wij をとると,i = 1, 2, . . . , n−1
と j = 1, 2, . . . , m − 1 に対して
2
h
k
2
+ 1 wij − (wi+1,j + wi−1,j ) −
h
k
2
(wi,j+1 + wi,j−1 ) = −h2 f (xi , yj ) (10.7)
ただし,
w0j
=
g(x0 , yj ), wnj = g(xn , yj ), j = 0, 1, . . . , m
wi0
=
g(xi , y0 ), wim = g(xi , ym ), i = 1, 2, . . . , n − 1
式 (10.7) では u(x, y) の近似を一般に
(xi−1 , yj ), (xi , yj ), (xi+1 , yj ), (xi , yj−1 ), (xi , yj+1 )
の点で行う必要がある。これらの点を図に表すと
図 10.2:
となる。これより,これらの点は点 (xi , yj ) に対して星型となっている。ここで,境界条
件を用いると,wij についての (n − 1)(m − 1) 行 (n − 1)(m − 1) 列の連立方程式を解くこ
とになる。
この連立方程式は,内部メッシュ点を番号を振りなおすことによりもっと効率よく解く
ことができる。その方法として推薦されているのは,
Pl = (xi , yj ), wl = wi,j
ただし,l = i + (m − 1 − j)(n − 1) である。この方法によると,ラベルが左から右へ,そ
して上から下へとふられる。
10.2. 楕円型偏微分方程式
125
図 10.3:
例題 10.1 隣合う2つの境界は0℃に保たれていて,残りの2つの境界は0℃から100
℃まで線形に増加する境界条件のもとで,大きさ 0.5m × 0.5m の薄い鉄板の定常温度分
布を求めよ。
解 x 軸と y 軸に沿って,零の境界を配置すると,この境界値問題は
∂2u
∂2u
(x, y) + 2 (x, y) = 0
2
∂x
∂y
ここで,(x, y) ∈ R = {(x, y) : 0 < x < 0.5, 0 < y < 0.5} で,境界条件は
u(0, y) = 0, u(x, 0) = 0, u(x, 0.5) = 200x, u(0.5, y) = 200y
と表せる。
ここで,n = m = 4 とおくと,この問題は次の図のような格子点を持ち,その差分方程
式は,i = 1, 2, 3,j = 1, 2, 3 に対して
4wi,j − wi+1,j − wi−1,j − wi,j−1 − wi,j+1 = 0
で与えられる。
図 10.4:
126
第 10 章 偏微分方程式
これを新しくふられたラベルによる格子点 wi = u(Pi ) を用いて表すと,Pi における
式は,
P1
P2
P3
P4
P5
P6
P7
P8
P9
:
4w1 − w2 − w4
:
4w2 − w3 − w1 − w5
:
4w3 − w2 − w6
:
4w4 − w5 − w1 − w7
: 4w5 − w6 − w4 − w2 − w8
:
4w6 − w5 − w3 − w9
:
4w7 − w8 − w4
:
4w8 − w9 − w7 − w5
:
4w9 − w8 − w6
=
=
=
=
=
=
=
=
=
w0,3 + w1,4
w2,4
w4,3 + w3,4
w0,2
0
w4,2
w0,1 + w1,0
w2,0
w3,0 + w4,1
となる。ここで,右辺は境界条件より
w1,0 = w2,0 = w3,0 = w0,1 = w0,2 = w0,3 = 0
w1,4 = w4,1 = 25, w2,4 = w4,2 = 50, w3,4 = w4,3 = 75
となるので,この問題から作られる連立方程式は

4 −1
0 −1
0
0
0
0

 −1
4 −1
0 −1
0
0
0

 0 −1
4
0
0
−1
0
0


 −1
0
0
4 −1
0 −1
0

 0 −1
0 −1
4 −1
0 −1


 0
0 −1
0 −1
4
0
0

 0
0
0
−1
0
0
4
−1


0
0
0 −1
0 −1
4
 0
0
0
0
0
0
−1
0
0
0
0
0
0
−1
0
−1
−1
4


















w1
w2
w3
w4
w5
w6
w7
w8
w9


 
 
 
 
 
 
 
 
=
 
 
 
 
 
 
 
 
25
50
150
0
0
50
0
0
25


















で表せる。これより w1 , w2 , . . . , w9 は Gauss-Seidel 法を用いて求めることができる。その
結果は次のようになる。
i
1
2
3
4
5
6
7
8
9
wi
18.75
37.50
56.25
12.50
25.00
37.50
6.25
12.50
18.75
Poisson 方程式の差分法による近似アルゴリズム
Poisson 方程式
∂2u
∂2u
(x, y) + 2 (x, y) = f (x, y), a ≤ x ≤ b, c ≤ y ≤ d
2
∂x
∂y
10.2. 楕円型偏微分方程式
127
の近似解を次の境界条件
x = a または x = b で c ≤ y ≤ d のとき,u(x, y) = g(x, y)
y = c または y = d で a ≤ x ≤ b のとき,u(x, y) = g(x, y)
で求める。
===================================================
入力 端点 a, b, c, d; 整数 m ≥ 3, n ≥ 3; 許容限度 T OL; 最大反復回数 N.
出力 i = 0, 1, . . . , n − 1 と j = 1, 2, . . . , m − 1 における u(xi , yj ) の近似 wi,j とメッセージ.
(1)
h ← (b − a)/n;
k = (d − c)/m;
(2)
for i = 1, 2, . . . , n − 1 do
x ← a + ih;
(3)
for j = 1, 2, . . . , m − 1 do
yj ← c + jk.
(4)
for i = 1, 2, . . . , n − 1 do
for j = 1, 2, . . . , m − 1 do;
wi,j ← 0.
(5)
λ ← h2 /k2
µ ← 2(1 + λ);
l ← 1.
(6)
while(l ≤ N ) do (7) − (20).
(7)
z ← (−h2 f (x1 , ym−1 ) + g(a, ym−1 ) + λg(x1 , d) + λw1,m−2 + w2,m−1 )/µ;
N ORM ← |z − w1,m−1 |;
w1,m−1 ← z.
(8)
for i = 2, 3, . . . , n − 2 do
z ← (−h2 f (xi , ym−1 ) + λg(xi , d) + wi−1,m−1 + wi+1,m−1 + λwi,m−2 )/µ
if(|wi,m−1 − z| > N ORM ) then
N ORM ← |Wi,m−1 − z|;
wi,m−1 ← z.
(9)
z ← (−h2 f (xn−1 , ym−1 ) + g(b, ym−1 ) + λg(xn−1 , d) + wn−2,m−1 + λwn−1,m−1 )/µ;
if(|wn−1,m−1 − z| > N ORM ) then
N ORM ← |Wn−1,m−1 − z|;
wn−1,m−1 ← z.
(10)
for j = m − 2, m − 3, . . . , 2 do (11), (12), (13).
(11)
z ← (−h2 f (x1 , yj ) + g(a, yj ) + λw1,j+1 + λw1,j−1 + w2,j )/µ;
if(|w1,j − z| > N ORM ) thent
N ORM = |W1,j − z|;
w1,j = z.
(12)
for i = 2, 3, . . . , n − 2 do
z ← (−h2 f (xi , yj ) + wi−1,j + λwi,j+1 + wi+1,j + λwi,j−1 )/µ;
if(|wi,j − z| > N ORM ) then
N ORM ← |Wi,j − z|;
wi,j ← z.
(13)
z ← (−h2 f (xn−1 , yj ) + g(b, yj ) + wn−2,j + λwn−1,j+1
if(|wn−1,j − z| > N ORM ) then
N ORM ← |Wi,j − z|;
wn−1,j ← z.
128
第 10 章 偏微分方程式
z ← (−h2 f (x1 , y1 ) + g(a, y1 ) + λg(x1 , c) + λw1,2 + w2,1 )/µ;
if(|w1,1 − z| > N ORM ) thent
N ORM ← |W1,1 − z|;
w1,1 ← z.
(15)
for i = 2, 3, . . . , n − 2 do
z ← (−h2 f (xi , yj ) + λg(xi , c) + wi−1,1 + λwi,2 + wi+1,1 )/µ;
if(|wi,1 − z| > N ORM ) thent
N ORM ← |Wi,1 − z|;
wi,1 ← z.
(16)
z ← (−h2 f (xi , y1 ) + g(b, y1 ) + λg(xn−1 , c) + wn−2,1 + λwn−1,2 )/µ;
if(|wn−1,1 − z| > N ORM ) then
N ORM ← |Wn−1,1 − z|;
wn−1,1 ← z.
(17)
if(N ORM ≤ T OL then do (18), (19).
(18)
for i = 1, 2, . . . , n − 1 do
for j = 1, 2, . . . , m − 1 do
OUTPUT.
(19)
STOP.
(20)
l ← l + 1.
(21) OUTPUT( 最大反復回数を超えました );
STOP.
===================================================
(14)
例題 10.2 次の Poisson 方程式の境界値問題の近似解を差分法を用いて求めよ。
∂2u
∂2u
(x,
y)
+
(x, y) = xey , 0 < x < 2, 0 < y < 1
∂x2
∂y 2
u(0, y) =
0, u(2, y) = 2ey , 0 ≤ y ≤ 1
u(x, 0) =
x, u(x, 1) = ex , 0 ≤ x ≤ 2
解 上のアルゴリズムを用いて厳密解 u(x, y) = xey を n = 6,m = 5 で近似する。
10.2. 楕円型偏微分方程式
129
i
j
xi
yj
wi,j
1
1
1
1
2
1
2
3
4
1
0.33333333
0.33333333
0.33333333
0.33333333
0.66666667
0.20000000
0.40000000
0.60000000
0.80000000
0.20000000
0.40725839
0.49747103
0.60758125
0.74199595
0.81451486
2
2
2
3
3
3
3
4
4
4
4
5
5
5
5
2
3
4
1
2
3
4
1
2
3
4
1
2
3
4
0.66666667
0.66666667
0.66666667
1.00000000
1.00000000
1.00000000
1.00000000
1.33333333
1.33333333
1.33333333
1.33333333
1.66666667
1.66666667
1.66666667
1.66666667
0.40000000
0.60000000
0.80000000
0.20000000
0.40000000
0.60000000
0.80000000
0.20000000
0.40000000
0.60000000
0.80000000
0.20000000
0.40000000
0.60000000
0.80000000
0.99494013
1.21516201
1.48399266
1.22175775
1.49238811
1.82272256
2.22597759
1.62895765
1.98976644
2.43021217
2.96791746
2.03603945
2.48695275
3.03749865
3.70971893
演習問題 10.1
1. 差分法を用いて次の楕円型偏微分方程式の近似解を求めよ。
∂2u ∂2u
+ 2 = 4, 0 ≤ x ≤ 1, 0 < y < 2
∂x2
∂y
u(x, 0) = x2 , u(x, 2) = (x − 2)2 , 0 ≤ x ≤ 1
u(0, y) = y 2 , u(1, y) = (y − 1)2 , 0 ≤ y ≤ 2
ただし,h = k = 1 とする。また,厳密解 u(x, y) = (x − y)2 と比較せよ。
2. 差分法を用いて次の楕円型偏微分方程式の近似解を求めよ。
∂2u ∂2u
+ 2 = 4, 0 ≤ x ≤ 1, 0 < y < 2
∂x2
∂y
u(x, 0) = x2 , u(x, 2) = (x − 2)2 , 0 ≤ x ≤ 1
u(0, y) = y 2 , u(1, y) = (y − 1)2 , 0 ≤ y ≤ 2
ただし,h = k = 1 とする。また,厳密解 u(x, y) = (x − y)2 と比較せよ。
130
第 10 章 偏微分方程式
10.3
放物線型偏微分方程式
ここで学ぶ放物線型偏微分方程式は,熱伝導または拡散方程式
∂u
∂2u
(x, t) = α2 2 (x, t), 0 < x < l, t > 0
∂t
∂x
(10.8)
で境界条件
u(0, t) = u(l, t) = 0, t > 0
と初期条件
u(x, 0) = f (x), 0 ≤ x ≤ l
を満たすとする。
この問題を解くために用いる方法は,楕円型のときと同じように差分法である。
まず,整数 m > 0 を選び,h = l/m とおく。次に,時間の刻み幅 k を選ぶ。ここでの
格子点は (xi , tj ) である。ただし,xi = ih, i = 0, 1, . . . , m,tj = jk ,j = 0, 1, . . . とする。
時間 t における Taylor 級数を用いて差分係数を求めると,
∂u
u(xi , tj + k) − u(xi , tj ) k ∂ 2 u
(xi , tj ) =
−
(xi , µj )
∂t
k
2 ∂t2
(10.9)
ただし,µj ∈ (tj , tj+1 ) である。また,x における Taylor 級数を用いて差分係数を求め
ると
∂2u
u(xi + h, tj ) − 2u(xi , tj ) + u(xi − h, tj ) h2 ∂ 4 u
(x
,
t
)
=
−
(ξi , tj )
i
j
∂x2
h2
12 ∂x4
(10.10)
ただし, ξi ∈ (xi−1 , xi+1 ).
放物線型偏微分方程式 (10.8) より,i = 1, 2, . . . , m − 1 と j = 1, 2, . . . における内部格
子点 (xi , tj ) において
∂u
∂2u
(xi , tj ) − α2 2 (xi , tj ) = 0
∂t
∂x
が成り立つ。よって,差分係数 (10.9) と (10.10) を用いた差分法は
wi,j+1 − wij
wi+1,j − 2wij + wi−1,j
− α2
=0
k
h2
(10.11)
ただし,wij は u(xi .tj ) を近似するとする。
この方法を前進差分法 (Forward-Difference method) という。前進差分法は次の格
子点
(xi−1 , tj ), (xi , tj ), (xi+1 , tj ), (xi , tj+1 )
での近似が必要となる。
10.3. 放物線型偏微分方程式
t
131
j+1
tj
x i-1
xi
x i+1
図 10.5:
この差分係数における局所打ち切り誤差は
τij =
h2 ∂ 4 u
k ∂2u
(xi , µj ) − α2
(ξi , tj )
2
2 ∂t
12 ∂x4
(10.12)
となる。式 (10.11) を wi,j+1 について解くと,i = 1, 2, . . . , m − 1 と j = 1, 2, . . . に対して,
wi,j+1 =
1−
2α2 k
k
wij + α2 2
h2
h
wi+1,j + α2
k
(wi+1,j + wi−1,j )
h2
(10.13)
が成り立つ。ここで,初期条件 u(x, 0) = f (x), 0 ≤ x ≤ l より,wi,0 = f (xi )。また,
i = 0, 1, . . . , m に対して,これらの値を式 (10.13) に用いると,i = 1, 2, . . . , m − 1 にお
ける wi,1 の値を求めることができる。さらに,境界条件 u(0, t) = 0 と u(l, t) = 0 より,
w0,1 = wm,1 = 0 となり,全ての wi,1 の値が求まる。同じことを繰り返すことにより,
wi,2 , wi,3 , . . . , の値を全て求めることができる。差分法の性質により,このシステムを表
す (m − 1) 次の行列は3重対角行列 (tridiagonal matrix) を用いて表すことができる。





A=




(1 − 2λ)
λ
0
λ
(1 − 2λ)
..
.
..
.
λ
..
.
..
.
···
..
.
..
.
..
.
···
0
λ
0
..
.
0
0
..
.
0
λ
(1 − 2λ)
ただし,λ = α2 (k/h2 ) である。ここで,w(j) を j = 0 のとき,
w(0) = (f (x1 ), f (x2 ), . . . , f (xm−1 ))t
j = 1, 2, . . . , に対して
w(j) = (w1j , w2j , . . . , wm−1,j )t










132
第 10 章 偏微分方程式
とおくと,この偏微分方程式の近似解は
w(j) = Aw(j−1)
で与えられる。よって,w(j) は w(j−1) を用いた簡単な行列の積で与えられる。この方法
を前進差分法 (Forward-Difference method) という。
式 (10.12) より,関数 u が x について4回の偏微分が可能で,それらが連続であり,関数
u が t について2回の偏微分が可能で,それらが連続ならば,この方法は誤差が O(k + h2 )
である。
放物線型偏微分方程式の前進差分法による近似アルゴリズム
放物線型偏微分方程式
∂2u
∂2u
(x, t) − α2 2 (x, t) = 0, 0 ≤ x ≤ l, 0 ≤ t ≤ T
∂t
∂x
の近似解を次の境界条件
u(0, t) = u(l, t) = 0, 0 < t < T
と初期条件
u(x, 0) = f (x), 0 ≤ x ≤ l
で求める。
===================================================
入力 終点 l; 最大時間 T ; 定数 α; 整数 m ≥ 3, N ≥ 1;
出力 i = 0, 1, . . . , m − 1 と j = 1, 2, . . . , N における u(xi , tj ) の近似 wi,j
(1)
h ← l/m;
k ← T /N ;
λ ← α2 k/h2 .
(2)
for i = 1, 2, . . . , m do
wi,1 ← f (ih);
(3)
for j = 1, . . . , N do
w0,j ← 0; wm,j ← 0.
(4)
for j = 1, . . . , N do (5)
(5)
for i = 1, . . . , m do
wi,j+1 ← (1 − 2λ)Wi,j + λ(wi+1,j + wi−1,j ).
(6)
for i = 1, . . . , m − 1 do
x ← ih;
OUTPUT(x, wi )
(7)
STOP
===================================================
例題 10.3 次の熱伝導方程式の境界値問題の解を前進差分法を用いて近似せよ。
∂u
∂2u
(x, t) −
(x, t)
∂t
∂x2
u(0, t)
u(x, 0) = sin(πx), 0 ≤ x ≤ 1
=
0, 0 < x < 1, 0 ≤ t
= u(1, t)9, 0, t
10.3. 放物線型偏微分方程式
133
厳密解は
2
u(x, t) = e−π t sin(πx)
で与えられる。
解 t = 0.5, h = 0.1, k = 0.01, λ = 1 とすると,
I
X(I)
u(X(I),0.5)
W(X(I), 0.5)
0
1
2
3
4
5
6
7
8
9
10
0.00000000
0.10000000
0.20000000
0.30000000
0.40000000
0.50000000
0.60000000
0.70000000
0.80000000
0.90000000
1.00000000
0.00000000
0.00222241
0.00422728
0.00581836
0.00683989
0.00719188
0.00683989
0.00581836
0.00422728
0.00222241
0.00000000
0.000000e+000
3.454032e+005
-6.559308e+005
9.005269e+005
-1.055248e+006
1.105605e+006
-1.047737e+006
8.883743e+005
-6.437781e+005
3.378925e+005
0.000000e+000
この例題では,打切り誤差 O(k + h2 ) が予想される。しかし,h = 0.1, k = 0.01 の時には
近似解が得られなかった。その原因を探るため前進差分法の安定性を調べてみよう。 初
期値
w(0) = (f (x1 ), f (x2 ), . . . , f (xm−1 ))t
(0)
(0)
(0)
を表すのに,誤差 e(0) = (e1 , e2 , . . . , em−1 )t が生じたとすると,
w(1) = A(w(0) + e(0) ) = Aw(0) + Ae(0)
より Ae(0) の誤差は w(1) に伝播する。この過程を繰り返すと,n 回目で,e(0) による w(n)
の誤差は An e(0) となる。したがって,この方法は誤差が n の増加と共に増えなければ安
定である。しかし,それが可能となるためには
An e(0) ≤ e(0)
がどんな初期誤差 e(0) に対しても成り立たなくてはならない。したがって, An
≤ 1
が成り立たなくてはならない。この条件を満たすには定理 7.5 より,スペクトル半径が
ρ(An ) = (ρ(A))n ≤ 1 を満たさなくてはならない。したがって,前進差分法は ρ(A) ≤ 1
のときだけ安定であるといえる。A の固有値は
µi = 1 − 4λ sin(
iπ
)
2m
2
, i = 1, 2, . . . , m − 1
134
第 10 章 偏微分方程式
であるので,安定の条件は
ρ(A) =
max
1≤i≤m−1
または,
0 ≤ λ sin(
| 1 − 4λ sin(
2
iπ
)
2m
≤
iπ
)
2m
2
|≤ 1
1
, i = 1, 2, . . . , m − 1
2
である。したがって,安定であるためには,この条件が h → 0,つまり,m → ∞ で満た
されなければならない。
lim
m→∞
より,安定は 0 ≤ λ ≤
1
2
(m − 1)π
2m
sin
2
=1
でおきる。ところが,λ = α2 (k/h2 ) より,
α2
k
1
≤
2
h
2
となる。
例題では α = 1,h = 0.1,k = 0.0005 と置いたので,この条件を満たされず式は安定
ではなかった。 このことから,前進差分法は,
[α2
k
1
≤
2
h
2
ならば,収束率 O(k + h2 ) で解に収束し,条件安定 (conditionally stable) であるとい
う。 では,無条件安定 (unconditionally stable) である方法はどうやって作るのだ
ろうか。前進差分の変わりに後退差分を用いてみると,(∂u/∂t)(xi , tj ) の後退差分係数は
∂u
u(xi , tj ) − u(xi , tj−1 ) k ∂ 2 u
(xi , tj ) =
+
(xi , µj )
∂t
k
2 ∂t2
となる。ただし,µj ∈ (tj−1 , tj )。この式と式 10.10 を
∂2u
∂u
(xi , tj ) − α2 2 (xi , tj ) = 0
∂t
∂x
に代入すると,
u(xi , tj ) − u(xi , tj )
k
−
=
u(xi+1 , tj ) − 2u(xi , tj ) + u(xi−1 , tj )
h2
2
2 4
k∂ u
2h ∂ u
−
(x
,
µ
)
−
α
(ξi , tj )
i
j
2 ∂t2
12 ∂x4
α2
となる。ただし,ξi ∈ (xi−1 , xi+1 )。ここで,wij を u(xi , tj ) の近似としたときできる式
wi+1,j − 2wij + wi−1,j
wij − wi,j−1
− α2
=0
k
h2
(10.14)
10.3. 放物線型偏微分方程式
135
を後退差分法 (Backward-Difference method) という。後退差分法は次の格子点
(xi , tj ), (xi , tj−1 ), (xi−1 , tj ), (xi+1 , tj )
での近似が必要となる。
tj
t j-1
x i-1
xi
x i+1
l
図 10.6:
境界条件と初期値は円で囲まれた格子点での情報を与えるので,この図から式 10.14 を
明示的に解く方法を用いることはできない。しかし,前進差分法では,点
(xi−1 , tj ), (xi , tj ), (xi , tj+1 ), (xi+1 , tj )
での近似を用いた。 λ を α2 (k/h2 ) とおくと,後退差分法は
(1 + 2λ)wij − λwi+1,j − λwi−1,j = wi,j−1
となる。i = 1, 2, . . . , m − 1 において wi,0 = f (xi ) であり,また j = 1, 2, . . . , において
wm,j = w0,j = 0 であることを用いると,差分法は行列表示ができ,










(1 + 2λ)
−λ
0
..
.
0
−λ
0
(1 + 2λ) −λ
..
..
.
.
..
..
.
.
···
0
···
..
.
..
.
..
.
−λ
0
..
.
0
−λ
(1 + 2λ)



w1,j


  w2,j

..


.


wm−1,j


 
 
=
 
 
w1,j−1
w2,j−1
..
.
wm−1,j−1






または,Aw(j) = w(j−1) と表せる。これより,この連立方程式を解き,w(j) を w(j−1) よ
り求める。ここで,λ > 0 より,行列 A は正定値行列で,狭義の対角優勢行列。さらに
また3重対角行列である。よって,Crout 分解または7章の SOR アルゴリズムを用いて
この連立方程式を解くことができる。ここでは,Crout 分解を用いたアルゴリズムを紹介
する。
136
第 10 章 偏微分方程式
放物線型偏微分方程式の後退差分法による近似アルゴリズム
放物線型偏微分方程式
∂2u
∂2u
(x, t) − α2 2 (x, t) = 0, 0 ≤ x ≤ l, 0 ≤ t ≤ T
∂t
∂x
の近似解を次の境界条件
u(0, t) = u(l, t) = 0, 0 < t < T
と初期条件
u(x, 0) = f (x), 0 ≤ x ≤ l
で求める。
===================================================
入力 終点 l; 最大時間 T ; 定数 α; 整数 m ≥ 3, N ≥ 1;
出力 i = 0, 1, . . . , m − 1 と j = 1, 2, . . . , N における u(xi , tj ) の近似 wi,j
(1)
h ← l/m;
k ← T /N ;
λ ← α2 k/h2 .
(2)
for i = 1, 2, . . . , m − 1 do
wi ← f (ih);
ここで,Crout の3重対角行列の分解を用いる。
(3)
l1 ← 1 + 2λ;
u1 ← −λ/l1 .
(4)
for i = 2, . . . , m − 2 do
li ← 1 + 2λ + λui−1 ;
ui ← −λ/li .
(5)
lm−1 ← 1 + 2λ + λum−2 .
(6)
for j = 1, . . . , N do (7) − (11).
(7)
t ← jk;
z1 ← w1 /l1 .
(8)
for i = 2, . . . , m − 1 do
wi ← zi − ui wi+1 .
(9)
wm−1 ← zm−1 .
(10)
for i = m − 2, . . . , 1 do
wi ← zi − ui wi+1 .
(11)
OUTPUT(t);
for i = 1, . . . , m − 1 do
x ← ih;
OUTPUT(x, wi )
(12) STOP
===================================================
例題 10.4 次の熱伝導方程式の境界値問題の解を h = 0.1,k = 0.01 の後退差分法を用い
10.3. 放物線型偏微分方程式
137
て近似せよ。
∂2u
∂u
(x, t) −
(x, t)
∂t
∂x2
u(0, t)
=
0, 0 < x < 1, 0 ≤ t
= u(1, t)9, 0, t
u(x, 0) = sin(πx), 0 ≤ x ≤ 1
ただし,t = 0.5, h = 0.1, k = 0.01, λ = 1 とする。
解
I
X(I)
W(X(I),0.5)
1
2
3
4
5
6
7
8
9
0.10000000
0.20000000
0.30000000
0.40000000
0.50000000
0.60000000
0.70000000
0.80000000
0.90000000
0.00259880
0.00494322
0.00680376
0.00799829
0.00840990
0.00799829
0.00680376
0.00494322
0.00259880
なぜ,後退差分法は安定性の問題がないかは行列 A の固有値を解析することにより
分かる。後退差分法では,固有値は i = 1, 2, . . . , m − 1 のとき,
µi = 1 + 4λ sin
iπ
2m
2
で与えられる。また,λ > 0 より,µi > 1 となる。これより,A−1 が存在する。初期デー
タ誤差 e(0) により n 回目のステップでは誤差 (A−1 )n e(0) が発生する。ここで,A−1 の固
有値は A の固有値の逆数であることに注意すると,A−1 のスペクトル半径の上界は1であ
ることが分かる。よって,後退差分法は λ = α2 (k/h2 ) の値に関わらず安定である。この
ようなとき,条件に関わらず安定 (unconditionally stable) であるという。この方法の
局所打ち切り誤差は O(k + h2 ) である。 後退差分法の弱点は局所打切り誤差がオーダー
O(k) である部分を持っていることである。局所打ち切り誤差が O(h2 + k 2 ) であるほうが
より望ましい方法である。これを達成するための第一歩は,ut (x, t) の近似が O(k 2 ) の打
ち切り誤差を持つものを探すことである。これは,関数 u(x, t) の u(xi , tj ) における t につ
いての Taylor 級数を用い,u(x, t) を (xi , tj+1 ) と (xi , tj−1 ) で展開すると,中心差分公式
u(xi , tj+1 ) − u(xi , tj ) k 2 ∂ 3 u
∂u
(xi , tj ) =
+
(xi , µj )
∂t
2k
6 ∂t3
138
第 10 章 偏微分方程式
を得る。ここで,µj ∈ (tj−1 , tj+1 ) である。∂u/∂t(xi , yj ) を中心差分公式で,(∂ 2 u/∂x2 )
をこれまでと同じ差分公式で置き換えて式 (10.10) に代入して差分方程式を得る方法を
Richardson 法 (Richardson’s method) といい,
wi,j+1 − wi,j−1
wi+1,j − 2wij + wi−1,j
− α2
=0
2k
h2
で与えられる。この方法は,局所打切り誤差が O(h2 + k 2 ) であるが,残念ながら,安定
性に大きな問題がある。 局所打切り誤差と安定性を共に兼ね備えた方法は,j 番目のス
テップにおける前進差分法と j + 1 番目のステップにおける後退差分法の平均を用いる方
法である。つまり,
wi,j+1 − wi,j
wi+1,j − 2wi,j + wi−1,j
− α2
=0
k
h2
と
wi,j+1 − wi,j
wi+1,j+1 − 2wi,j+1 + wi−1,j+1
− α2
=0
k
h2
の平均を用いる方法である。ここで,
∂2u
∂2u
(x
,
µ
ˆ
)
≈
(xi , µj )
i
j
∂t2
∂t2
と仮定すると,平均差分法
wi,j+1 − wij
α2 wi+1,j − 2wi,j + wi−1,j
wi+1,j+1 − 2wi,j+1 + wi−1,j+1
−
+
=0
k
2
h2
h2
は局所打ち切り誤差 O(k 2 +h2 ) を持っている。この方法は Crank-Nicholson 法 (Crank-
Nicolson method) とよばれ,行列で表すと j = 0, 1, 2, . . . , に対して
Aw(j+1) = Bw(j)
となる。ただし,
k
, w(j) = (w1,j , w2,j , . . . , wm−1,j )t
h2
で,行列 A と B は次のようになる。
λ = α2





A=




(1 + λ) − λ2
..
.
− λ2
..
.
0
..
..
.
.
0
···
0
..
..
.
..
.
···
..
.
..
.
..
.
0
− λ2
.
0
..
.
0
− λ2
(1 + λ)










10.3. 放物線型偏微分方程式





B=




139
(1 − λ)
λ
2
λ
2
0
..
.
..
.
..
.
..
.
.
0
..
.
..
.
..
0
···
0
···
..
.
..
.
..
.
0
..
.
λ
2
(1 − λ)
0
λ
2










行列 A は正定値行列より,狭義の優勢対角行列であり,3重対角行列であるので,正則で
ある。よって,Crout 分解または SOR アルゴリズムを w(j) から w(j+1) を求めることが
できる。次のアルゴリズムは Crout の因数分解を用いて Crank-Nicholson 法で解く。
Crank-Nicholson 法アルゴリズム
放物線型偏微分方程式
∂2u
∂2u
(x, t) − α2 2 (x, t) = 0, 0 ≤ x ≤ l, 0 ≤ t ≤ T
∂t
∂x
の近似解を次の境界条件
u(0, t) = u(l, t) = 0, 0 < t < T
と初期条件
u(x, 0) = f (x), 0 ≤ x ≤ l
で求める。
===================================================
入力 終点 l; 最大時間 T ; 定数 α; 整数 m ≥ 3, N ≥ 1;
出力 i = 0, 1, . . . , m − 1 と j = 1, 2, . . . , N における u(xi , tj ) の近似 wi,j
(1)
h ← l/m;
k ← T /N ;
λ ← α2 k/h2;
wm ← 0.
(2)
for i = 1, 2, . . . , m − 1 do
wi ← f (ih);
ここで,Crout の3重対角行列の分解を用いる。
(3)
l1 ← 1 + λ;
u1 ← −λ/2l1 .
(4)
for i = 2, . . . , m − 2 do
li ← 1 + λ + λui−1 ;
ui ← −λ/2li .
(5)
lm−1 ← 1 + λ + λum−2 .
(6)
for j = 1, . . . , N do (7) − (11).
140
第 10 章 偏微分方程式
(7)
t ← jk;
z1 ← (1 − λ)w1 + λ2 w2 /l1 .
(8)
for i = 2, . . . , m − 1 do
zi ← (1 − λ)wi + λ2 (wi+1 + wi−1 + zi−1 ) /li .
(9)
wm−1 ← zm−1 .
(10)
for i = m − 2, . . . , 1 do
wi ← zi − ui wi+1 .
(11)
OUTPUT(t);
for i = 1, . . . , m − 1 do
x ← ih;
OUTPUT(x, wi )
(12) STOP
===================================================
例題 10.5 次の熱伝導方程式の境界値問題の解を h = 0.1,k = 0.01 の Crank-Nicholson
法を用いて近似せよ。
∂u
∂2u
(x, t) −
(x, t)
∂t
∂x2
u(0, t)
=
0, 0 < x < 1, 0 ≤ t
= u(1, t)9, 0, t
u(x, 0) = sin(πx), 0 ≤ x ≤ 1
ただし,t = 0.5, h = 0.1, k = 0.01, λ = 1 とする。
解 m = 10,N = 50 とすると,
I
X(I)
W(X(I),0.5)
1
2
3
4
5
6
7
8
9
0.10000000
0.20000000
0.30000000
0.40000000
0.50000000
0.60000000
0.70000000
0.80000000
0.90000000
0.00230512
0.00438461
0.00603489
0.00709444
0.00745954
0.00709444
0.00603489
0.00438461
0.00230512
となる。これより,Crank-Nicholson 法は後退差分法や前進差分法より優れていることが
分かる。
演習問題 10.2
1. 後退差分法を用いて次の放物線型偏微分方程式の近似解を求めよ。
∂u ∂ 2 u
− 2 = 0, 0 ≤ x ≤ 2, 0 < t2
∂t
∂y
10.4. 双曲線型偏微分方程式
141
u(0, t) = u(2, t) = 0, 0 < t
πx
u(x, 0) = sin
, 0≤x≤2
2
ただし,m = 4, T = 0.1 N = 2 とする。また,厳密解 u(x, y) = e−(π
2
/4)t
sin πx
2 と
比較せよ。
2. 後退差分法を用いて次の楕円型偏微分方程式の近似解を求めよ。
1 ∂2u
∂u
−
= 0, 0 ≤ x ≤ 2, 0 < t2
∂t
16 ∂y 2
u(0, t) = u(1, t) = 0, 0 < t
u(x, 0) = 2 sin 2πx, 0 ≤ x ≤ 1
ただし,m = 3, T = 0.1 N = 2 とする。また,厳密解 u(x, y) = 2e−(π
2
/4)t
sin 2πx
と比較せよ。
3. Crank-Nicholson 法を用いて次の放物線型偏微分方程式の近似解を求めよ。
∂u ∂ 2 u
− 2 = 0, 0 ≤ x ≤ 2, 0 < t2
∂t
∂y
u(0, t) = u(2, t) = 0, 0 < t
πx
u(x, 0) = sin
, 0≤x≤2
2
ただし,m = 4, T = 0.1 N = 2 とする。また,厳密解 u(x, y) = e−(π
2
/4)t
sin πx
2 と
比較せよ。
4. Crank-Nicholson 法を用いて次の楕円型偏微分方程式の近似解を求めよ。
∂u
1 ∂2u
−
= 0, 0 ≤ x ≤ 2, 0 < t2
∂t
16 ∂y 2
u(0, t) = u(1, t) = 0, 0 < t
u(x, 0) = 2 sin 2πx, 0 ≤ x ≤ 1
ただし,m = 3, T = 0.1 N = 2 とする。また,厳密解 u(x, y) = 2e−(π
2
/4)t
sin 2πx
と比較せよ。
10.4
双曲線型偏微分方程式
ここで学ぶ双曲線線型偏微分方程式は,波動方程式である。波動方程式は次の偏微分方
程式で与えられる。
2
∂2u
2∂ u
(x,
t)
−
α
(x, t) = 0, 0 < x < l, t > 0
∂t2
∂x2
(10.15)
142
第 10 章 偏微分方程式
で境界条件
u(0, t) = u(l, t) = 0, t > 0
と初期条件
u(x, 0) = f (x),
∂u
(x, 0) = g(x), 0 ≤ x ≤ l
∂t
を満たすとする。ただし,α は定数。
この問題を解くためにまず,整数 m > 0 を選び,h = l/m とおく。次に,時間の刻み幅
k を選ぶ。ここでの格子点は (xi , tj ) である。ただし,xi = ih, i = 0, 1, . . . , m,tj = jk ,
j = 0, 1, . . . である。すると内部格子点での波動方程式は
2
∂2u
2∂ u
(x
,
t
)
−
α
(xi , tj ) = 0
i
j
∂t2
∂x2
(10.16)
となる。
2階偏微分係数の代わりに中心差分係数を用いると,
∂2u
u(xi , tj+1 ) − 2u(xi , tj ) + u(xi , tj−1 ) k 2 ∂ 4 u
(x
,
t
)
=
−
(xi , µj )
i
j
∂t2
k2
12 ∂t4
(10.17)
ただし,µj ∈ (tj−1 , tj+1 ) で,
∂2u
u(xi+1 , tj ) − 2u(xi , tj ) + u(xi−1 , tj ) h2 ∂ 4 u
(xi , tj ) =
−
(ξi , tj )
2
∂x
h2
12 ∂x4
ただし, ξi ∈ (xi−1 , xi+1 ) である。これらの式を式 (10.16) に代入すると,
=
u(xi , tj+1 ) − 2u(xi , tj ) + u(xi , tj−1 )
u(xi+1 , tj ) − 2u(xi , tj ) + u(xi−1 , tj )
− α2
k2
h2
4
4
1
∂ u
∂ u
k 2 4 (xi , µj ) − α2 h2 4 (ξi , tj )
12
∂t
∂x
となる。ここで,誤差項
1
∂4u
∂4u
k 2 4 (xi , µj ) − α2 h2 4 (ξi , tj )
12
∂t
∂x
を無視すると,次の差分方程式を得る。
wi,j+1 − 2wi,j + wi,j−1
wi+1,j − 2wi,j + wi−1,j
− α2
=0
2
k
h2
ここで,λ = αk/h とおくと,
wi,j+1 − 2wi,j + wi,j−1 − λ2 wi+1,j + 2λ2 wi,j − λ2 wi−1,j = 0
10.4. 双曲線型偏微分方程式
143
これより,wi,j+1 について解くと,
wi,j+1 = 2(1 − λ2 )wi,j + λ2 (wi+1,j + wi−1,j ) − wi,j−1
(10.18)
となる。この式は,i = 1, 2, . . . , m − 1 と j = 1, 2, . . . , で成り立つ。ここで,境界条件
u(0, t) = u(l, t) = 0 より,
w0,j = wm,j = 0, j = 1, 2, 3, . . . ,
(10.19)
また,初期値 u(x, 0) = f (x) より
wi,0 = f (xi ), i = 1, 2, . . . ,
(10.20)
となる。これを行列を用いて表すと







w1,j+1
w2,j+1
..
.
wm−1,j+1



 
 
=
 
 


2(1 − λ2 )
λ2
0
λ2
2(1 − λ2 )
..
.
..
.
λ2
..
.
..
.
···
..
.
..
.
..
.
···
0
λ2
0
..
.
0
0
..
.
0
λ2
2(1 − λ2 )



w1,j


  w2,j

..


.


wm−1,j
 
 
 
−
 
 
w1,j−1
w2,j−1
..
.
wm−1,j−1
式 (10.18) と式 (10.19) より j + 1 回目を求めるには,j 回と j − 1 回目の値が必要となる。
j = 0 のとき wi,0 は式 (10.20) で与えられ,式 (10.18) より,wi,1 が求まる。しかし,wi,2
を式 (10.18) から求めるには,wi,1 を初期速度条件
∂u
(x, 0) = g(x), 0 ≤ x ≤ l
∂t
から求める必要がある。 そのための方法として,∂u/∂t を前進差分近似
∂u
u(xi , t1 ) − u(xi , 0) k ∂ 2 u
(xi , 0) =
−
(xi , µ
¯i )
∂t
k
2 ∂t2
で置き換える方法がある。ここで,µ
¯i ∈ (0, t1 ) である。この式を u(xi , t1 ) に付いて解くと,
u(xi , t1 ) =
=
∂u
k2 ∂ 2 u
(xi , 0) +
(xi , µ¯i )
∂t
2 ∂t2
2 2
k ∂ u
u(xi , 0) + kg(xi ) +
(xi , µ
¯i )
2 ∂t2
u(xi , 0) + k
となる。よって,
wi,1 = wi,0 + kg(xi ), i = 1, 2, . . . , m − 1






144
第 10 章 偏微分方程式
を得る。しかし,この近似での誤差は O(k) となる。そこで,u(xi , t1 ) を t に付いての
Maclaurin 展開を行うと,
u(xi , t1 ) = u(xi , 0) + k
∂u
k2 ∂ 2 u
k3 ∂ 3 u
(xi , 0) +
(xi , 0) +
(xi , µ
¯i )
2
∂t
2 ∂t
6 ∂t3
ここで,µ
¯i ∈ (0, t1 )。
f が 2 回微分可能なら
∂2u
∂2u
d2 f
(xi , 0) = α2 2 (xi , 0) = α2 2 (xi ) = α2 f (xi )
2
∂t
∂x
dx
より,
u(xi , t1 ) = u(xi , 0) + kg(xi ) +
α2 k 2
k3 ∂ 3 u
f (xi ) +
(xi , µ
¯i )
2
6 ∂t3
となり,近似誤差 O(k 3 ) で
wi,1 = wi,0 + kg(xi ) +
α2 k 2
f (xi )
2
を得る。
f ∈ C 4 [0, 1] であるが f (xi ) が簡単に得られないときは,2 回微分近似公式
f (xi ) =
f (xi+1 ) − 2f (xi ) + f (xi−1 ) h2 (4) ¯
− f (ξi )
h2
12
を用いることができる。これより,
u(xi , t1 ) = u(xi , 0) + kg(xi ) +
k 2 α2
[f (xi+1 ) − 2f (xi ) + f (xi−1 )] + O(k 3 + h2 k 2 )
2h2
を得る。λ = (kα/h) とおくと
u(xi , t1 ) =
=
λ2
[f (xi+1 ) − 2f (xi ) + f (xi−1 )] + O(k 3 + h2 k 2 )
2
λ2
λ2
(1 − λ2 )f (xi ) + f (xi+1 ) + f (xi−1 ) + kg(xi ) + O(k 3 + h2 k 2 )
2
2
u(xi , 0) + kg(xi ) +
となる。これより,差分方程式
wi,1 = (1 − λ2 )f (xi ) +
λ2
λ2
f (xi+1 ) + f (xi−1 ) + kg(xi )
2
2
を用いて wi,1 を求めることができる。
次のアルゴリズムは式 (10.21) を用いて wi,1 を近似する。
波動方程式の差分法による近似アルゴリズム
(10.21)
10.4. 双曲線型偏微分方程式
145
放物線型偏微分方程式
2
∂2u
2∂ u
(x,
t)
−
α
(x, t) = 0, 0 ≤ x ≤ l, 0 ≤ t ≤ T
∂t2
∂x2
の近似解を次の境界条件
u(0, t) = u(l, t) = 0, 0 < t < T
と初期条件
u(x, 0)
∂u
(x, 0)
∂t
= f (x), 0 ≤ x ≤ l
= g(x), 0 ≤ x ≤ l
で求める。
===================================================
入力 終点 l; 最大時間 T ; 定数 α; 整数 m ≥ 2, N ≥ 2;
出力 i = 0, 1, . . . , m と j = 0, 1, . . . , N における u(xi , tj ) の近似 wi,j
(1)
h ← l/m;
k ← T /N ;
λ ← αk/h.
(2)
for j = 1, 2, . . . , N do
w0,j ← 0;
wm,j ← 0;
(3)
w0,0 ← f (0);
wm,0 ← f (l).
(4)
for i = 1, . . . , m − 1 do
wi,0 ← f (ih);
2
wi,1 ← (1 − λ2 )f (ih) + λ2 [f ((i + 1)h) + f ((i − 1)h)] + kg(ih).
(5)
for j = 1, . . . , N − 1 do
for i = 1, . . . , m − 1 do
wi,j+1 ← 2(1 − λ2 )wi,j + λ2 (wi+1,j + wi−1,j ) + wi,j−1 .
(6)
for j = 0, . . . , N do
t ← jk;
fori = 0, . . . , m do
x ← ih;
OUTPUT(x, t, wi,j ).
(7)
STOP
===================================================
例題 10.6 次の双曲線型方程式の境界値問題の解を h = 0.1,k = 0.05 で近似せよ。
∂2u
∂2u
(x, t) − 4 2 (x, t) =
2
∂t
∂x
u(0, t) =
∂u
u(x, 0) = sin(πx), 0 ≤ x ≤ 1,
(x, 0) = 0, 0 ≤ x ≤ 1
∂t
ただし,t = 0.5, h = 0.1, k = 0.01, λ = 1 とする。
0, 0 < x < 1, 0 ≤ t
u(1, t) = 0, 0 < t
146
第 10 章 偏微分方程式
解 m = 10,T = 1, N = 20 とすると,
演習問題 10.3
1. 次の双曲線型偏微分方程式の近似解を求めよ。
∂2u ∂2u
−
= 0, 0 ≤ x ≤ 1, 0 < t
∂t2
∂x2
u(0, t)
= u(1, t) = 0, 0 < t
u(x, 0)
=
sin πx, 0 ≤ x ≤ 1
∂u
(x, 0) = 0, 0 ≤ x ≤ 1
∂t
ただし,m = 4, T = 1.0 N = 4 とする。また,厳密解 u(x, y) = cos πt sin πx と比
較せよ。
2. 次の双曲線型偏微分方程式の近似解を求めよ。
∂2u
1 ∂2u
−
= 0, 0 ≤ x ≤ 0.5, 0 < t
2
∂t
16π 2 ∂x2
u(0, t) =
u(0.5, t) = 0, 0 < t
u(x, 0) =
0, 0 ≤ x ≤ 0.5
∂u
(x, 0) = sin 4πx, 0 ≤ x ≤ 0.5
∂t
ただし,m = 4, T = 0.5 N = 4 とする。また,厳密解 u(x, y) = cos t sin 4πx と比較
せよ。
3. 次の双曲線型偏微分方程式の近似解を求めよ。
∂2u ∂2u
−
= 0, 0 ≤ x ≤ π, 0 < t
∂t2
∂x2
u(0, t)
u(x, 0)
∂u
(x, 0) = 0, 0 ≤ x ≤ π
∂t
= u(π, t) = 0, 0 < t
= sin x, 0 ≤ x ≤ π
ただし,h = π/10, k = 0.05 とする。また,厳密解 u(x, y) = cos t sin x と比較せよ。
10.5
有限要素法
構造力学をはじめとする工学の諸分野における偏微分方程式の数値解法に,現在最も
広く用いられているのは有限要素法 (finite element method) である。この方法は標
10.5. 有限要素法
147
準的な場合には,区分的に低次の多項式であり,比較的狭い台をもつ基底関数を用いる
Ritz-Galerkin 法である。
ここでは,次の偏微分方程式について考える。
∂
∂x
p(x, y)
∂u
∂x
+
∂
∂y
q(x, y)
∂u
∂y
+ r(x, y)u(x, y) = f (x, y)
(10.22)
ここで,(x, y) ∈ D,ただし,D は境界 S をもつ平面領域である。
境界条件
u(x, y = g(x, y)
は境界 S1 に適用される。残りの境界 S2 では,解 u(x, y) は
p(x, y)
∂u
∂u
(x, y) cos θ1 + q(x, y) (x, y) cos θ2 + g1 (x, y)y(x, y) = g2 (x, y)
∂x
∂y
を満たす。ここで,θ1 ,θ2 は点 (x, y) での外向きの法線との方向角である。
関数 p, q, r, f は閉領域 D ∪ S 上で連続で,p, q は連続な偏微分を持ち,g1 , g2 は S2 で連
続である。さらに,p(x, y) > 0, q(x, y) > 0, r(x, y) ≤ 0, g1 (x, y) > 0 であるとする。その
とき,式 (10.22) の解は,境界条件
u(x, y) = g(x, y)
を S1 上で満たす全ての 2 回微分可能な関数 w において関数
I[w]
=
D
+
S2
1
p(x, y)
2
∂w
∂x
2
+ q(x, y)
∂w
∂y
2
− r(x, y)w2 + f (x, y)w dxdx
1
−g2 (x, y)w + g1 (x, y)w2 dS 2
を最小化する。
有限要素法はこの偏微分方程式の解の近似を,汎関数 I を最小化することにより求める。
有限要素法では,まず,領域を三角形か四角形の形をした有限個の小さな領域または要
素に分ける。
148
第 10 章 偏微分方程式
図 10.7:
これらの領域上で解曲面を近似していく。ここで近似に用いられる関数は,一般に変数
x か y に対して決まった次数の区分的に連続な多項式である。三角形要素と一緒に用いら
れる1次形式は一般に
φ(x, y) = a + bx + cy
の形をしている。また,四角形要素と一緒に用いられる 2 次形式は
φ(x, y) = a + bx + cy + dxy
の形をしている。
領域 D を三角形要素に小分割する場合について考えてみる。三角形要素の集まりを D
とし,これらの三角形の頂点をノード (nodes) という。有限要素法では,φ1 , φ2 , . . . , φm
が 1 次独立で γ1 , γ2 , . . . , γm を定数とするとき,
m
φ(x, y) =
γi φi (x, y)
i=1
の近似を捜す。これらの定数のうち,例えば γn+1 , γn+2 , . . . , γm は境界 S1 上で境界条件
φ(x, y) = g(x, y)
m
を満たすために用いられ,残りの定数 γ1 , γ2 , . . . , γn は汎関数 I[
γi φi ] を最小化するの
i=1
に用いられる。
10.5. 有限要素法
149
式 (10.23) より
m
I[φ]
= I
γi φ i
i=1
=
−
+
 

 1 p(x, y)
2
D
2
m
m
∂φi
∂φi
(x, y) + q(x, y)
γi
(x, y)
γi
∂x
∂y
i=1
i=1


2
m
m

r(x, y)
γi φi (x, y)
+ f (x, y)
γi φi (x, y) dydx

i=1
i=1


2
m
m


1
γi φi (x, y)
dS
−g2 (x, y)
γi φi (x, y) + g1 (x, y)

2
S2 
2
i=1
i=1
この汎関数 I を γ1 , γ2 , . . . , γn の関数と考えるとき,I が最小値を取るための必要条件
は,j = 1, 2, . . . , n において
∂I
=0
∂γj
を満たすことである。
式 10.23 を微分すると
∂I
∂γj
m
=
p(x, y)
D
i=1
m
+
q(x, y)
i=1
m
−
γj
r(x, y)
∂φj
∂φi
(x, y)
(x, y)
∂x
∂x
∂φi
∂φj
(x, y)
(x, y)
∂y
∂x
γi φi (x, y) + f (x, y)φj (x, y) dxdy
i=1
m
−g2 (x, y)φj (x, y) + g1 (x, y)
+
S2
φi (x, y)φj (x, y) dS
i=1
となる。よって,j = 1, 2, . . . , n に対して
m
0
=
p(x, y)
D
i=1
−
∂φi
∂φj
∂φi
∂φj
(x, y)
(x, y) + q(x, y)
(x, y)
(x, y)
∂x
∂x
∂y
∂y
r(x, y)φi (x, y)φj (x, y)} dxdy
+
g1 (x, y)φi (x, y)φj (x, y)dS γ1
S2
+
f (x, y)φj (x, y)dxdy −
D
g2 (x, y)φj (x, y)dS
S2
150
第 10 章 偏微分方程式
が成り立つ。そしてこれらの式は連立方程式
Ac = b
で表される。ただし,A = (αij ) で
αij
=
p(x, y)
D
−
∂φi
∂φj
∂φi
∂φj
(x, y)
(x, y) + q(x, y)
(x, y)
(x, y)
∂x
∂x
∂y
∂y
r(x, y)φi (x, y)φj (x, y)] dxdy +
g1 (x, y)φi (x, y)φj (x, y)dS
S2
また,b = (β1 , β2 , . . . , βn )t で
m
βi = −
f (x, y)φi (x, y)dxdy +
D
g2 (x, y)φi (x, y)dS −
S2
αik γk
k=n+1
そして c = (γ1 , γ2 , . . . , γn )t である。
ここで,基底関数の選び方は重要である。なぜなら選び方によっては行列 A は正定値
行列で帯行列になるからである。2階の偏微分方程式問題で領域 D は多角形であるとす
ると,D = D となり,また領域の境界 S は直線の集まりとなる。
有限要素法を開始するには,まず,領域 D を三角形 T1 , T2 , . . . , TM の集まりに分ける。
ただし,Tk に属する3つの頂点またはノードは
(i)
Vj
(i)
(i)
= (xj , yj ), j = 1, 2, 3
(i)
で表されるとする。記述を簡単にするために,三角形 Ti で作業を行っているときは Vj
の代わりに Vj と表す。三角形 Ti の3つの頂点
(i)
(i)
(i)
(i)
(i)
V1 ,V2 ,と
(i)
(i)
V3
に対して
(i)
Nj (x, y) ≡ Nj (x, y) = aj + bj x + cj y, ただし Nj (xk , yk ) = δjk =
1, j = k
0, j = k
を満たす1次式を対応させる。すると,これより連立方程式


  (i)  
1
1 x1 y1
a1


  (i)  
 1 x2 y2   b1  =  0 
1
x3
(i)
c1
y3
0
を得る。
閉領域 D ∪ S のノードに E1 , E2 , . . . , En と名前を付けていき,ノード Ek には Ek では
1 をとり,それ以外のノードでは 0 をとる関数 φk を関連付ける。この選び方によりノー
(i)
ド Ek が頂点 Vj
(i)
を表すとき,φk と Nj
は三角形 Ti 上で同一視できる。
例題 10.7 次の図 10.8 で表される有限要素問題を解け。
10.5. 有限要素法
151
V (1)
2
(1)
V1
T1
V 2(2)
(1)
T2
V3
-1
(2)
V3
1
(2)
V2
図 10.8:
解
(1)
三角形 T1 において基底関数 N1 (x, y) は
(1)
(1)
(1)
(1)
(1)
(1)
N1 (V1 ) = δ11 = 1
N1 (V2 ) = δ12 = 0
N1 (V3 ) = δ13 = 0
(1)
(1)
(1)
を満たす。そこで,これらの頂点で N1 (x, y) = a1 + b1 x + c1 y を求めると,
(1)
(1)
(1)
a1 + b1 (1) + c1 (1) =
(1)
(1)
a1 + b1 (−1)
(1)
(1)
a1 + b1 (0)
(1)
c1 (2)
(1)
c1 (0)
+
+
=
0
=
0
となり,この連立方程式を解くと
(1)
(1)
a1 = 0, b1 =
2 (1)
1
, c =
3 1
3
を得る。したがって,三角形 T1 上で
N1 (x, y) =
2
1
x+ y
3
3
となる。
(1)
三角形 T1 における基底関数 N2 (x, y) は
(1)
(1)
(1)
(1)
(1)
(1)
1
N2 (V1 ) = δ11 = 0
N2 (V2 ) = δ12 = 1
N2 (V3 ) = δ13 = 0
152
第 10 章 偏微分方程式
(1)
(1)
(1)
を満たす。そこで,これらの頂点で N2 (x, y) = a2 + b2 x + c2 y を求めると,
(1)
(1)
(1)
a2 + b2 (1) + c2 (1) = 0
(1)
(1)
(1)
a2 + b2 (−1) + c2 (2) = 1
(1)
(1)
(1)
a21 + b2 (0) + c2 (0) = 0
となり,この連立方程式を解くと
1 (1)
1
(1)
(1)
a2 = 0, b1 = − , c2 =
3
3
を得る。したがって,三角形 T1 上で
2
1
N1 (x, y) = − x + y
3
3
となる。
(1)
三角形 T1 における基底関数 N3 (x, y) は
(1)
(1)
= δ11 = 0
N3 (V2 )
(1)
(1)
= δ12 = 0
(1)
(1)
N3 (V3 )
= δ13 = 1
N3 (V1 )
(1)
(1)
(1)
を満たす。そこで,これらの頂点で N2 (x, y) = a2 + b2 x + c2 y を求めると,
(1)
(1)
(1)
a3 + b3 (1) + c3 (1) = 0
(1)
(1)
(1)
a3 + b3 (−1) + c3 (2) = 0
(1)
(1)
(1)
a3 + b3 (0) + c3 (0) = 1
となり,この連立方程式を解くと
1 (1)
2
(1)
(1)
a3 = 1, b1 = − , c2 = −
3
3
を得る。したがって,三角形 T1 上で
1
2
N1 (x, y) = 1 − x − y
3
3
となる。
(2)
次に三角形 T2 における基底関数 N1 (x, y) は
(2)
(2)
= δ11 = 1
N1 (V2 )
(2)
(2)
= δ12 = 0
(2)
(2)
N1 (V3 )
= δ13 = 0
N1 (V1 )
10.5. 有限要素法
153
(2)
(2)
(2)
を満たす。そこで,これらの頂点で N1 (x, y) = a1 + b1 x + c1 y を求めると,
(2)
(2)
(2)
a1 + b1 (1) + c1 (1)
=
1
(2)
a1
(2)
a1
=
0
=
0
+
+
(2)
b1 (0)
(2)
b1 (1)
+
+
(2)
c1 (0)
(2)
c1 (0)
となり,この連立方程式を解くと
(2)
(2)
(2)
a1 = 0, b1 = 0, c1 = 1
を得る。したがって,三角形 T2 上で
N1 (x, y) = y
となる。同様にして,三角形 T2 上で N2 (x, y), N3 (x, y) を求めることができる。
有限要素法アルゴリズム
境界値問題
∂
∂x
p(x, y)
∂u
∂x
+
∂
∂y
q(x, y)
∂u
∂y
+ r(x, y)u(x, y) = f (x, y), (x, y) ∈ D
u(x, y = g(x, y), (x, y) ∈ S1
p(x, y)
∂u
∂u
(x, y) cos θ1 + q(x, y) (x, y) cos θ2 + g1 (x, y)y(x, y) =
∂x
∂y
(x, y) ∈ S2
g2 (x, y)
の解を近似する。
準備 領域 D を三角形 T1 , T2 , . . . , TM に分ける。
T1 , . . . , TK は S1 および S2 上に辺を持たない。
TK+1 , . . . , TN は少なくとも1つ S2 上に辺を持つ。
TN +1 , . . . , TM は残りの三角形。
三角形 Tk の3つの頂点に番号を付ける。
(k)
(k) (k)
(k)
(k)
V1 = (x1 , y1 ), V2 , V3
ノード全体に番号 E1 , E2 , . . . , Em を付ける。ただし
E1 , E2 . . . , En ∈ D ∪ S2 , En+1 , . . . , Em onS1
===================================================
(i)
入力 整数 K, N, M, n, m; 頂点 Vj , j = 1, 2, 3, i = 1, 2, . . . , M ; ノード Ej , j = 1, 2, . . . , m;
(i) (i) (i)
出力 定数 γ1 ; aj , bj , cj .
154
(1)
(2)
(3)
第 10 章 偏微分方程式
for l = n + 1, . . . , m do
γl ← g(xl , yl ).
for i = 1, 2, . . . , n do
βi ← 0;
for j = 1, . . . , n do
αi,j ← 0.
for i = 1, 2, . . 0
. , M do
(i)
1 x1
B
∆i ← det @ 1 x(i)
2
(i)
1 x3
(i)
a1 ←
(i)
a2 ←
(i)
(4)
RR
(i)
i
(i)
Ti
(10)
(11)
(12)
(i)
b1 ←
(i)
b2 ←
(i)
(i)
(i)
y2 −y3
∆i
(i)
(i)
y3 −y1
∆i
(i)
(i)
y1 −y2
∆i
(i)
c1 ←
(i)
c2 ←
(i)
i
(i)
r(x, y)Nj Nk dxdy;
RR
(i)
Hj ← − T f (x, y)Nj (x, y)dxdy.
i
for i = K + 1, . . . , N do
for j = 1, 2, 3 do
for k = 1, 2, . . . , j do
R
(i)
(i) (i)
Jj,k ← S2 g1 (x, y)Nj Nk dS;
(i)
(6)
(7)
(8)
(9)
(i) (i)
x2 y3 −y2 x3
∆i
(i) (i)
(i) (i)
x3 y1 −y3 x1
∆i
(i) (i)
(i) (i)
x1 y2 −y1 x2
∆i
1
(i)
(i)
x3 −x2
;
∆i
(i)
(i)
x1 −x3
;
∆i
(i)
(i)
x2 −x1
;
∆i
a3 ←
b3 ←
c3 ←
for j = 1, 2, 3
(i)
(i)
(i)
(i)
define Nj (x, y) ← aj + bj x + cj y.
for i = 1, 2, . . . , M do
for k = 1, 2, . . . , j do
(i)
(i) (i) RR
(i) (i) RR
zj,k ← bj bk
p(x, y)dxdy + cj ck
q(x, y)dxdy
T
T
−
(5)
(i) (i)
(i)
y1
(i) C
y2 A ;
(i)
y3
R
(i)
Ij ← S2 g2 (x, y)Nj (x, y)dS.
for j = 1, . . . , M do (7) − (12).
for k = 1, 2, 3 do (8) − (12).
(i)
(i)
find l so that El ← (xk , yk ).
if(k > 1) then
for j = 1, 2, . . . , k − 1 dos (10), (11).
(i)
(i)
find t so that Et ← (xj , yj ).
if(l ≤ n) then
if(t ≤ n) then
(i)
αlt ← αlt + zk,j ;
(i)
αtl =← αtl + zk,j
else
(i)
βl ← βl − γt zk,j
else if(t ≤ n) then
(i)
βt ← βt − γl zk,j .
if(l ≤ n) then
(i)
all ← αll + zk,k ;
(i)
βl ← β l + H k .
10.5. 有限要素法
155
(13)
(14)
(15)
(16)
for i = K + 1, . . . , N do (14) − (19).
for k = 1, 2, 3 do (15) − (19).
(i)
(i)
find l so that El ← (xk , yk ).
if(k > 1) then
for j = 1, 2, . . . , k − 1 do (17), (18).
(i)
(i)
(17)
find t so that Et ← (xj , yj ).
(18)
if(l ≤ n) then
if(t ≤ n) then
(i)
αll ← αll + Jk,j ;
(i)
αtl ← αtl + Jk,j
else
(i)
βl ← βl − γt Jk,j
else if(t ≤ n) then
(i)
βt ← βt − γl Jk,j .
(19)
if(l ≤ n) then
(i)
αll ← αll + Jk,k ;
(i)
βl ← β l + I k .
(20) Ac ← b を解く。
(21) OUTPUT(γ1 , . . . , γm ).
(22) for i = 1, 2, . . . , M do
for j = 1, 2, 3 do
(i) (i) (i)
OUTPUT(aj , bj , cj ).
(23) STOP
===================================================
例題 10.8 温度 u(x, y) は領域 D で 2 次元 Laplace 方程式
∂2u
∂2u
(x,
y)
+
(x, y) = 0
∂x2
∂y 2
を満たすとする。ここで,領域 D が図 10.9 で与えられ,次の境界条件を満たすとき有限
要素法を用いて解の近似を求めよ。
u(x, y)
∂y
(x, y)
∂n
∂u
(x, y)
∂n
∂u
(x, y)
∂n
=
4, (x, y) ∈ L6 (x, y) ∈7
=
x (x, y) ∈ L2 , (x, y) ∈ L4
=
y, (x, y) ∈ L5
=
x+y
√ , (x, y) ∈ L1 , (x, y) ∈ L3
2
ここで,∂u/∂n は点 (x, y) での法線方向への方向微分である。
156
第 10 章 偏微分方程式
(0,0.4)
L1
(0.2,0.2)
(0.4,0.2)
L7
L2
L3
(0.5,0.1)
D
(0.6,0.1)
L4
L5
(0,0)
(0.6,0)
L6
図 10.9:
解 まず,領域 D を三角形に分割し,境界条件 u(x, y) = 4,(x, y) ∈ L6 ∪ L7 より,S1 =
L6 ∪ L7 とおき,S2 = L1 ∪ L2 ∪ L3 ∪ L4 ∪ L5 とする。次に,三角形にラベルを付ける。
1. S1 と S2 の両方と辺を共有しない三角形を T1 ,T2 とする。
2. S2 と辺を共有している三角形を T3 ,T4 ,T5 ,T6 とする。
3. 残りの三角形を T7 ,T8 ,T9 ,T10 とする。
4. D ∪ S2 内で E1 , E2 , . . . , E5 と頂点に名前を付け,S1 では E6 , . . . , E11 と名前を付
ける。
E6
T3
E1
E
E7
2
T4
T7
E3
T1
T8
T5
T2
T9
T 10
E8
E9
E4
E 10
E5
T6
E 11
図 10.10:
境界条件 u(x, y) = 4 より,t = 6, 7, . . . , 11 のとき γt = 4 となる。t = 1, 2, . . . , 5 のときの
γt の値は,残りの境界条件を用いて求める。
T1 で φ11 (x, y) は
φ11 (z1 )
= a11 + b11 (0.2) + c11 (0.2) = 1
φ11 (z3 )
= a11 + b11 (0.3) + c11 (0.1) = 0
φ11 (z9 )
= a11 + b11 (0.2) + c11 (0) = 0
10.5. 有限要素法
157
を満たす。これを解くと,
a11 = 1, b11 = −5, c11 = 5
となり,
φ11 (x, y) = 1 − 5x + 5y
同様にして,
φ21 = −2 + 10x, φ31 = 2 − 5x − 5y
となる。
演習問題 10.4
1. 有限要素法アルゴリズムを用いて次の偏微分方程式を求めよ。
∂
∂x
y2
∂u
∂
(x, y) +
∂x
∂y
y2
∂u
(x, y) − yu(x, y) = −x, (x, y) ∈ D
∂y
u(x, 0.5) = 2x, 0 ≤ x ≤ 0.5, u(0, y) = 0, 0.5 ≤ y ≤ 1
√
2
2 ∂u
2 ∂u
y
(x, y) cos θ1 + y
(x, y) cos θ2 =
(y − x), (x, y) ∈ S2
∂x
∂y
2
ただし,三角形 T1 は (0, 0.5), (0.25, 0.75), (0, 1) を頂点に持ち,三角形 T2 は (0, 0.5),
(0.5, 0.5),(0.25, 0.75) を頂点に持つとする。
159
第 11 章 参考
11.1
Navier-Stokes の方程式
11.2
Bernoulli の式
1 次元流れ
1 次元流れとは、流管に沿った流れを考えるときの、流れの名称である。つまり、流
線がすでに分かっているものとして、流線に挟まれた領域での上流と下流の関係を考える。
流れの圧力や速度などの物理量は、流管にそって特定の関係を満たしながら変化して
いく。これらを示す式が、後に述べる連続の式とベルヌーイの式である。
流管と座標系について、まとめておく。下図のように左下から右上に流れている流線
があったとして、2本の流線の間に挟まれた色の付いた部分のみ取り出したものが流管に
当たる。
図 11.1:
この「流管」は、中心軸(s 軸)を持ち、また流管の中での位置は、座標値 s を指定す
れば示すことができるものとする。
同じ s の位置においては流管内平均流速 u(s) や平均圧力 p(s) が定まるものと考える。
また s 軸に垂直な平面で流管を切った断面積 A(s) も定義できる。流管は直線状とは限ら
ず、s 軸も図のように曲がっている可能性がある。
160
第 11 章 参考
パイプの中を流れている流体について考えるとき、パイプの内部が全てその流体で満
たされているとすれば、パイプそのものを流管と見なすことができる。
質量流量と体積流量
位置座標 s、時間 t における流管の断面積を A(s, t) とし、圧力を p(s, t)、 速度を u(s, t)、
流管中心の高さを h(s, t)、流体の密度を ρ(s, t) という記号で表すことにする。 ある流
管の位置 s にある断面を ∆t 秒間に通過する流体の質量は、どのように表せるだろうか?
話を簡単にするために、各種の物理量は時刻 t から t + ∆t までの間、変化しなかった
ものとし、また ∆t は十分に小さいものと仮定する。
図 11.2:
図中の流体が、∆t の間に断面 s を通過する流体にあたる。その一番後方の流体は時間
∆t ぎりぎりに断面を通過するので、∆t の時間をかけて断面 s に到達している。このとき、
一番後方の流体が動いた距離は u(s, t) ∗ ∆t となる。
このことから ∆t が小さいとき、位置 s から上流へ距離 u(s, t) ∗ ∆t だけ離れた位置
までの流体が、1秒間に断面を通過することができることが分かる。よって、∆t 間に通
過する流体の体積は A(s, t)u(s, t)∆t と表せる。
この流体の密度は ρ(s, t) だから、通過する質量は ρ(s, t)u(s, t)A(s, t)∆t と、式で表
せることになる。
1秒間に断面 a を通過する流体の質量は m = ρ(s, t)u(s, ts)A(s, t)。この量を「質量
流量」とよぶ。単位は [kg/s] である。
連続の式の導出
流管の小さな長さ δs を考える。位置座標 s,時間 t における流管の断面積を A(s, t)
とし、圧力を P (s, t)、 速度を u(s, t) = ds/dt、流管の高さを h(s, t),流体の密度を ρ(s, t)
とする。
11.2. Bernoulli の式
161
図 11.3:
s での切断面を通して ∆t 時間に流れ込む流体の質量は、
ρ(s, t)A(s, t)u(s, t)∆t
で,s + ∆s での切断面を通して ∆t 秒間に流れ出す流体の質量は、
ρ(s, t)A(s, t)u(s + ∆s, t)∆t
である。したがって,∆t 秒後の質量の変化は
ρ(s, t)A(s, t)[u(s, t) − u(s + ∆s, t)]∆t
となる。
ところで,時刻 t の時のこの領域の質量は ρ(s, t)A(s, t)∆s と書けるので ∆t 秒間後の
質量は
ρ(s, t + ∆t)A(s, t + ∆t)∆s
となり、∆t の間の質量の変化は
[ρ(s, t + ∆t) − ρ(s, t)]A(s, t + ∆t)∆s
となる。ここで,質量保存の法則より,つまり長さ ∆s の領域について、
(∆t の間の質量の
増加分)=(流れ込んだ質量)- (流れ出した質量)が成立しなくてはならない。よって,
ρ(s, t)A(s, t)[u(s, t) − u(s + ∆s, t)]∆t = [ρ(s, t + ∆t) − ρ(s, t)]A(s, t + ∆t)∆s
が成り立つ。両辺を A∆t∆s で割ると
ρ(s, t)u(s, t) − ρ(s, t)u(s + ∆s, t)
ρ(s, t + ∆t) − ρ(s, t)
=
∆s
∆t
ここで,∆t → 0 とすると,∆s → 0 となり,
−
∂(ρu)
∂ρ
=
=0
∂s
∂t
162
第 11 章 参考
これより,
∂ρ ∂(ρu)
+
=0
∂t
∂s
を得る。これが連続の式の一般的な形である。
もし流れが定常状態なら、物理量の時間変化は0なので
∂(ρuA)
=0
∂s
(11.1)
この式は s 軸(流管)に沿って、質量流量(ρQ)が一定に保たれることを示している。
もし定常かつ非圧縮流れであれば,ρ 一定より
∂(uA)
=0
∂s
(11.2)
したがって,定常・非圧縮流れでは体積流量 Q = uA が流管にそって一定に保たれる。
ここで,3次元デカルト座標系における,流体の密度を ρ(x, y, z, t),x, y, z それぞれの
方向の速度を u, v, w とすると,
∂ρ ∂(ρu) ∂(ρv) ∂(ρw)
+
+
+
=0
∂t
∂x
∂y
∂z
のような形になる。
Navier-Stokes 方程式
流体における Newton の運動方程式にあたるのが、Navier-Stokes 式である。x, y, z そ
れぞれの方向の速度を u, v, w について導かれていて、
∂u
∂u
∂u
∂u
+u
+v
+w
∂t
∂x
∂y
∂z
∂u
∂u
∂u
∂u
+u
+v
+w
∂t
∂x
∂y
∂z
∂u
∂u
∂u
∂u
+u
+v
+w
∂t
∂x
∂y
∂z
1 ∂ρ µ
+
ρ ∂x
ρ
1 ∂ρ µ
= Fy −
+
ρ ∂y
ρ
1 ∂ρ µ
= Fz −
+
ρ ∂z
ρ
= Fx −
∂2u ∂2u ∂2u
µ ∂ ∂u ∂v
∂w
+ 2 + 2 +
+
+
∂x2
∂y
∂z
3ρ ∂x ∂x ∂y
∂z
2
2
2
∂ u ∂ u ∂ u
µ ∂ ∂u ∂v
∂w
+ 2 + 2 +
+
+
∂x2
∂y
∂z
3ρ ∂y ∂x ∂y
∂z
2
2
2
∂ u ∂ u ∂ u
µ ∂ ∂u ∂v
∂w
+ 2 + 2 +
+
+
∂x2
∂y
∂z
3ρ ∂z ∂x ∂y
∂z
のような形をとる。式中の Fx , Fy , Fz は、1 kg の流体がそれぞれの方向に受ける外力
(重力など)である。
非圧縮流れにおいては、解くべき変数は u, v, w, p の4種類である(密度は一定と仮定
できるので)。これに対して方程式は 連続の式、x、y 、z 方向の Navier-Stokes 方程式で、
計4つあるので、唯一の解を求めることができるはずである。だが、Navier-Stokes 方程
式は非線形の方程式であるため、理論的に解くのは非常に難しいのが現状である。このた
め、コンピュータを用いて解を求めるシミュレーションが盛んに行われている。(「CFD」
Computational Fluid Dynamics:数値流体力学という分野がある。)