Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.06.2014, 22:02
Новичок на форуме
Отправить личное сообщение для Baldin Посмотреть профиль Найти все сообщения от Baldin
 
Регистрация: 16.06.2014
Сообщений: 1

Нормальное и равномерное распределение в 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(). Как сделать нормальное распределение? Прошу помощи

Если делать по методу Бокса-Мюллера, будет правильно?
Как-то так:
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; 
}

Последний раз редактировалось Baldin, 16.06.2014 в 22:18. Причина: Добавлено
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Интерпретатор Java на JS kobezzza Оффтопик 24 11.10.2012 18:32
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34