function discreteSampling(cdf) { var x = Math.random(); for (var i in cdf) if (x < cdf[i]) return i; return -1; // should never runs here, assuming last element in cdf is 1 } var targetPdf = [0.12, 0.4, 0.4, 0.07, 0.01]; var targetCdf = pdf2cdf(targetPdf); function step() { var bin = discreteSampling(targetCdf); frequency[bin]++; sampleCount++; plotPdf(frequency, sampleCount, 0.4, "Estimated cdf of discreteSampling (n=" + sampleCount + ")"); } var frequency = new Array(targetCdf.length); var sampleCount = 0; for (var i = 0; i < frequency.length; i++) frequency[i] = 0; start("uniformCanvas", step);
Run
Stop