Home

計算結果の真値の存在範囲のシミュレーションによる推定

岡本安晴

 

岡本安晴(2008)「統計学を学ぶための巣学入門[上]」では、計算結果の真値の有効桁数が、1.6節において不等式による方法、A.5節では1次式による方法により説明されている。これらの方法は、真値の存在範囲を考える上では有用であるが、式が複雑になると実用性に問題が生じる。ここでは、シミュレーションによる方法を示す。このシミュレーションによる方法は式が複雑になっても実用性がある。基本的な考え方を示すために、「足し算」と「割り算」の場合について例を示す。

 

足し算

 

岡本(20081.6節では、2つの測定値

に対する足し算が扱われている。ABの真値が、それぞれ次の一様分布に従っていると考える。

この設定の下で、の真値の分布をシミュレーションで求めるために、リスト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の範囲にあると考えられる。

 

 

割り算

 

岡本(20081.6節では2つの測定値、85.797.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の範囲にあると考えられる。

 

 

Home