• 検索結果がありません。

● 講義資料

N/A
N/A
Protected

Academic year: 2021

シェア "● 講義資料"

Copied!
6
0
0

読み込み中.... (全文を見る)

全文

(1)

● 講義資料

▼ 講義予定

ニュートン法・逐次近似とその収束の判定

● 前回の講義のまとめ

▼ 浮動小数点演算の減算に関する相殺

浮動小数点数

x, y ∈ F

の減算に関しては,保護桁が

1

桁あれば,相対誤差

以内で結果を 求めることができる.

しかし,

a = 1.21 × 10 2 , b = 1.00, c = 1.23 × 10 2

とおき,二次方程式

ax 2 + bx + c = 0

解を考えると,真の解は,

− b + √

b 2 − 4ac

2a = − 0.0123018,

− b − √

b 2 − 4ac

2a = − 82.6323

である. これを, 10

3

桁浮動小数点数の体系で計算すると,

− b + √

b 2 − 4ac

2a = − 4.07 × 10 2 ,

− b − √

b 2 − 4ac

2a = − 8.14 × 10 1

となり, それぞれの相対誤差は, 2.30846, 0.014913となる. すなわち,

b + 2 b a

2

4 ac

を正しく 計算していないことがわかる.

この現象は,以下の相殺

(canceling)

と呼ばれるものである.

一般に

x ∈ F

を考えると,その有効桁の下の方の桁は「正しい値」を表しているとはいえな い.

x ∈ R

の近似値として

F

の値を考えているので,最低でも「最後の桁」は正しい値では ないと考えるのが妥当である.この「正しい値」を表していると考えられない桁のことを「汚 染桁」と呼ぶ.

• x, y ∈ F

が非常に近い値を持つとき,その減算を行うと,汚染桁と考えられる部分が,

x ⊖ y

の上 位桁にあらわれる. たとえば, 10

3

桁浮動小数点数の体系で

x = 1.02 × 10 0 , y = 1.01 × 10 0

としたとき,それぞれの最後の桁は汚染桁と考えて良い. この減算結果は

x ⊖ y = 1.00 × 10 2

となり, 汚染桁から計算された「1」が最上位桁となり, この

x ⊖ y

の値は「信用できない」

値となっている.

一般に,浮動小数点数の計算において「値が近い数の減算」を行うと,その結果は大きな誤差 を生じることがあることがわかる.

最初の二次方程式の解の公式については,

b > 0

の時には,

− b + √

b 2 − 4ac

2a = 2c

− b − √

b 2 − 4ac

(2)

と書き直すことにより,

2c

− b − √

b 2 − 4ac = − 1.21 × 10 2

と計算され,相対誤差は

0.0164041

となり,許容範囲内となる.

より一般には,二次方程式

ax 2 + bx + c = 0

の解を公式にしたがって求める際には,

− b − √

b 2 − 4ac

2a , 2c

− b − √

b 2 − 4ac , b > 0,

− b + √

b 2 − 4ac

2a , 2c

− b + √

b 2 − 4ac , b < 0

と計算すべきであることがわかる.

▼ 正多角形の周長による円周率の近似計算

円周率

π

の定義として,「単位円周の長さの2倍」または「単位円の面積」を採用して,

π

近似値を求めることを考える. (これは,厳密な定義ではないが,紀元前から

π

を計算する前 提とされていた.)

• ℓ n

を単位円に内接する正

n

角形の周長の

1/2

倍,

L n

を単位円に外接する正

n

角形の周長

1/2

倍とおくと,容易に

n < π < L n

であることがわかる. (ℓ

n < π

の証明には,「2点 を結ぶ最短線は直線である」との事実を使い,

π < L n

の証明には,面積の比較を用いる.)

簡単な図形的考察と三角関数の性質から

n = n sin( π

n ), L n = n tan( π n ), ℓ n < ℓ 2n < · · · < π < · · · < L 2n < L n ,

n lim →∞ ℓ n = lim

n →∞ L n = π

