フーリエ級数諸例 - miyazaki-u.ac.jp方形波 周期 の関数 のフーリエ級数を求める。f(x) は奇関数なので,である。よって, のみ計算すればよい。
Microsoft Excel で学ぶ モンテカルロ計算による 不...
Transcript of Microsoft Excel で学ぶ モンテカルロ計算による 不...
Microsoft Excel ®で学ぶモンテカルロ計算による
不確かさ評価本ファイルに含まれるプログラムはモンテカルロ計算の仕組みの理解を促進する目的で私的に使用することを想定したものです。実用的な目的への使用は許可していません。プログラムを使用したことにより損害が発生した場合、作成者やその所属機関は一切責任を持ちません。
実務に使用するためのプログラムの開発に興味のある方は、作成者までご連絡下さい。
産業技術総合研究所 城野克広 (最終改訂 2018年12月5日)https://staff.aist.go.jp/k.shirono/
3
ある球の密度を知るのに、直径の測定と質量の測定をする。半径の値rは平均1.0 cm、標準偏差0.1 cmの正規分布に従って測定されたとする。質量の値mは平均10.0 g、標準偏差0.1 gの正規分布に従うとする。密度の値は以下の式で値は2.4 g∙cm−3となる。標準不確かさと95 %の信頼の水準の区間を求めよ。
33 4
3
34 r
m
r
m
g∙cm−3
5
rによるの標準不確かさ• rに対する感度係数 −7.2 g∙cm−4
• rの標準不確かさ0.1 cm→ これらを乗じて、0.72 g∙cm−3と計算される。
mによるの標準不確かさ• mに対する感度係数 0.24 cm−3
• mの標準不確かさ0.1 g→ これらを乗じて、0.024 g∙cm−3と計算される。
の標準不確かさu()
u 0.72 0.024 g∙cm−3= 0.72 g∙cm−3
6
の拡張不確かさU中心極限定理から正規分布として、包含係数2を用いると、
U = 2×u() = 1.4 g∙cm−3
95 %の信頼の水準の区間
( – U, + U) = (2.4 – 1.4, 2.4 + 1.4) g∙cm−3
= (1.0, 3.8) g∙cm−3
• バジェットシートは以下のようになる。
不確かさ要因 記号標準不確かさ
u(xi)感度係数
ci測定量の標準不確かさ
|ci|u(xi) (g∙cm−3) 備考
半径の測定 u(r) 0.1 cm −7.2g∙cm−4 0.72
質量の測定 u(m) 0.1 g 0.24cm−3 0.024
合成標準不確かさ
uc() 0.72
拡張不確かさ
U 1.44 k = 2
7
16
• 95 %の信頼の水準を持つ区間の最小値は、全体の2.5パーセント点である。PERCENTILE関数により、パーセント点は計算できる。この場合、「=PERCENTILE(C1:C100,0.025)」とする。
17
• 95 %の信頼の水準を持つ区間の最大値は、全体の97.5パーセント点である。PERCENTILE関数により、パーセント点は計算できる。この場合、「=PERCENTILE(C1:C100,0.975)」とする。
18
• このデータから、
標準不確かさは0.83 g∙cm−3 、
95 %の信頼の水準の区間は(1.4, 4.8) g∙cm−3
と分かる。
• 感度係数を使って計算した95 %の信頼の水準の区間は(1.0, 3.8) g∙cm−3
19
さらに計算を続けると以下のヒストグラムを得る。
観測回数
2.5 %点と 97.5 %点
ヒストグラム:ある定められた区間にあてはまる値が何回現れたかを示す棒グラフ
u() = 0.83 g∙cm–3
(1.4, 4.6) g∙cm–3
/ g∙cm–3
モンテカルロ計算では
1. 感度係数は計算しない。(→ 感度係数が計算できないときにモンテカルロ計算は便利)
2. 中心極限定理は使わない。(→ 中心極限定理が使えないときにモンテカルロ計算は便利)
3. タイプAの不確かさの計算が違う。(→ 後ほど)
21
■便利な点
・非正規性や非線形性が問題になる場合とならない場合の場合分けが必要でない。
■問題点・ソフトウェアの正しさ(ISO 17025 5.4.7a)の証明をどのようにするのかが一般的でない。
・モンテカルロ法による計算結果を校正結果として受け取った場合の取り扱いがどうしてよいか分からない。
22
http://www.bipm.org/utils/common/documents/jcgm/JCGM_101_2008_E.pdf
Evaluation of measurement data – Supplement 1 to the "Guide to the expression of uncertainty in measurement" – Propagation of distributions using a
Monte Carlo method
JCGM 101
マクロを使う②
27
4.マクロ編集画面が立ち上がる。
5.Sub …の行とEnd Subの間に「Msgbox(“モンテカルロ法始めました。”)」と入力
6.編集画面の右上の最小化ボタンをクリックして、編集画面を最小化し、エクセルを表示する。
宣言・型
29
Sub Sengen ()Dim i As LongDim x As Doublei = 1x = 1#MsgBox (i)MsgBox (x)
End Sub
i を整数型として扱うことを宣言する。
x を実数型として扱うことを宣言する。
1#は整数としての1ではなく、実数としての1.000000…のことを意味している。
MsgBox()はメッセージボックスに値を表示させる関数。
iに1という値を記録する。
配列
30
Sub Hairetsu()Dim x(1 To 3) As Doublex(1) = 1#x(2) = 2#x(3) = 3#MsgBox (x(1))MsgBox (x(2))MsgBox (x(3))
End Sub
x(1)、x(2)、x(3)という一連のデータ(配列)として扱うことを宣言。
x(1)に1.0を代入する。以下同様。
データの入出力①
31
Sub NyuShutsuRyoku1()Dim x As Doublex = Range("A1").ValueRange("B1").Value = x
End Sub
セルのA1に入っているデータをxに入力する。
xに入っているデータをセルのB1に出力する。
データの入出力②
32
Sub NyuShutsuRyoku2()Dim x As Doublex = Cells(2,1).ValueCells(2,2).Value = x
End Sub
上から2段目、左から1行目のセル、すなわちA2のセルからデータをxに入力する。
xに入っているデータを上から2段目、左から2行目、すなわちB2のセルに出力する
四則演算
33
Sub Warizan()Dim x As DoubleDim y As DoubleDim z As Doublex = 1y = 2z = x/yMsgBox (z)
End Sub
加減乗除にはそれぞれ「+」、「‐」、「*」、「/」が対応する。この場合は、xをyで除する。
34
Sub KansuCos()Dim x As DoubleDim y As Doublex = 0 y = cos(x)MsgBox (y)
End Sub
簡単な関数①
「cos()」はcosを返す関数。簡単な関数はVBAで定義されている。(次スライド参照)
簡単な関数②
35
x^2, x^3, …x^(1/2), x^(1/3), …Abs(x) Sin(x), Cos(x), Tan(x)Exp(x)Log(x)
x2, x3, …√x, 3√x, … |x| sin(x), cos(x), tan(x)exp(x)ln(x) log10(x)はLog(x)/Log(10#)
その他にもたくさんの関数が用意されている。
ワークシート関数①
36
エクセルで使える関数が、VBAではそのままでは
使えないことがある。例えば、最大値を呼び出すMax関数は、VBAでは準備されていない。しかし、
「WorksheetFunction.Max()」とすることで、エクセルを用いたVBAではMax関数を使うことができる。同じように、使用できる関数
が他にもいくつかある。ただし、ワークシート上で「.」が入っている関数は、それを「_」に置き換える必要がある場合もある。(具体例はのちほど)
ワークシート関数②
37
Sub ChooseMax()Dim x(1 To 3) As DoubleDim y As Doublex(1) = 1#x(2) = 2#x(3) = 3#y = WorksheetFunction.Max(x)MsgBox (y)
End Subx(1) ~ x(3)の中から最も大きいものを選び、yに記録する。このように配列を入力にできる関数もある。
繰返し(For文)
38
Sub Kurikaeshi()Dim i As LongDim n As Longn = 0For i = 1 To 10n = n + i
NextMsgBox (n)
End Sub
「For 変数 = 1 To 10」で、その変数を1から10まで変えながら、「Next」と書い
てある行までの演算を繰り返すことを意味している。10を100や1000に変えれば、100回あるいは1000回になる。
変数は演算の中で使ってもよいし、使わなくてもよい。後者の場合、変数は単なる繰り返しのための指標となる。
「n = n + i」はもともとのnという値にiという値を足して、更新するという意味。例えばnに1、iに2という値が入っているときに、 「n = n + i」とすると、nが1から3に更新される。
条件分岐(If文)①
40
Sub JoukenBunki()Dim i As Longi = 1If (i = 1) ThenMsgBox ("iは1。")
ElseMsgBox ("iは1でない。")
End IfEnd Sub
「If((条件式)) Then (演算①) Else(演算②) End If」の構文で条件分岐を行う。(ここで使われた条件式の「i = 1」は「iが1に等しい」という意味。)条件式が真ならば、ThenとElseの間の演算を行う。
条件式が偽のとき、Else とEnd Ifの間
の演算を行う。もし、偽のときには何の演算もしないならば、Elseを省略して「If((条件式)) Then (演算①) End If」としてもよい。
条件分岐(If文)②
41
x = yx > yx >= yx < y x <= y x <> y
xとyは等しい。
xはyより大きい。
xはy以上である。
xはyより小さい。
xはy以下である。
xはyではない。
x、yはDouble型でもLong型でもよい。(先のスライドのように)yの代わりに数字を直接入力してもよい。
一様分布②
44
Sub ItiyouBunpu()Dim a As DoubleDim b As DoubleDim x As Doublea = ‐100b = 100x = (b‐a)*Rnd+aMsgBox (x)
End Sub
ここでaは一様分布の最小値。
ここでbは一様分布の最大値。
「(b‐a)*Rnd」とすることで、0から(b‐a)の範囲での一様分布を呼び出せる。それに最小値のaを足すことで、aからbの範囲での一様分布となる。
ヒストグラム①
• ヒストグラムを作成するためのFrequency関数を紹介する。まずはワークシートで使ってみる。
45
1.データをあるA列(下の場合A1からA6)に入れる。
2.データ区切りの上限となる数値をB列(下の場合、B1からB3)に小さい順に入れる。
3.C列のセルを、B列で
使ったセルよりも一つ多く選択する。(下の場合C1からC4)
ヒストグラム②
4.「=Frequency(A1:A6,B1:B2)」のようにFrequency関数に(データのセル)と
(データ区切りのセル)の順に入力し、Cntrlボタン、Shiftボタン、Enterボタンを同時に押す。
46
5.C1のセルにはB1のセルの値以下のデータ数が出力される。C2にはB1のセルの値より大きく、B2のセルの値以下
のデータ数が出力される。以下同様で、一番下のセル(下ではC4)にはB列の最
大の区切り値より大きいデータの個数が出力される。
ヒストグラム④
6.C列のデータを選択し、「挿入」タ
ブを選択、「グラフ」から「2-D縦棒」の「集合縦棒」を選びます。
47
7.グラフが表示される。(実際にこの機
能を使うときに、横軸の値は実際の測定値とは関係のない値になっているので、適切に修正する。修正の仕方はのちほど。)
ヒストグラム⑥
49
Sub Histgram()Dim i As LongDim x(1 To 1000) As DoubleDim y(1 To 10) As DoubleDim nCount As VariantFor i = 1 To 1000x(i) = Rnd
Next(次スライドに続く)
Variantは任意の型ということ。計算の
中で自動的に型が与えられる。Frequency関数の出力はVariant型で指定しないといけない。
50
For i = 1 To 10y(i) = i * 0.1
NextnCount = WorksheetFunction.Frequency(x, y)For i = 1 To 10Cells(i, 1) = y(i) ‐ 0.05Cells(i, 2) = nCount(i, 1)
NextEnd Sub
ヒストグラム⑦
nCount(1,1)からnCount(11,1)まで値が格納されているが、nCount(11,1)はゼロなので、出力しないようにした。
ここでは、nCount(1,1)が最小値からy(1)の間の配列x中のデータ数、nCount(2,1)がy(1)からy(2)までのデータ数、以下同様で、nCount(11,1)がy(10)から最大値までのデータ数を返す。
上限値ではなく、範囲中の平均値が出力されるように0.05を引いている。
51
1.出力されたB列のデータを選択し、
「挿入」タブを選択、「グラフ」から「2-D縦棒」の「集合縦棒」を選ぶ。この時点では横軸がデータと合っていない。
ヒストグラム⑧
• ヒストグラムを描いてみよう。
2.「挿入」タブの「データの選択」を選び、。
52
3.立ち上がったデータソースの選択から、
「横軸(項目)ラベル」の「編集」ボタンをクリック。立ち上がった→データ範囲の選択と書いている左の「↑」ボタンをクリック
ヒストグラム⑨
4.この状態でA1からA10を選択す
ると、下のように選択したセルが入力される。ここで、入力枠の右の「↓」をクリック。
正規分布②
55
• 正規分布から乱数を発生するのに「逆関数法」を使う。
0
1
x
まずRndで0から1の一様乱数を得る。確率は0から1の間の数字である。
累積確率分布関数はある分布に従う値xに対して、確率を返す。
逆に0から1の値を確率と見て、それに対応するxを導くこともできる。
この方法である分布の乱数を発生させる方法を逆関数法と呼ぶ。
正規分布③
56
Sub SeikiBunpu()Dim mu As DoubleDim sigma As DoubleDim x As Doublemu = 100#sigma = 10#x = WorksheetFunction.Norm_Inv(Rnd, mu, sigma)MsgBox (x)
End Sub
ここでmuは正規分布の平均。
Norm.Inv関数はワークシート上で累積
分布関数の逆関数となっている。ここでは、WorksheetFunctionとした上で、「.」を「_」に置き換える必要がある。()の中に、0 ~ 1の一様乱数、平均、標準偏差の順に入力。
ここでsigmaは正規分布の標準偏差。
正規分布④
• これで計算は動く。しかし、ときにRndの値が極めて0あるいは1に近いときに、
WorksheetFunction.Norm_Inv(Rnd, mu, sigma)でうまく計算が行われないことがある。
• これを避けるにはRndが極端に0や1に近い値になるのを防ぐために、Rndの代わりに
(1‐2*1.E‐16)*Rnd+1E‐16 などとすることがある。
• 「1E‐16」は小さい値で計算に支障のない値なら、他の値でもよい。このテキストでは、コードの簡明さを重視してこのテクニックは使用しない。
57
t分布①
59
• モンテカルロ計算でタイプAの不確かさ評価をするときに使う分布。(通常の不確かさ評価とは使い方が違うので注意。詳しくは後述。)
= 1 = 3 = 5
は自由度と呼ばれる変数。これを決めるとt分布の形が決まる。
t分布③
60
Sub TBunpu()Dim nu As LongDim x As Doublenu = 4x = WorksheetFunction.T_Inv(Rnd, nu)MsgBox (x)
End Subここでも、逆関数法を使う。T.Inv関数
はワークシート上で累積分布関数の逆関数となっている。()の中に0 ~ 1の一様乱数、自由度の順に入力。
nuは自由度
三角分布③
63
Sub SankakuBunpu()Dim a As DoubleDim b As DoubleDim x As Doublea = ‐100b = 100x = (b‐a)/2*(Rnd‐Rnd)+(b+a)/2MsgBox (x)
End Sub
ここでaは三角分布の最小値。
ここでbは三角分布の最大値。
「(b‐a)/2*(Rnd‐Rnd)」とすることで、平均0、全幅(b ‒ a)の三角分布となる。それに平均値の(b+a)/2を足す。
U字分布②
65
Sub UjiBunpu()Dim a As DoubleDim b As DoubleDim x As Doublea = ‐100b = 100p = WorksheetFunciton.Pi()x = (b‐a)/2*sin(2*p*Rnd)+(b+a)/2MsgBox (x)
End Sub
ここでaとbはU字分布の最小値と最大値。
pには = 3.141592…を代入しておく。
pにを代入した上で、「(b‐a)/2*sin(2*p*Rnd)」とすると、平均0、全幅(b ‒ a)のU字分布となる。それに平均値の(b+a)/2を足す。
パーセンタイル点②
67
Sub SeikiBunpuPercentile()Dim i As LongDim x(1 To 1000) As DoubleDim y As Doublemu = 0#sigma = 1#For i = 1 To 1000x(i) = WorksheetFunction.Norm_Inv(Rnd, mu, sigma)
Nexty = WorksheetFunction.Percentile(x, 0.975)MsgBox (y)
End Sub
Percentile関数に(配列、確率)を入力
することで、下側のパーセント点を求めることができる。上側100a %点は下側 (100 – 100a) %パーセントである。
モンテカルロ計算では
1. 感度係数は計算しない。(→ 感度係数が計算できないときにモンテカルロ計算は便利)
2. 中心極限定理は使わない。(→ 中心極限定理が使えないときにモンテカルロ計算は便利)
3. タイプAの不確かさの計算が違う。
71
• JCGM 101では、ベイズ統計学という学
問体系に基づいて、不確かさを計算することが基本になっている。
• JCGM 100の従来的な不確かさ評価手法とはタイプAの不確かさに対する考え方が違う。
• t分布がタイプAの不確かさに現れるので、
ちょっと面倒に思える一方で、「有効自由度」を計算する必要がなくなる。
ある測定値が正規分布に従っている。その平均についても、標準偏差についても事前の情報はないものとする。4回の測定の結果は、9、12 、11、10であった。平均の値の事後分布はどのように与えられるか。
=_____
= ______?
?72
正規分布の平均の推定:正規分布から得た平均の事後確率密度は、繰り返し数ー1の自由度のt 分布の値に以下をかけて、平均値を足した値の確率密度である。
残差平方和
繰り返し数×(繰り返し数-1)
フリークエンティスト統計における平均値の標準偏差
73
10.5
平均値の標準偏差を計算すると0.65となる。JCGM 101では、ベイズ統計学に基づき、は「自由度4のt分布」の値に0.65をかけ、平均値10.5を足した分布を持つと与える。
の事後確率密度
74
詳細は、https://staff.aist.go.jp/k.shirono/downloadBayes.htmlを参照
タイプAの不確かさ評価
75
Sub TypeAUncertainty()Dim i As LongDim n1 As LongDim rx1(1 To 4) As DoubleDim mrx1 As DoubleDim srx1 As DoubleDim x1(1 To 1000) As Doublen1 = 4rx1(1) = 9rx1(2) = 12rx1(3) = 11rx1(4) = 10
(次のページへ続く)
rxが実験データの配列。
xにモンテカルロ法で得たサンプルを記録する。
76
mrx1 = WorksheetFunction.Average(rx1) srx1 = WorksheetFunction.StDev_S(rx1) / n1 ^ 0.5
For i = 1 To 1000x1(i) = mrx1 + srx1 *WorksheetFunction.T_Inv(Rnd, n1 ‐ 1)
Next
MsgBox (WorksheetFunction.StDev_S(x1) )End Sub
自由度4(= n1 ‐ 1)のt分布の値に計算した平均値の標準偏差の値(s1)をかけて、平均値(m)を足している。
平均と標準偏差はここではワークシート関数を用いて計算する。
77
ある球の密度を知るのに、直径の測定と質量の測定をする。半径の値rは平均1.0 cm、標準偏差0.1 cmの正規分布に従って測定されたとする。質量の値mは平均10.0 g、標準偏差0.1 gの正規分布に従うとする。密度の値、標準不確かさと95 %の信頼の水準の区間を求めよ。(密度の値は以下の式で値は2.4 g∙cm−3。 )
33 4
3
34 r
m
r
m
g∙cm–3
分布の様子を調べるために、ヒストグラムを作成する。
Sub Density1Histgram()Dim i As LongDim mu1 As DoubleDim sigma1 As DoubleDim x1(1 To 1000000) As DoubleDim mu2 As DoubleDim sigma2 As DoubleDim x2(1 To 1000000) As DoubleDim p As DoubleDim rho(1 To 1000000) As DoubleDim mrho As DoubleDim srho As DoubleDim nCount As VariantDim y(1 To 29) As Double
(次スライドに続く) 78
x1に半径の値を入れる。mu1、sigma1はそれぞれ正規分布の平均と標準偏差。
x2に質量の値を入れる。mu2、sigma2はそれぞれ正規分布の平均と標準偏差。
rhoに密度の値を入れる。mrhoとsrhoは結果として得られる分布の平均と標準偏差。
yはヒストグラムの級の上限値。nCountにヒストグラムのデータを出力する。
mu1 = 1#sigma1 = 0.1For i = 1 To 1000000x1(i) = WorksheetFunction.Norm_Inv(Rnd, mu1, sigma1)
Nextmu2 = 10#sigma2 = 0.1For i = 1 To 1000000x2(i) = WorksheetFunction.Norm_Inv(Rnd, mu2, sigma2)
Nextp = WorksheetFunction.pi()For i = 1 To 1000000rho(i) = (3 / (4 * p)) * x2(i) / x1(i) ^ 3
Next (次スライドに続く) 79
rhoに密度の値を入れる。
x1に半径の値を入れる。mu1、sigma1はそれぞれ正規分布の平均と標準偏差。
x2に質量の値を入れる。
pに = 3.14…を記録する。
mrho = WorksheetFunction.Average(rho)srho = WorksheetFunction.StDev_S(rho)For i = 1 To 29y(i) = (srho / 3) * (i ‐ 15) + mrho
NextnCount = WorksheetFunction.Frequency(rho, y)For i = 2 To 29Cells(i, 1).Value = y(i) ‐ (srho / 6)Cells(i, 2).Value = nCount(i, 1)
NextEnd Sub
80
一つの級の幅が(標準偏差/3) = (srho/3)である。yには階級の上限値
が記録されているので、そこから半幅である(srho/6)を減じることで、階級の中心値を計算している。
ヒストグラムは平均値を中心に±5×標準偏差の範囲を30階級に区切って描く。一つの級の幅が(標準偏差/3) = (srho/3)となる。
気を付けたいこと
• 出力の平均値(2.5 g∙cm–3)は、入力の平均値を式に代入して得た値(2.4 g∙cm–3)と違う。
• 95 %の信頼の水準の区間の取り方はいくらでもある。(0 ~ 95 %点でも、2.5 ~ 97.5 %点でも、5 ~ 100 %点でも、信頼の水準は95 %。)
81 3g/cm
出現回数
平均値の違い
• 多くの場合、モンテカルロ計算で求めた出力の平均値と、入力の平均値をモデル式に当てはめた値は異なる。
• JCGM 101では、モンテカルロ計算で求めた出
力の平均値を、測定量の値とすることを定めることを基本としている。
82
包含区間の選択
• 2章で例に見せた2.5 %点と97.5 %点を両端に持つ区間も95 %の信頼の水準の区間である。
• JCGM 101では「最短包含区間」を提唱している。これは、無数の包含区間の中で最短のものを選ぶということである。
• ここでは、0 %~95 %点の区間から、5 %~100 %点の区間を、0.1 %刻みで変化させながら、最短となる区間を探索する方法を紹介する。(他のやり方もありうる。)
83
Sub Density1Coverage()Dim i As LongDim mu1 As DoubleDim sigma1 As DoubleDim x1(1 To 1000000) As DoubleDim mu2 As DoubleDim sigma2 As DoubleDim x2(1 To 1000000) As DoubleDim p As DoubleDim rho(1 To 1000000) As DoubleDim rhoi As DoubleDim rhoe As DoubleDim d As DoubleDim dmin As DoubleDim rhomin As DoubleDim rhomax As Double
(次スライドに続く)84
mu1 = 1#sigma1 = 0.1For i = 1 To 1000000x1(i) = WorksheetFunction.Norm_Inv(Rnd, mu1, sigma1)
Nextmu2 = 10#sigma2 = 0.1For i = 1 To 1000000x2(i) = WorksheetFunction.Norm_Inv(Rnd, mu2, sigma2)
Nextp = WorksheetFunction.pi()For i = 1 To 1000000rho(i) = (3 / (4 * p)) * x2(i) / x1(i) ^ 3
Next(次スライドに続く)
85
ここまでは同じ。
rhomin = WorksheetFunction.Percentile(rho, 0#)rhomax = WorksheetFunction.Percentile(rho, 0.95)dmin = rhomax ‐ rhominFor i = 1 To 50di = 0.001 * irhoi = WorksheetFunction.Percentile(rho, 0# + di)rhoe = WorksheetFunction.Percentile(rho, 0.95 + di)d = rhoe – rhoiIf (d < dmin) Thendmin = drhomin = rhoirhomax = rhoe
End IfNextCells(1, 3).Value = rhominCells(2, 3).Value = rhomax
End Sub86
最後にrhomin、rhomaxに記録sれて
いるのが最短区間の上限値と下限値である。
最初の候補として、(0, 95) %点からな
る区間を考える。その下限と上限をrhomin、rhomaxに入れる。dminはその区間の幅。
0.1 %ずつ区間をずらしながら、包含区間の下限値rhoiと上限値rhoe、ならびにその区間の幅dを計算している。
もし、dが候補となっている最短区間の幅dminより小さかったら、新しい区間を最短区間の候補とし、rhomin、rhomax、dminを更新する。
89
ある球の密度を知るのに、直径の測定と質量の測定をする。半径の値rは平均1.0 cm、標準偏差0.1 cmの正規分布に従って測定されたとする。質量を5回測定し、(10.3, 10.1, 10.0, 9.9, 9.7) gという結果を得た。質量の値mの決定に繰り返し以外の不確かさはないものとする。密度の値、標準不確かさ、95 %の信頼の水準の最短区間を求め、ヒストグラムを作成せよ。
33 4
3
34 r
m
r
m
g∙cm–3
Sub Density_Enshu()Dim i As LongDim mu1 As DoubleDim sigma1 As DoubleDim x1(1 To 1000000) As DoubleDim n2 As LongDim rx2(1 To 5) As DoubleDim rx2m As DoubleDim rx2s As DoubleDim x2(1 To 1000000) As DoubleDim pi As DoubleDim rho(1 To 1000000) As Double
(次スライドに続く)
90
Dim mrho As DoubleDim srho As DoubleDim nCount As VariantDim y(1 To 29) As Double Dim rhoi As DoubleDim rhoe As DoubleDim d As DoubleDim dmin As DoubleDim rhomin As DoubleDim rhomax As Double
(次スライドに続く)
91
mu1 = 1#sigma1 = 0.1For i = 1 To 1000000x1(i) = WorksheetFunction.Norm_Inv(Rnd, mu1, sigma1)
Next
(以下省略)
End Sub
92
プログラミング環境①• エクセルVBAの⻑所
• データの管理をエクセルできる。• 操作性という観点で親しみやすい。
• エクセルVBAの短所• コーディングが面倒である。• 計算が遅い。
個人的な好みの問題が大きいと思う。他のプログラミング環境も紹介しておく。
プログラミング環境②エクセル以外のプログラミング環境(1):
• R:統計計算とグラフィックスのための無料のソフトウェア環境。
• The R Project for Statistical Computing (https://www.r‐project.org/)
• ダウンロードサイトへのリンクあり。• 日本語の解説も充実している。
プログラミング環境③エクセルVBA以外のプログラミング環境(2):
• NIST Uncertainty Machine:米国の国家計量機関(NIST)が提供している無料のモンテカルロ法に特化した計算環境。(Javaを使用)
• NIST Uncertainty Machine (https://uncertainty.nist.gov/)
• プログラミングの知識が全くない人にはこちらの方がとっつきやすいかも知れない。