Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
2012年度・前期・数理解析・計算機数学2・第5回 1
● 講義資料
▼ 講義予定
• ニュートン法・逐次近似とその収束の判定
● 前回の講義のまとめ
▼ 浮動小数点演算の減算に関する相殺
• 浮動小数点数 x, y ∈ F の減算に関しては, 保護桁が 1 桁あれば, 相対誤差 2ǫ 以内で結果を求めることができる.
• しかし, a = 1.21× 10−2, b = 1.00, c = 1.23× 10−2 とおき, 二次方程式 ax2 + bx+ c = 0 の解を考えると, 真の解は,
−b+√b2 − 4ac2a
= −0.0123018,
−b−√b2 − 4ac2a
= −82.6323
である. これを, 10 進 3 桁浮動小数点数の体系で計算すると,
−b+√b2 − 4ac2a
= −4.07× 10−2,
−b−√b2 − 4ac2a
= −8.14× 101
となり, それぞれの相対誤差は, 2.30846, 0.014913 となる. すなわち, −b+√b2−4ac2a
を正しく
計算していないことがわかる.
この現象は, 以下の相殺 (canceling)と呼ばれるものである.
• 一般に x ∈ F を考えると, その有効桁の下の方の桁は「正しい値」を表しているとはいえない. x ∈ R の近似値として F の値を考えているので, 最低でも「最後の桁」は正しい値ではないと考えるのが妥当である. この「正しい値」を表していると考えられない桁のことを「汚
染桁」と呼ぶ.
• x, y ∈ F が非常に近い値を持つとき,その減算を行うと,汚染桁と考えられる部分が, x⊖y の上位桁にあらわれる. たとえば, 10進 3桁浮動小数点数の体系で x = 1.02×100, y = 1.01×100としたとき, それぞれの最後の桁は汚染桁と考えて良い. この減算結果は x⊖ y = 1.00× 10−2となり, 汚染桁から計算された「1」が最上位桁となり, この x ⊖ y の値は「信用できない」値となっている.
• 一般に, 浮動小数点数の計算において「値が近い数の減算」を行うと, その結果は大きな誤差を生じることがあることがわかる.
• 最初の二次方程式の解の公式については, b > 0 の時には,
−b+√b2 − 4ac2a
=2c
−b−√b2 − 4ac
May 16, 2012, Version: 1.0.1 [email protected]
2012年度・前期・数理解析・計算機数学2・第5回 2
と書き直すことにより,2c
−b−√b2 − 4ac
= −1.21× 10−2
と計算され, 相対誤差は 0.0164041 となり, 許容範囲内となる.
より一般には, 二次方程式 ax2 + bx+ c = 0 の解を公式にしたがって求める際には,
−b−√b2 − 4ac2a
,2c
−b−√b2 − 4ac
, b > 0,
−b+√b2 − 4ac2a
,2c
−b+√b2 − 4ac
, b < 0
と計算すべきであることがわかる.
▼ 正多角形の周長による円周率の近似計算
• 円周率 π の定義として,「単位円周の長さの2倍」または「単位円の面積」を採用して, π の近似値を求めることを考える. (これは, 厳密な定義ではないが, 紀元前から π を計算する前
提とされていた.)
• ℓn を単位円に内接する正 n 角形の周長の 1/2 倍, Ln を単位円に外接する正 n 角形の周長の 1/2 倍とおくと, 容易に ℓn < π < Ln であることがわかる. (ℓn < π の証明には, 「2点
を結ぶ最短線は直線である」との事実を使い, π < Ln の証明には, 面積の比較を用いる.)
• 簡単な図形的考察と三角関数の性質から
ℓn = n sin(π
n), Ln = n tan(
π
n),
ℓn < ℓ2n < · · · < π < · · · < L2n < Ln,limn→∞
ℓn = limn→∞
Ln = π
であることがわかる.
• また, テイラーの定理を用いれば,
ℓn = n sin(π
n) = π − π
3
6n2+
π5
120n4+O(n−6),
Ln = n tan(π
n) = π +
π3
3n2+
2π5
15n4+O(n−6),
であることもわかる.
• 半角の公式を用いると,
ℓ2n = 2n
√
1−√
1− (ℓn/n)22
,
L2n =2n2
Ln
(
√
1 + (Ln/n)2 − 1)
が成り立つ. また,2
L2n=
1
ℓn+
1
Ln
が成り立つ.
May 16, 2012, Version: 1.0.1 [email protected]
2012年度・前期・数理解析・計算機数学2・第5回 3
• この公式を n = 6, ℓ6 = 3, L6 = 2√3 を初期値として用いて計算すると, 10−8 程度の精度し
か π の近似値を得ることができない.
これは, 上の式で n が大きくなったときに「近い値同士の減算」を行っていて, それにとも
なう canceling が原因であることがわかる.
• これを解消する方法として,
ℓ2n = ℓn
√
2
1 +√
1− (ℓ/n)2
L2n =2Ln
√
1 + (Ln/n)2 + 1
と書き換えることにより, 10−14 程度の精度で π を求めることが可能となる.
• また, より計算が単純な方法として,
1
L2n=
1
2
(
1
ℓn+
1
Ln
)
,
ℓ2n =√
ℓnL2n,
を得ることができる.
▼ 巾級数による e, π の近似値の計算
• 自然対数の底 e, 円周率 π の近似値を求めるために広く使われる方法は, 初等超越関数の特殊値として求める方法である.
• ex = 1+ x+ x22+ · · ·+ xn
n!+ · · · であり, この巾級数の収束半径は無限大であるので, x = 1
を代入することにより,
e = 1 + 1 +1
2+ · · ·+ 1
n!+ · · ·
の右辺の無限級数の和を近似することで e の近似値を得ることができる.
• いま,
ex =
n∑
k=0
xk
k!+
ξn+1
(n+ 1)!, 0 < ξ < 1
であることを使えば,∣
∣
∣
∣
∣
e−n∑
k=0
1
k!
∣
∣
∣
∣
∣
≤ 1(n+ 1)!
が成り立つ. そこで,1
(n+ 1)!< ǫ が成り立つ n まで計算すれば,
1
(n+ 1)!< ǫ < ǫe となり,
e を相対誤差 ǫ で求めることができる.
• このように, ほしい精度で計算するために, 無限の計算を適切な有限の計算で打ち切ったことによる誤差を打ち切り誤差とよび, 上の計算は「打ち切り誤差 ((n + 1)!)−1 で計算する」と
いう言い方をする.
May 16, 2012, Version: 1.0.1 [email protected]
2012年度・前期・数理解析・計算機数学2・第5回 4
• 円周率 π はπ
4= arctan(1)
として arctan(x) の特殊値として得ることができる.
• したがって, arctan(x) のテイラー展開を考え, そこに x = 1 を代入すればよいように思えるが, これは誤りである. (誤りの理由は2つある)
• arctan(x) のテイラー展開は
arctan(x) = x− x3
3+
x5
5+ · · ·+ (−1)
nx2n+1
2n+ 1+ · · ·
であるが, 右辺の巾級数の収束半径は 1 であるので, 両辺に 1 を代入することはできない. 右
辺の巾級数が x = 1 で収束すれば, その値が arctan(1) に一致することはアーベルの定理の
主張である. すなわち, 右辺の巾級数が x = 1 で収束するかどうかは自明ではない. (これ
が「誤りの第一の理由」である.)
• いま, 初項 1, 公比 −x2 の有限等比級数を考えると
1− x2 + x4 + · · ·+ (−1)nx2n = 1− (−1)nx2n+2
1 + x2=
1
1 + x2− (−1)
nx2n+2
1 + x2
となる. この両辺を積分することにより(左辺は有限和であるので, 項別に積分ができる)
x− x3
3+
x5
5+ · · ·+ (−1)
nx2n+1
2n+ 1= arctan(x)−
∫
x
0
(−1)nt2n+21 + t2
dt
を得る. すなわち,∣
∣
∣
∣
x− x3
3+
x5
5+ · · ·+ (−1)
nx2n+1
2n+ 1− arctan(x)
∣
∣
∣
∣
≤∫ x
0
t2n+2
1 + t2dt
≤∫ x
0
t2n+2 dt ≤
1
2n+ 3x = 1,
x2n+3
2n+ 3|x| < 1,
となる.
• すなわち, arctan(x) のテイラー展開による計算は, その打ち切り誤差が x = 1 の時にはO(n−1), |x| < 1 の時には O(x−n) となり, 収束の様子が本質的に異る. 別の言い方をすれば,arctan(1) = π/4 の近似値を求めるために, arctan(1) のテイラー展開(これが収束すること
は上記の計算でわかっている)を計算することは望ましくない. (これが「誤りの第二の理
由」である.)
• arctan(1) = π/4 の値を計算する高速な方法としては, たとえば, 以下のものが知られている.π
4= 4 arctan(1/5)− arctan(1/239), (マチンの公式)
π
4= arctan(1/2) + arctan(1/3), , (ガウス)
π
4= 12 arctan(1/49) + 32 arctan(1/57)− 5 arctan(1/239) + 12 arctan(1/110443),
(他にも山ほどあるし, 他の方法で π を高速に計算することは多くの方法が知られている.)
May 16, 2012, Version: 1.0.1 [email protected]
2012年度・前期・数理解析・計算機数学2・第5回 5
● 講義資料
▼ ニュートン法
• 以下の図は, ニュートン法を f(x) = x2 − 2 に適用し,√2 の近似値を求めた例である. (
√2
と近似値の値との絶対誤差を表示している)
1e-16
1e-14
1e-12
1e-10
1e-08
1e-06
0.0001
0.01
1
0 1 2 3 4 5
Newton method for sqrt(2)
• 以下の図は, ニュートン法を fk(x) = (x2 − 2)k に適用し,√2 の近似値を求めた例である.
(√2 と近似値の値との絶対誤差を表示している)
1e-16
1e-14
1e-12
1e-10
1e-08
1e-06
0.0001
0.01
1
0 20 40 60 80 100 120
Newton method for sqrt(2)
k=1k=2k=3k=4
• 以下の図は, 各種の求根アルゴリズムを fk(x) = x2 − 2 に適用して√2 の近似値を求めた例
である. (√2 と近似値の値との絶対誤差を表示している)
1e-16
1e-14
1e-12
1e-10
1e-08
1e-06
0.0001
0.01
1
0 2 4 6 8 10 12
Some methods for sqrt(2)
newtonsecant
bisection (1)bisection (2)
May 16, 2012, Version: 1.0.1 [email protected]
2012年度・前期・数理解析・計算機数学2・第5回 6
ここで, 用いた方法は以下の通りである.
– “newton” は「ニュートン法」を, a0 = 2.0 で適用.
– “secant” は「割線法」を, a0 = 2.0, a1 = 2.0− 0.01 で適用.
– “bisection(1)” は「二分法」を, I0 = [0.0, 2.0] で適用.
– “bisection(2)” は「改良した二分法」を, I0 = [0.0, 2.0] で適用.
「改良した二分法」とは以下のものである. 通常の二分法では, In = [an, bn], f(an) < 0,
f(bn) > 0 に対して, cn+1 = (an + bn)/2 とおき, f(cn+1) の符号を判定している. その
代りに, (an, f(an)), (bn, f(bn)) を結ぶ直線と y = 0 との交点を cn+1 とおき, f(cn+1)
の符号を判定したものである.
May 16, 2012, Version: 1.0.1 [email protected]
2012年度・前期・数理解析・計算機数学2・第5回 7
● 実習内容
(以下で「★」の数は推奨の程度を示します. 多いほど推奨の度合いが大きい. また, 「†」は
難易度またはマニアックな程度を表します. 多いほど難しいかマニアックかです.)
1. (★★★)ニュートン法を用いて√2 の近似値を相対誤差 4.0× 10−16 で求めるプログラム
を書きなさい.
2. (★★★)関数 f(x) = (x2 − 2)k (k = 2, 3, . . .) にニュートン法を適用して√2 の近似値を
求め, また, それぞれの k に対して, 各繰り返しでの近似値と√2 との誤差の振る舞いをグラ
フに表しなさい.
3. (★★)ニュートン法を用いて√x の近似値を相対誤差 4.0× 10−16 で求めるプログラムを
書きなさい. さらに, その近似値 αx に対して |α2x − x| を計算し, 求めた近似値が相対誤差4.0× 10−16 以内であることを確かめなさい.
4. (★★)関数 f(x), 初期条件 x0 はニュートン法の仮定を満たしているとする. さらに, α
を求めるべき f(x) = 0 の解とししたとき, x1 を x1 ∈ (α, x0) から一つえらぶ. この時,(xn, f(xn)), (xn+1, f(xn+1)) を通る直線と x 軸との交点を xn+2 と定めることにより得られ
る点列 {xn} を順次求め, {xn} は α に収束することを確認しなさい. (この方法を割線法と呼ぶ.)
5. (★★)各種の求根アルゴリズムを用いて√x の近似値の計算の様子を比較しなさい.
6. (††)複素関数 f(z) = zk +1 (k = 2, 3, 4) にニュートン法を適用することを考える. この
時, 初期条件 z0 を {z = (x, y) : |x| < 2, |y| < 2} から任意に選ぶと, f(z) = 0 の解は k 個の解のいずれかに収束する. この時, 初期条件 z0 に対する点列がどの解に収束するかを, 収束
先ごとに色を変えた図を書きなさい. (図の書き方は, gnuplot の解説のWEB ページを探す
とよい)
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
May 16, 2012, Version: 1.0.1 [email protected]