であることがわかる.

また,テイラーの定理を用いれば,

n = n sin( π

n ) = π − π 3

6n 2 + π 5

120n 4 + O(n 6 ), L n = n tan( π

n ) = π + π 3

3n 2 + 2π 5

15n 4 + O(n 6 ),

であることもわかる.

半角の公式を用いると,

ℓ 2 n = 2n s

1 − p

1 − (ℓ n /n) 2

2 ,

L 2 n = 2n 2 L n

p 1 + (L n /n) 2 − 1

が成り立つ. また,

2 = 1

+ 1

(3)

この公式を

n = 6, ℓ 6 = 3, L 6 = 2 √

3

を初期値として用いて計算すると, 10

8

程度の精度し

π

の近似値を得ることができない.

これは, 上の式で

n

が大きくなったときに「近い値同士の減算」を行っていて, それにとも

なう

canceling

が原因であることがわかる.

これを解消する方法として,

ℓ 2n = ℓ n

s 2 1 + p

1 − (ℓ/n) 2

L 2n = 2L n

p 1 + (L n /n) 2 + 1

と書き換えることにより, 10

14

程度の精度で

π

を求めることが可能となる.

また,より計算が単純な方法として,

1 L 2 n

= 1 2

1 ℓ n + 1

L n

, ℓ 2 n = p

n L 2 n ,

を得ることができる.

▼ 巾級数による

e

, π

の近似値の計算

自然対数の底

e,

円周率

π

の近似値を求めるために広く使われる方法は,初等超越関数の特 殊値として求める方法である.

• e x = 1 + x + x 2

2

+ · · · + x n!

n

+ · · ·

であり,この巾級数の収束半径は無限大であるので,

x = 1

を代入することにより,

e = 1 + 1 + 1

2 + · · · + 1 n! + · · ·

の右辺の無限級数の和を近似することで

e

の近似値を得ることができる.

いま,

e x =

n

X

k =0

x k

k! + ξ n +1

(n + 1)! , 0 < ξ < 1

であることを使えば,

e −

n

X

k =0

1 k!

≤ 1

(n + 1)!

が成り立つ. そこで,

1

(n + 1)! < ǫ

が成り立つ

n

まで計算すれば,

1

(n + 1)! < ǫ < ǫe

となり,

e

を相対誤差

ǫ

で求めることができる.

このように,ほしい精度で計算するために,無限の計算を適切な有限の計算で打ち切ったこと による誤差を打ち切り誤差とよび,上の計算は「打ち切り誤差

((n + 1)!) 1

で計算する」と いう言い方をする.

(4)

円周率

π

π

4 = arctan(1)

として

arctan(x)

の特殊値として得ることができる.

したがって, arctan(x)のテイラー展開を考え,そこに

x = 1

を代入すればよいように思える が,これは誤りである. (誤りの理由は2つある)

• arctan(x)

のテイラー展開は

arctan(x) = x − x 3 3 + x 5

5 + · · · + ( − 1) n x 2 n +1 2n + 1 + · · ·

であるが,右辺の巾級数の収束半径は

1

であるので,両辺に

1

を代入することはできない. 辺の巾級数が

x = 1

で収束すれば,その値が

arctan(1)

に一致することはアーベルの定理の 主張である. すなわち, 右辺の巾級数が

x = 1

で収束するかどうかは自明ではない. (これ が「誤りの第一の理由」である.)

いま,初項

1,

公比

− x 2

の有限等比級数を考えると

1 − x 2 + x 4 + · · · + ( − 1) n x 2 n = 1 − ( − 1) n x 2n+2

1 + x 2 = 1

1 + x 2 − ( − 1) n x 2n+2 1 + x 2

となる. この両辺を積分することにより(左辺は有限和であるので,項別に積分ができる)

x − x 3 3 + x 5

5 + · · · + ( − 1) n x 2 n +1

2n + 1 = arctan(x) − Z x

0

( − 1) n t 2 n +2 1 + t 2 dt

