アルゴリズム事典より: Weibull分布
[改訂新版]C言語による標準アルゴリズム事典 (Software Technology)
- 作者: 奥村晴彦
- 出版社/メーカー: 技術評論社
- 発売日: 2018/04/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
専門学校時代に手元にあると良いよと言われ、持ってはいたものの、あまり開いたことがありませんでした。
今日なんとなく開き、アルゴリズムを学びつつ、Kotlinで書いたらどう書くかというのをブログに書くのも面白いのではと思い、やってみました。
改訂新版を先ほど購入したので、内容自体は改訂新版を元にしています。
Weibull分布
p.429
概要
結論: 理屈分かってないけど、そういう分布の乱数の作り方
ということは分かった
コード読解
本を元にC++にしたもの
#include <iostream> #include <cmath> using namespace std; double randWeibull(double alpha) { double randomValue = rand() / (double)RAND_MAX; return pow(-log(1-randomValue), 1/alpha); } int main() { cout << randWeibull(0.2); return 0; }
https://www.onlinegdb.com/online_c++_compiler
コードのrandomValue
が、F(x)のx
のところで、購入randomValueヶ月以内
に当たる
alpha
が〜故障型
を決めるパラメータ
引数がalpha
だから、
randWeibull関数
は任意の故障型
の購入経過月数の一様分布(=randomValue)
において最初に故障する確率が求められる
という認識で合っているのだろうか🤔
Kotlinで書く
Kotlin v1.3-RC
import kotlin.math.* import kotlin.random.* fun randWeibull(alpha: Double): Double { val randomValue = Random(10).nextDouble(1.0) return -ln(1-randomValue).pow(1/alpha) } fun main(args: Array<String>) { print(randWeibull(1.3)) }
Random
Kotlin 1.3でRandomクラスが出来る予定だそう
Javaと似たものらしい
最初にseedとなる値(コードでは10
の定数)を渡して実体を生成してから使う
next〜関数
の引数が範囲の上限(bound)で、0〜boundを除いた値の間の乱数が返される
(ミリ秒でも渡せないかと思ったが、Kotlinだけでの時間の取得方法が分からなかったので、ひとまず定数を渡した)
ln関数
ln - Kotlin Programming Language
自然対数(log e)を使う時はlog関数
でなくln関数
を使う
the natural logarithmより来ていると思われる
pow関数
pow - Kotlin Programming Language
Double, Floatから生えている、べき乗を返す関数
感想
分布の乱数、全然馴染みなかったけど、多少理解出来た気はする。
数式は全然分からないけど、こういうコードを書いたらこの数式と同じ意味になるのか、というのが分かるの面白い。これは面白い題材を見つけた気がする。
アルゴリズムかなり苦手なので、強化も兼ねて続けようと思いました。
認識違いあったらそっとコメントください🙏
参考文献
一様分布の平均,分散,特性関数など | 高校数学の美しい物語
C言語による乱数生成
ガンマ関数 - Wikipedia
数学記号exp,ln,lgの意味 | 高校数学の美しい物語