Форум: "Потрепаться";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизСлучайные числа Найти похожие ветки
← →
Def_E (2004-03-28 22:15) [0]Необходимо сгенерировать достаточно большое число случайных чисел, но так, чтобы эти числа соответствовали заданному распределению.
Собственно задача у меня - множество скоростей молекул отвечающих распределению Максвела. Сейчас делаю так:
Function RandomSpeed(MaxSpeed:integer):Real;
var Probability:real;
begin
Randomize;
While true do
begin
Result:=MaxSpeed-Random*MaxSpeed*2; //Получаем случайное число от -MaxSpeed до MaxSpeed
Probability:=exp(-(Result*Result)/MaxSpeed); //Вычисляем вероятность выпадания этого числа
if Random<Probability then break; //Если некое случайно число попадает в интервал вероятности, то выходим из цикла
end;
end;
Но хотелось бы более оптимальный алгоритм.
← →
TButton © (2004-03-28 22:19) [1]result:=(random-0.5)*2*maxspeed;
← →
Def_E (2004-03-29 16:40) [2]>TButton © (28.03.04 22:19) [1]
Ну и где здесь распределение?
← →
Плохиш (2004-03-29 16:54) [3]
> Необходимо сгенерировать достаточно большое число случайных
> чисел, но так, чтобы эти числа соответствовали заданному
> распределению.
Ошень оригинально :-)
PS. Может в орешник?
← →
Рамиль © (2004-03-29 17:01) [4]Посмотри теорию вероятности, там есть такие алгоритмы. Вернее должна быть функция, которая из равномерного распределения получает нужное.
> Плохиш (29.03.04 16:54) [3]
Причем тут орешник?
← →
Плохиш (2004-03-29 17:05) [5]>Рамиль © (29.03.04 17:01) [4]
А что это за случайные числа соответствуючие заданному распределению? Вы уж определитесь или случайные или распределение :-)
← →
Sergo © (2004-03-29 17:09) [6]
> Плохиш (29.03.04 17:05) [5]
Ну вообще то все случайные числа (какие они бы не были случайными) распределяются по определенным законам. Если бы все заранее было известно, то зачем бы тогда была нужна такая наука как статистика?
← →
Думкин © (2004-03-29 17:17) [7]
> [5] Плохиш (29.03.04 17:05)
Тебе в Орешник точно, почитал бы чего?
← →
Brahman © (2004-03-29 17:19) [8]>Плохиш (29.03.04 16:54)
>Ошень оригинально :-)
>PS. Может в орешник?
Ваше замечание - уж точно, туда.
Любой самодостаточный программный генератор случайных чисел
имеет конечный период повторения случайной последовательности, а значит требование "достаточно большое число.." вполне законно.
Распределение случайных чисел зависит, собственно, от свойств такого генератора, в том числе, заданных свойств и, таким образом, это требование тоже логично и законно.
Так при чем здесь орешник ?
http://www.munic.kurgan.ru/conf1/glubokii.html
http://www.omsu.omskreg.ru/vestnik/articles/y1999-i1/a005/article.html
http://conf.sssu.ru/phorums/read.php?f=25&i=56&t=1
← →
Brahman © (2004-03-29 17:21) [9]Резюме:
Вам, Плохиш, еще очень долго только слушать надо, а отвечать -ну наступит и такое время, наверное:))
← →
Brahman © (2004-03-29 17:26) [10]Система из N-твердых шаров, находящаяся в замкнутом объеме, имеющая некоторый случайный вектор скоростей с равномерным распеределением с течением времени приобретает вектор скоростей, имеющий распределение Максвелла.
Вот, собственно и алгоритм:))
← →
TButton © (2004-03-29 17:30) [11]>Ну и где здесь распределение?
это не распределение, это более оптимальный алгоритм получения случайного числа от -MaxSpeed до +MaxSpeed
← →
Def_E (2004-03-29 17:30) [12]>Brahman © (29.03.04 17:19) [8]
Спасибо за ссылки.
Теперь на пару дней чтиво обеспеченно.. ;-)
← →
Юрий Зотов © (2004-03-29 17:33) [13]> Плохиш (29.03.04 16:54) [3]
Эх, Мальчиш-Кибальчиш... в очень многих вещах ты еще так мало знаешь... но думаешь, что знаешь уже так много...
> Def_E (28.03.04 22:15)
Как правило, ГСЧ, встроенные в стандартные языковые библиотеки (в том числе, и Random), работают по равномерному закону. Это сделано потому, что равномерное распределение является базовым, а другие могут быть получены из него с помощью известных формул и алгоритмов - вот эти формулы и алгоритмы Вам и нужны.
Они есть во многих книгах, но сейчас таких книг под рукой нет и поэтому дать готовое решение не могу. Поиск по Гуглю словосочетания "равномерное распределение пересчет Максвелл" дал такую ссылку - http://vacsa.nm.ru/part1.pdf. В этом документе приводится готовая функция на Паскале - посмотрите и если это не то, используйте другие поисковики.
← →
Def_E (2004-03-29 17:34) [14]>это не распределение, это более оптимальный алгоритм получения случайного числа от -MaxSpeed до +MaxSpeed
А, да, понял...
>All
Что скажете по поводу приведенного алгоритма? Он в общем-то работает, но я так думаю, что при достаточно узком пике время поиска СИЛЬНО увеличится.
← →
Юрий Зотов © (2004-03-29 17:38) [15]Вот процедура генерации трех компонент скорости v1, v2, v3 по распределению Максвелла (взято из http://vacsa.nm.ru/part1.pdf)
Procedure GetMaxwellDistr(Var V1, V2, V3, Betta: Extended);
Var
FsV: Extended;
Label
V1R;
Label
V2R;
Label
V3R;
begin
V1R:
V1:=(-10+20*Random)/Betta;
FsV:=Exp(-V1*V1*Betta*Betta);
if (FsV<Random) then goto V1R;
V2R:
V2:=(-10+20*Random)/Betta;
FsV:=Exp(-V2*V2*Betta*Betta);
if (FsV<Random) then goto V2R;
V3R:
V3:=(-10+20*Random)/Betta;
FsV:=Exp(-V3*V3*Betta*Betta);
if (FsV<Random) then goto V3R;
end;
← →
Def_E (2004-03-29 17:41) [16]>Юрий Зотов © (29.03.04 17:33)
>http://vacsa.nm.ru/part1.pdf
Благодарю, как раз то что мне нужно.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.034 c