レポート課題および解答

レポート課題および解答
(2007 年度 数値計算)
レポート課題 1. x についての 2 次方程式 ax2 + bx + c = 0(ただし,a = 0 とする)のふたつの解は解の公
式から,
x1 =
−b +
√
b2 − 4ac
,
2a
x2 =
−b −
√
b2 − 4ac
2a
で与えられる.これを用いて,x1 あるいは x2 を数値的に計算するときに,桁落ちが起きる場合がある.それ
(10/3 出題,10/10 8:40 締切)
はどういう時か.具体例を挙げよ.また,それを防ぐ方法を提示せよ.
解答. 桁落ちが起きる例.4ac が b2 に比べて非常に小さい場合,b > 0 であれば x1 において,また,b < 0 で
√
あれば x2 において,桁落ちが起きる可能性がある.実際,b > 0 のとき, b2 − 4ac ≈
√
b2 = b となり,x1
の分子は b と b に非常に近い数の差(近接する 2 つの数の引き算)となり,そこで桁落ちが起きる.同様に,
√
√
b < 0 のとき, b2 − 4ac ≈ b2 = −b となり,x2 の分子は −b と −b に非常に近い数の差(近接する 2 つの
数の引き算)となり,そこで桁落ちが起きる.その具体例は,
a = 0.1,
b = 100,
c=1
このとき,Scilab で有効数字 7 桁で計算を行うと,
x1 = −1.000000D − 02,
x2 = −9.999900D + 02
となる.一方倍精度の桁で計算を行うと
x1 = −1.0000100001974D − 02,
x2 = −9.9998999990000D + 02
となり,これらの値を有効数字 8 桁目で四捨五入すると,
x1 = −1.000010D − 02,
x2 = −9.999900 + 02
であるから,x2 は一致するが x1 は 7 桁目に違いが出る.これは桁落ちによる誤差と考えられる.
桁落ちを防ぐには,2 次方程式の解と係数の関係 x1 x2 = c/a を利用するとよい.x1 に桁落ちが起きる場合
には,x2 を解の公式で求めた上で,x1 = c/(ax2 ) とすればよく,x2 に桁落ちが起きる場合には,x1 を解の公
式で求めた上で,x2 = c/(ax1 ) とすればよい.先ほどの,例について,x1 = c/(ax2 ) を用いて有効数字 7 桁
で計算を行った結果,
x1 = −1.000010D − 02
となり,倍精度の桁で計算を行った場合と一致する.
【参考】桁落ちとは,近接する 2 つの数の引き算で有効桁数が失われる現象のことをいう.
【評価の観点】桁落ちが起きる a, b, c を具体的に例示していること.それを防ぐ方法を明示していること.
1
レポート課題 2. 1. 例題 3 において,S2 ,すなわち i = 100000 から i = 1 の順で加えたほうが,S1 ,すなわ
ち i = 1 から i = 100000 の順で加えた場合よりも精度がよくなる理由を述べよ.
2.(第 1 章の問題の 1)x̂ に εx の誤差が含まれるとき,y = exp(x̂) に含まれる誤差を評価せよ.
(10/9 出題,10/24 8:40 締切)
解答. 1. √
1
i(i+1)
の i = 1 から i = 100000 までの和であり,約 11.53 である.i = 100000 のとき √
1
i(i+1)
≈
1 × 10−5 程度である.したがって,i = 1 から i = 99999 までの和(これはほとんど 11.53 に近い値)にこの
ような小さな数を加えれば単制度の計算では,i = 100000 のときの値が 0 に丸められ,情報落ちがおき 0 に丸
められてしまう.
逆に,i = 100000 から i = 1 までこの順に足すことにより,i = 100000 のような i が大きいときの √
1
i(i+1)
の値が有効数字の範囲内で保たれ,情報落ちを避けることができるので精度がよくなる.
2. 真の値 x とすると,x = x̂ + εx である.exp(x̂) に含まれる誤差 ε は,
ε = exp(x) − exp(x̂) = exp(+̂εx ) − exp(x̂) = exp(x̂)(exp εx − 1)
ここでテーラー展開を用いて,εx が十分小さいときには,
exp εx = 1 + εx + O(ε2x )
であることに注意すると,
ε∼
= exp(x̂)εx ,
∴
|ε| ∼
= |εx |
|x̂|
すなわち,exp(x̂) の相対誤差は |εx | にほぼ等しい.
レポート課題 3. 補間点 x0 = 0, x1 = 0.5, x2 = 1 に対して,関数値 y0 = 0, y1 = 1, y2 = 0 が与えられたとき,
ラグランジュの補間公式を用いて fN (x) を求めよ.
(10/10 出題,10/24 8:40 締切)
解答. N = 2 である.
(x − x1 )(x − x2 )
(x − x0 )(x − x2 )
(x − x0 )(x − x1 )
y0 +
y1 +
y2
(x0 − x1 )(x0 − x2 )
(x1 − x0 )(x1 − x2 )
(x2 − x0 )(x2 − x0 )
(x − 0)(x − 1)
= 4x(1 − x)
=
(0.5 − 0)(0.5 − 1)
f2 (x) =
2
レポート課題 4. I =
N −1 xi+1
i=0
xi
(i)
f1 (x)dx を計算し,(3.4) 式を導け.
(10/24 出題,10/31 8:40 締切)
解答.
レポート課題 5. 1. 第 1 章例題 4 を Scilab を用いて検証し,そのときの入力と出力結果を提出せよ(必須問
題:これは全員解答してください).
2. 配布プリントの 2 ページ,lagrange.sci のプログラムを解説せよ(発展問題:解答すれば,ボーナス点と
(10/31 出題,11/7 8:40 締切)
してレポート点に加算します).
3