タグ

研究とjavaに関するtachiba1207のブックマーク (3)

  • Java で Zipf 分布な乱数を生成 - ..たれろぐ..

    Zipf 分布な乱数を作るジェネレータを作ってみた。 車輪の再発明なのは重々承知。 たぶんもっとマシなライブラリがどこかにあるだろうけど、頭使わずに使えそうな単機能なのがググってもサクッとでないので作ってみた。 てきとーに作ったので精度は不明。使うときはそこらを十分検討してね。 public class ZipfRandom { private double[] cdf = null; private Random rnd = null; // m 要素数 // k 偏り具合パラメータ Zipf分布の 1/(n^k) の k // rnd 一様乱数生成器を入れる public ZipfRandom(int m, double k, Random rnd) { if (m <= 0) throw new IllegalArgumentException("m にはプラス値を入れれ"); if

    Java で Zipf 分布な乱数を生成 - ..たれろぐ..
  • Zipf分布に従う乱数の生成方法 - NO!と言えるようになりたい

    Zipf分布といえば,べき乗則でおなじみの分布です(http://en.wikipedia.org/wiki/Zipf%27s_law).一方,Zipf-MandelbrotはZipf分布を一般化したものだそうです(http://en.wikipedia.org/wiki/Zipf%E2%80%93Mandelbrot_law). Zipf-MandelbrotのPDFは f(x) = c / (x + b)^aとなるわけですが,今回はより単純な形式である, f(x) = 1 / xというPDFに従う乱数を生成する方法を説明します. まず,CDFを求めてみます.ただし,PDFの積分は ∫f(x) dx = ln(x) + C (Cは積分定数)であるけれど,F(0) = 0なのでCDFは F(x) = ln(x)となります. 次に,F(x)の逆関数をもとめます. y = ln(x) e^y

    Zipf分布に従う乱数の生成方法 - NO!と言えるようになりたい
  • ベキ分布乱数: プログラム: 篠田孝祐

    ベキ分布乱数という単語が存在するかはわからないが,任意の確率密度関数に従った乱数をほしいと思うことはある.今回は,ベキ分布に従った乱数を生成する関数がないかと探したが見当たらなかったので,なんとなく作成した.それっぽいデータは生成できるが,正確とは限らないのであしからず. ガウス分布の用に計算で出力できたら良いのだが,アルゴリズムは見つからない. 指数ベキ分布の密度関数はめんどくさそうなので,Zipf-Mandelbrot lawに従う密度分布を以下の関数で作成. public static double powerlaw(double x, int N, double q, double s) { double h = 0; for(int i = 1; i <= N; i++) { h += 1/Math.pow(i + q, s); } return (1/Math.pow(x +

  • 1