オーバーフロー/アンダーフローを 避ける計算アルゴリズムと...
TRANSCRIPT
・今回は2項確率 の計算への応用
「モグラ算術システム」の応用
x n xnCx p q
・倍精度以上の精度を扱える算術システムの上で動く.計算可能な範囲のすべてに応用可能である.
・離散型確率分布の計算への応用
プログラミング言語(C,C++, JAVA, Visual BASIC,
FORTRANその他),Mathematica, Maple 等で実現可能.
直接計算による方法
データセットによる方法
近似式による方法
2項係数の計算
(i)
(ii)
(iii)
( , ) ( ) /( ( ) ( ))n x n x n x c0 mfact0 mfact0 mfact0
( , ) ( ) /( ( ) ( ))n x n x n x c1 mfact1 mfact1 mfact1
( , ) ( ) /( ( ) ( ))n x n x n x c2 mfact2 mfact2 mfact2
x n xp q ベキ乗 の計算
(i) 高速計算による方法
(ii) 対数による方法
( ( ), ( ) , ) ( ( ), ( ) , )M p I p x M q I q n x mpow1 mpow1
( ; , )x n p p1
( 10,0 , ( ), ( ) ( ( ), ( ) )M x I x M p I p mpow mlog10
( ), ( ) ( ( ), ( ) )M n x I n x M q I q mlog10
( ; , )x n p p2
0 1, 1/ 2p p の場合
1/ 2p の場合
(iii) 高速計算による方法
(iv) 対数による方法
( ,1/ 2) 1,0 / ( 2,0 , )n n p1 mpow1
( ,1/ 2) 1,0 /n p2
( 10,0 , ( ), ( ) ( 2,0 ))M n I n mpow mlog10
1/ 2p の場合
( ; , ) ( , ) ( ; , )x n p n x x n p b11 c1 p1
( ; , ) ( , ) ( ; , )x n p n x x n p b12 c1 p2
( ; , ) ( , ) ( ; , )x n p n x x n p b21 c2 p1
( ; , ) ( , ) ( ; , )x n p n x x n p b22 c2 p2
Ⅰ:
Ⅱ:
Ⅲ:
Ⅳ:
の場合
Ⅰ:
Ⅱ:
Ⅲ:
Ⅳ:
1/ 2p
( ; ,1/ 2) ( , ) ( ,1/ 2)x n n x n b11 c1 p1
( ; ,1/ 2) ( , ) ( ,1/ 2)x n n x n b12 c1 p2
( ; ,1/ 2) ( , ) ( ,1/ 2)x n n x n b21 c2 p1
( ; ,1/ 2) ( , ) ( ,1/ 2)x n n x n b22 c2 p2
2項確率関数
方法Ⅰ,Ⅱ,Ⅲ,Ⅳを比較
・相対誤差 ・計算時間
2項確率関数 ・ の場合 ・ の場合
1
2p
1
2p
相対誤差:p=0.2,n=10万
単項確率の相対誤差の比較 n=10万,p=0.2
0.0E+00
5.0E-11
1.0E-10
1.5E-10
2.0E-10
2.5E-1010
000
2000
0
3000
0
4000
0
5000
0
6000
0
7000
0
8000
0
9000
0
x
相対誤差
b11 b12 b21 b22
相対誤差:p=0.2,n=1千万
単項確率の相対誤差の比較 n=1千万,p=0.2
0.0E+001.0E-082.0E-083.0E-084.0E-085.0E-086.0E-08
1000
000
2000
000
3000
000
4000
000
5000
000
6000
000
7000
000
8000
000
9000
000
x
相対誤差
b11 b12 b21 b22
計算時間:p=0.2, n=10万
単項確率の計算時間の比較 n=10万,p=0.2
0.00000
0.01000
0.02000
0.03000
0.04000
100
00
200
00
300
00
400
00
500
00
600
00
700
00
800
00
900
00
x
計算時間(sec)
b11 b12 b21 b22
計算時間:p=0.2,n=1千万
単項確率の計算時間の比較 n=1千万,p=0.2
0.00000
0.00005
0.00010
0.00015
0.00020
1000
000
2000
000
3000
000
4000
000
5000
000
6000
000
7000
000
8000
000
9000
000
x
計算時間(sec)
b11 b12 b21 b22
相対誤差:p=0.5,n=10万
単項確率の相対誤差の比較 n=10万,p=0.5
0.0E+00
5.0E-11
1.0E-10
1.5E-10
2.0E-10
2.5E-1010
000
2000
0
3000
0
4000
0
5000
0
6000
0
7000
0
8000
0
9000
0
x
相対誤差
b11 b12 b21 b22
相対誤差:p=0.5,n=1千万
単項確率の相対誤差の比較 n=1千万,p=0.5
0.0E+001.0E-082.0E-083.0E-084.0E-085.0E-086.0E-08
1000
000
2000
000
3000
000
4000
000
5000
000
6000
000
7000
000
8000
000
9000
000
x
相対誤差
b11 b12 b21 b22
計算時間:p=0.5,n=10万
単項確率の計算時間の比較 n=10万,p=0.5
0.00000
0.01000
0.02000
0.03000
0.04000
100
00
200
00
300
00
400
00
500
00
600
00
700
00
800
00
900
00
x
計算時間(sec)
b11 b12 b21 b22
計算時間:p=0.5,n=1千万
単項確率の計算時間の比較 n=1千万,p=0.5
0.000000.000050.000100.000150.000200.000250.00030
1000
000
2000
000
3000
000
4000
000
5000
000
6000
000
7000
000
8000
000
9000
000
x
計算時間(sec)
b11 b12 b21 b22
・ と に共通して
方法Ⅰがよい.
・計算時間はどの方法も大差がない.
の計算結果 ( ; , )b x n p
方法Ⅰを用いる
1/ 2p 1/ 2p
方法Ⅰ,Ⅱ
0
( ; , ) ( ; , )x
i
B x n p b i n p
の計算
....
省略
...
Lx x0 1Lx 1x
15( ) 10LP X x
( ; , ) (0; , ) (1; , ) ( ; , )B x n p b n p b n p b x n p
ˆ( ; , ) ( 1; , ) ( ; , )LB x n p b x n p b x n p
15( ) 10RP X x
nx
....
省略
...
1x Rx1Rx
( ; , ) (0; , ) (1; , ) ( ; , )B x n p b n p b n p b x n p
ˆ( ; , ) 1 ( ( 1; , ) ( 1; , ))RB x n p b x n p b x n p
を正数とする
2 4
3
1 4( )( ; , ) exp , 1/ 2
2 9
nc ncB nc n p p
n
2 4
3
1 4( )1 ( ; , ) exp , 1/ 2
2 9
nc ncB nc n p p
n
c
改良されたUspenskyの不等式(Kambo&Kotz,1966):
上側限界:
下側限界:
( , )R Rx x n p
( , )L Lx x n p
Bahadur の不等式: X ( , )B n pは に従う
(i) np x n のとき
( 1)( ) ( ; , )
( 1) ( 1)
x qP X x b x n p
x n p
(ii) 0 x np のとき
( 1 )( ) ( ; , )
( 1)
n x pP X x b x n p
n p x
2項分布の性質
(i)
(ii)
( ) ( ), / 2 ; 1/ 2P X x P X n x n x n p
( ) ( ), 0 / 2; 1/ 2P X x P X n x x n p
左側限界の決定:
2
(180log10)
960log103 9 ( )
npqnc
pqn
max{ 1,[ ]}Lx np nc
(i) 改良されたUspenskyによる方法
1/ 2p の場合:
(ii) Bahadur の不等式による方法:
( 1 )( ) ( ; , ) , 0,1, ,
( 1)
n x pg x b x n p x n
n p x
決定方法
(i) 1np 1
(ii) 15[ ] 1 0, ([ ] 1) 10np g np [ ] 1np
(iii) 15[ ] 2, ([ ] 1) 10np g np 2分法
初期値: 0 0( , ) (0,[ ] 1)u v np
15( ) 10g x を満たす最大の を x ' ( , )Bl n p
15
15
1, 1,
( , ) [ ] 1, 2, ([ ] 1) 10 ,
' ( , ), 2, ([ ] 1) 10 .
B
B
np
l n p np np g np
l n p np g np
( , ) max{ 1, ( , ),[ ]}L Bx n p l n p np nc
右側限界の決定: 1/ 2p の場合:
15
15
1, [ ] 1,
( , ) [ ] 1, [ ] 2, ([ ] 1) 10 ,
' ( , ), [ ] 2, ([ ] 1) 10 ,
B
B
n n np
r n p np n np g np
r n p n np g np
( , ) min{ 1, ,[ ]}R Bx n p n r nq nc
1/ 2p の場合:
( , ) ( , ), ( , ) ( , )L R R Lx n p x n q x n p x n q
とおく
( ; , )B x n p の計算法:方法Ⅰ
の場合に の近似値
( ; , ) (0; , ) (1; , ) ( ; , )B x n p b n p b n p b x n p
0 [( 1) ]x n p ( ; , )B x n p
ˆ( ; , ) 0B x n p
[( 1) ], ( , )L Lm n p x x n p
ˆ( ; , )B x n p
(i) 0 Lx x
(ii) Lx x m かつ Lx x n x のとき
1, 1, ,i
n i pi n
i q
確率関数の値の小さい方から加える
2 2 3ˆ( ; , ) ( 1; , )(1
L L LL x x xB x n p b x n p
2 3L Lx x x
モグラたたき法による計算
1 1 1,0L Lx x z w
( ), ( ) / ( ), ( ) M p I p M q I q w
( ( ), ( ) ( ( ), ( ) 1,0 )) / ( ), ( ) )i M n I n M i I i M i I i w
1 ,i w w
1 , 2, ,i i i Li x x z z w
(iii) Lx x m かつ Ln x x x のとき
( , )R Rx x n p を計算
(a) 1Rm x の場合:
1, 0,1, , 1i
i qi n
n i p
とおく
1 2 2 3 2 3 1( 1; , )(1 )x x x x x mB b x n p
2 2 2 3 2 3( 1; , )(1 )R R R R RR x x x x x mB b x n p
1 2ˆ( ; , ) 1 ( )B x n p B B
(b)
( c)
1Rx x m の場合:
2 2 3ˆ( ; , ) 1 ( 1; , )(1
L L Lx x xB x n p b x n p
2 3 1)L L Rx x x
1Rx x の場合: ˆ( ; , ) 1B x n p
[( 1) ]n p x についてはつぎのようにする
ˆ ˆ( ; , ) 1 ( 1; , )B x n p B n x n q
残りの
方法Ⅰと同様な手順で
( ; , )B x n p の計算法:方法Ⅱ
確率関数の大きい方から加える
ˆ( ; , )B x n p を決定する
:方法ⅠⅡの比較
・結果の精度
・計算時間
( ; , )B x n p
確率分布関数
の計算精度の比較(n=1千万)
n p 項数1千万 0.1 x=[ 992473 1000000 ] 7528 9 桁 9 桁1千万 0.2 x=[ 1989959 2000000 ] 10042 9 桁 9 桁1千万 0.3 x=[ 2988493 3000000 ] 11508 11 桁 11 桁1千万 0.4 x=[ 3987696 4000000 ] 12305 9 桁 9 桁1千万 0.5 x=[ 4987441 5000000 ] 12560 10 桁 10 桁1千万 0.6 x=[ 5987692 6000000 ] 12309 10 桁 10 桁1千万 0.7 x=[ 6988485 7000000 ] 11516 9 桁 9 桁1千万 0.8 x=[ 7989946 8000000 ] 10055 9 桁 9 桁1千万 0.9 x=[ 8992456 9000000 ] 7545 9 桁 9 桁
計算省略後 精度 精度
方法Ⅰ 方法Ⅱ
確率分布関数
の計算時間の比較(n=1千万)
n=1千万
0.0000
0.1000
0.2000
0.3000
0.4000
0.5000
0.6000
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
pの値
計算時間(sec)
方法Ⅰ
方法Ⅱ
確率分布関数
の計算精度の比較(n=1億)
n p求める区間 項数1億 0.1 x=[ 9976179 10000000 ] 23822 8 桁 8 桁1億 0.2 x=[ 19968233 20000000 ] 31768 8 桁 8 桁1億 0.3 x=[ 29963604 30000000 ] 36397 9 桁 9 桁1億 0.4 x=[ 39961088 40000000 ] 38913 8 桁 8 桁1億 0.5 x=[ 49960284 50000000 ] 39717 9 桁 9 桁1億 0.6 x=[ 59961084 60000000 ] 38917 8 桁 8 桁1億 0.7 x=[ 69963595 70000000 ] 36406 8 桁 8 桁1億 0.8 x=[ 79968221 80000000 ] 31780 8 桁 8 桁1億 0.9 x=[ 89976162 90000000 ] 23839 8 桁 8 桁
方法Ⅰ 方法Ⅱ
計算省略後 精度 精度
確率分布関数
の計算時間の比較(n=1億)
n=1億の場合
0.00000.20000.40000.60000.8000
1.00001.20001.40001.6000
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
pの値
計算時間(sec)
方法Ⅰ
方法Ⅱ
確率分布関数
の計算精度の比較(n=1億)
n p 項数1億 4/10^7 x=[ 2 40 ] 39 8 桁 8 桁1億 5/10^7 x=[ 6 50 ] 45 8 桁 8 桁1億 6/10^7 x=[ 10 60 ] 51 7 桁 7 桁1億 7/10^7 x=[ 15 70 ] 56 8 桁 8 桁
精度
方法Ⅰ 方法Ⅱ
計算省略後 精度
確率分布関数
の計算時間の比較(n=1億)
n=1億
0.00000.00010.00020.00030.00040.00050.00060.0007
4/10^7 5/10^7 6/10^7 7/10^7
pの値
計算時間(sec)
方法Ⅰ
方法Ⅱ
・計算精度にはあまり差がない.
・計算時間は方法Ⅰがやや短い.
の計算結果
方法Ⅰを採用する
( ; , )B x n p
以上です.