Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.48 MB
Время: 0.034 c
7-1076865401
Тупикин Илья
2004-02-15 20:16
2004.04.18
Работа с реестром


1-1080721853
DmitryNekl
2004-03-31 12:30
2004.04.18
Как сделать невидимым окно?


3-1080130205
Имя
2004-03-24 15:10
2004.04.18
GIF в Paradox


1-1080811102
Mig
2004-04-01 13:18
2004.04.18
Активация уже запущенной копии приложения при запуске новой копии


1-1080650227
КомофОнСамый
2004-03-30 16:37
2004.04.18
TMemo - как разбить на слова.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский