計算結果の真値の存在範囲のシミュレーションによる推定
岡本安晴
岡本安晴(2008)「統計学を学ぶための巣学入門[上]」では、計算結果の真値の有効桁数が、1.6節において不等式による方法、A.5節では1次式による方法により説明されている。これらの方法は、真値の存在範囲を考える上では有用であるが、式が複雑になると実用性に問題が生じる。ここでは、シミュレーションによる方法を示す。このシミュレーションによる方法は式が複雑になっても実用性がある。基本的な考え方を示すために、「足し算」と「割り算」の場合について例を示す。
岡本(2008)1.6節では、2つの測定値
に対する足し算が扱われている。AとBの真値が、それぞれ次の一様分布に従っていると考える。
この設定の下で、の真値の分布をシミュレーションで求めるために、リスト1のスクリプトを用意した。
リスト1 足し算の真値の範囲を求めるスクリプト例
import numpy
as np
import matplotlib.pyplot
as plt
n = 1_000_000
A = np.random.uniform(150.15,
150.25, n)
B = np.random.uniform(57.345,
57.355, n)
SumAB = A + B
MinAB = np.min(SumAB)
MaxAB = np.max(SumAB)
plt.hist(SumAB)
plt.title(f'Min.=
{MinAB:.5f}, Max = {MaxAB:.5f}')
plt.show()
リスト1を実行すると図1の結果を得る。
図1
足し算の真値は、207.5から207.6の範囲にあると考えられる。
岡本(2008)1.6節では2つの測定値、85.79と7.95の割り算が取り上げられている。それぞれの真値とが次の範囲で一様分布していると考える。
このとき、商の分布を求めるスクリプトをリスト2のように用意した。
リスト2 商の真値の範囲を求めるスクリプト例
import numpy
as np
import matplotlib.pyplot
as plt
n = 1_000_000
X = np.random.uniform(85.785,
85.795, n)
Y = np.random.uniform(7.945,
7.955, n)
DivXY = X / Y
MinXdY = np.min(DivXY)
MaxXdY = np.max(DivXY)
plt.hist(DivXY)
plt.title(f'Min.=
{MinXdY:.5f}, Max = {MaxXdY:.5f}')
plt.show()
リスト2を実行すると図2の結果を得る。
図2
商の真値は、10.783から10.799の範囲にあると考えられる。