Нормальное и равномерное распределение в JavaScript (Math.Random)
Здравствуйте, ув. форумчане.
Насколько я знаю, в JS Math.Random() генерирует числа по равномерному распределению (хотя опять же, разные источники говорят разное), какие манипуляции нужно проделать, чтобы перейти к нормальному распределению чисел? Необходимо для построения графика процесса авторегрессии в моделировании случайных процессов стохастических объектов :) google.load("visualization", "1", {packages:["corechart"]}); // google.setOnLoadCallback(drawChart); function drawChart() { document.getElementById("chart_div").style.display = ""; var N = document.getElementById("inN").value; var a1 = document.getElementById("inA1").value; var arrRand = []; var arrRandNotSrednee = []; var srednee = 0; var disperciy = 0; for ( var i = 0; i < N; ++i ){ arrRand[i] = Math.random(); srednee += arrRand[i]; } srednee /= N; for ( var i = 0; i < N; ++i ){ arrRandNotSrednee[i] = arrRand[i] - srednee; disperciy += arrRandNotSrednee[i] * arrRandNotSrednee[i]; } disperciy /= N; var otklonenie = Math.sqrt(disperciy); var X = []; for ( var i = 0; i < N; ++i ){ X[i] = arrRandNotSrednee[i] / otklonenie; } var Y = []; Y[0] = X[0]; for ( var i = 1; i < N; ++i ){ Y[i] = a1 * Y[i-1] + X[i]; } var arr = []; arr[0] = ['t', 'y(t)']; for ( var i = 1; i <= N; ++i ){ arr[i] = [i, Y[i-1]]; } var data = google.visualization.arrayToDataTable(arr); var chart = new google.visualization.LineChart(document.getElementById('chart_div')); chart.draw(data); } P.S. График строится на библиотеке Google Charts, некоторые данные берутся из формы, но все это не имеет отношения к вопросу. Ошибка в скрипте именно в math.random(). Как сделать нормальное распределение? Прошу помощи :help: Если делать по методу Бокса-Мюллера, будет правильно? Как-то так: function GaussRand() { var s = 2*Math.random()-1; var m = 2*Math.random()-1; var u = s*s + m*m; if(u == 0 || u > 1) return GaussRand(); var k = Math.sqrt(-2*Math.log(u)/u); return s*m; } |
Часовой пояс GMT +3, время: 15:00. |