確率について
統計にとって確率は避けて通れない話です。判断が行われるときはデータが手に入る確率に基づいて行われるからです。
統計学入門にはこう書いてあります。
カードのマークの赤、黒を言いあてられるという。(中略)その能力を試した時、52枚中、40枚をあてた、この人は偶然あてたというべきだろうか。ここで問題なのは40という数そのものよりも40の確率論的意味だろう。
ソースコード:https://github.com/saburooo/simple-stat
成果物:https://mysimple-stat.web.app/
階乗計算
階乗とは指定した数字から初めて0になるまで1つずつ引いて出てきた複数の値を一気に掛けていく計算方法です。
複数の集団が一気に並ぶ時に使われ、よく再帰の題材になっているあれです。
factorial : Int -> Int
factorial n =
case n of
0 ->
1
_ ->
n * factorial (n - 1)
これを応用した計算が多い印象です。
順列
与えられた一つ目の数値の階乗計算を1つ目の数値から2つ目の数値引いた値の階乗計算で割ることで求められます。
permutation : Int -> Int -> Int
permutation n m =
factorial n // factorial (n - m)
これを求めることで順番を決めて1つの列にした時のパターンはいくらか求められます。
組み合わせ
組み合わせは順列と違い並び順を考慮しません、計算の仕方は先程の順列の割る数に1つ目の値から2つ目の値を引いた数の階乗を加えるだけです。
combination : Int -> Int -> Int
combination n m =
factorial n // (factorial (n - m) * factorial m)
名前通り、どれくらいの組み合わせがあるのかを調べるときに有効です。
スターリングの公式
本で初めて知ったのですが階乗計算で叩き出す数値によく似た数値を出す方法として知られているみたいですね。これをうまく利用した計算方法を模索していきたいです。
starling:Int -> Float
starling n =
let
loge = logBase Basics.e
in
(toFloat n + 0.5) * ( loge (toFloat n)) - (toFloat n) + 0.5 * loge 2 * Basics.pi
今回はここまで。