確率

ラプラス変換による確率の古典的な定義

さいころを投げたとき、偶数の目が出る確率

x  =  Range[6]

a  =  Select[x, EvenQ]

Length[a]/Length[x]

b =  Select[x, OddQ]

相対頻度の極限としての確率

例　サイコロを１００回投げて、目の出方の頻度を求める。

events  =  Table[Random[Integer, {1, 6}], {k, 100}]

pip[i_]  :=  Select[events, Equal[#, i] &]

Length[pip[1]]

frequency  =  Table[Length[pip[i]]/100, {i, 6}] // N

<< Graphics`Graphics`

BarChart[frequency];

サイコロを振る回数 n について関数 Dice を定義する

Dice[n_Integer]  :=  
      Block[{events, pip, frequency}, 
        events  =  Table[Random[Integer, {1, 6}], {k, n}]; 
        pip[i_]  :=  Select[events, Equal[#, i] &]; 
        frequency  =  Table[Length[pip[i]]/100, {i, 6}] // N; 
        Print[frequency]; BarChart[frequency];]

Dice[1000]

Dice[1000000]

練習問題

任意の素数を４で割った余りが１になる確率

PrimeModFour[n_Integer]  :=  
      Block[{datap, one, frequency}, datap  =  Table[Prime[k], {k, n}]; 
        one  :=  Select[datap, Equal[Mod[#, 4], 1] &]; 
        frequency  =  Length[one]/n  // N; Print[frequency];]

PrimeModFour[100]

PrimeModFour[1000]

PrimeModFour[10000]

公理的確率論

練習問題

与えられたリストが確率であるかどうかを判定する関数

ProbabilityQ[a_List]  :=  
      Block[{n,  p1,  p2,  p3}, n  =  Length[a]; 
        p1  =  Apply[And,  Map[#  >=  0 &,  a]]; 
        p2  =  Apply[And,  Map[#  <=  1 &,  a]]; 
        p3  =  Apply[Plus,  a]  ==  1;  And[p1,  p2,  p3]]

たとえば

ProbabilityQ[{1/2,  1/3,  1/4,  1/5}]

Block の中の条件を満たしていない

ProbabilityQ[{1/2,  1/3,  1/6}]

n  =  Random[Integer,  100] ;ProbabilityQ[
      Table[1/n,  {k,  n}]]

And[True,  True,  False]

Map[#  >=  0 &,  a]

Map[#^2 &, {1, 2, 3, 5}]

確率の計算

例題　２０面体のサイコロを振ったときの次の確率

奇数の目が出る

n  =  20;  pip  =  Range[n];  
      a  =  Select[pip,  OddQ];  Length[a]/n

７の倍数の目が出る

b  =  Select[pip,  Mod[#,  7] == 0 &];  
    Length[b]/n

素数の目が出る

c  =  Select[pip,  PrimeQ];  Length[c]/n

１２０の約数の目が出る

d  =  Select[pip,  Mod[120,  #] == 0 &];  
    Length[d]/n

例題　1から1000までの数が記入された抽選券の入っている箱から1枚の券を取り出す確率

６または８の倍数の券である確率

n  =  1000;  lot  =  Range[n];  
    a =  Select[
        lot,  (Mod[#,  6]  ==  0  ||  
              Mod[#,  8]  ==   0) &]; Length[a] /n

n  =  1000;  lot  =  Range[n];  
    a =  Select[lot, 
        Or [Mod[#,  6]  ==  0 ,  
            Mod[#,  8]  ==   0] &]; Length[a] /n

数字に７を含む券である確率

data  =  
        Flatten[Table[{x,  y,  z}, {x,  0, 9}, {y,  0, 9}, {z,  0, 9}], 
          2];

data // Short

Short[data, 3]

sample = 
        Table[{x,  y,  z}, {x,  0, 9}, {y,  0, 9}, {z,  0, 
            9}];

Short[sample, 10]

b  =  Select[data,  MemberQ[#, 7] & ];  Length[b]/n

同じ数が含まれている券である確率

Clear[Digit]

Digit[{0}]  :=  {1, 0, 0, 0}

Digit[l_List]  :=  
      If[l[[1]]  ==  0,  Digit[Drop[l, 1]], l]

Digit[{0, 3, 0}]

newdata  =  Map[Digit, data];

newdata // Short

c  =  
        Select[newdata,  (Length[Union[#]]  <  
                Length[#]) &];

Length[c]/n

今日のコマンド

?EvenQ

?OddQ

?Random

?Map

?||

?Flatten

?MemberQ