を得る. すなわち,

x − x 3 3 + x 5

5 + · · · + ( − 1) n x 2n+1

2n + 1 − arctan(x) ≤

Z x

0

t 2n+2 1 + t 2 dt

≤ Z x

0

t 2 n +2 dt ≤

 

 

 1

2n + 3 x = 1, x 2n+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),

(5)

● 講義資料

▼ ニュートン法

以下の図は,ニュートン法を

f (x) = x 2 − 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)

以下の図は, ニュートン法を

f k (x) = (x 2 − 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=1 k=2 k=3 k=4

以下の図は,各種の求根アルゴリズムを

f k (x) = x 2 − 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)

newton secant bisection (1) bisection (2)

(6)

ここで,用いた方法は以下の通りである.

– “newton”

は「ニュートン法」を,

a 0 = 2.0

で適用.

– “secant”

は「割線法」を,

a 0 = 2.0, a 1 = 2.0 − 0.01

で適用.

– “bisection(1)”

は「二分法」を,

I 0 = [0.0, 2.0]

で適用.

– “bisection(2)”

は「改良した二分法」を,

I 0 = [0.0, 2.0]

で適用.

「改良した二分法」とは以下のものである. 通常の二分法では,

I n = [a n , b n ], f (a n ) < 0, f (b n ) > 0

に対して,

c n +1 = (a n + b n )/2

とおき,

f (c n +1 )

の符号を判定している. その 代りに, (a

n , f (a n )), (b n , f (b n ))

を結ぶ直線と

y = 0

との交点を

c n +1

とおき,

f (c n +1 )

の符号を判定したものである.

● 実習内容

(以下で「★」の数は推奨の程度を示します. 多いほど推奨の度合いが大きい. また,「†」は 難易度またはマニアックな程度を表します. 多いほど難しいかマニアックかです.)

1.

(★★★)ニュートン法を用いて

2

の近似値を相対誤差

4.0 × 10 16

で求めるプログラム を書きなさい.

2.

(★★★)関数

f (x) = (x 2 − 2) k (k = 2, 3, . . .)

にニュートン法を適用して

2

の近似値を 求め,また,それぞれの

k

に対して,各繰り返しでの近似値と

2

との誤差の振る舞いをグラ フに表しなさい.

3.

(★★)ニュートン法を用いて

√ x

の近似値を相対誤差

4.0 × 10 16

で求めるプログラムを 書きなさい. さらに, その近似値

α x

に対して

| α 2 x − x |

を計算し, 求めた近似値が相対誤差

4.0 × 10 16

以内であることを確かめなさい.

4.

(★★)関数

f (x),

初期条件

x 0

はニュートン法の仮定を満たしているとする. さらに,

α

を求めるべき

f (x) = 0

の解とししたとき,

x 1

x 1 ∈ (α, x 0 )

から一つえらぶ. この時,

(x n , f (x n )), (x n+1 , f (x n+1 ))

を通る直線と

x

軸との交点を

x n+2

と定めることにより得られ る点列

{ x n }

を順次求め,

{ x n }

α

に収束することを確認しなさい. (この方法を割線法と 呼ぶ.)

5.

(★★)各種の求根アルゴリズムを用いて

x

の近似値の計算の様子を比較しなさい.

参照

関連したドキュメント

分枝限定法の考え方 • 分枝操作により,たくさんの 部分問題 が生成される

x

また, その繰り返し回数何回程度になるか?さらに, 求めた値が, 実際に n の平

また, 「†」は 難易度またはマニアックな程度を表します.. それを「繰り返し2乗法」(「高速乗算法」)および, 数学関数

ここでは, Gauss の消去法で枢軸 選択が必要ない(対角成分が 0 にはならない)場合のみを考える... また,

特に, 一般の行列の固有値 を有限回の代数的操作で求めることは不可能である... また,

この問題では, スツルム列を手で(または, Mathematica などで)計算しておき, 係数を浮動

ただ し, このプログラムも x の値によっては停止しない.... また,