Как получить случайное число от 0 до 1 (норм.)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [18.97.9.174] |
|
|
правила раздела Алгоритмы

| Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Как получить случайное число от 0 до 1 (норм.)
|
Сообщ.
#1
,
|
|
|
|
Как получить случайное число от 0 до 1 с нормальным законом распределения?
|
|
Сообщ.
#2
,
|
|
|
|
енто невозможно, ибо нормальное распределение от минус бесконечности до плюс бесконечности. если надо равномерное, то практически во всех языках есь функции вроде random, которые возвращают число, равномерно распределённое в интервале от 0 до 1. кстати был ещё такой топик: http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=algorithm;action=display;num=1048463630.
|
|
Сообщ.
#3
,
|
|
|
|
Сам Random:
![]() ![]() <br>unsigned long R0=0xF8A6F4D,...<br>...<br>double Random(void){<br> long Bit1=(R0>>7)&0xF,<br> Bit2=(R0>>19)&0xF;<br> R0<<=4;<br> R0|=(Bit1^Bit2);<br> return R0*1./0xFFFFFFFF;<br>}<br>Красивое равномерное распределение - только сегодня лабу эту сдавала...<br> Гауссово распределение (оно же "Нормальное"): ![]() ![]() <br> double tmp=0;<br> for(int i=0;i<6;i++)tmp+=Random(Alg);<br> tmp-=3;tmp*=1.4142*sqrt(Dx);tmp+=Mx;<br> return tmp;<br> Dx & Mx - дисперсия и М.О. заданы изначально<br> Гамма - распределение: ![]() ![]() <br> tmp=1;<br> for(i=0;i<GammaN;i++)tmp*=Random(Alg);<br> return -logl(tmp)/L;<br>L, GammaN тоже заданы изначально<br> |
|
Сообщ.
#4
,
|
|
|
|
2Волченка
вопервых, говоря в таком ключе о гауссовом распределении, надо помнить, что полученное с помощью такой функции распределение не совсем гауссово и приближается к нему с увеличением количества итераций. кстати как вычислить нормировочный множитель для заданного колва итераций? самому интегрировать лень. |
|
Сообщ.
#5
,
|
|
|
|
Цитата wormball, 17.04.03, 16:00:49 енто невозможно, ибо нормальное распределение от минус бесконечности до плюс бесконечности. если надо равномерное, то практически во всех языках есь функции вроде random, которые возвращают число, равномерно распределённое в интервале от 0 до 1. кстати был ещё такой топик: http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=algorithm;action=display;num=1048463630. конечно а ничего что вероятность отклонится от мат. ожидания на более чем десять дисперсий незначима все возможно если правильно на это посмотреть кроме разве теоремы Геделя о неразрешимости )) |
|
Сообщ.
#6
,
|
|
|
|
Цитата esperanto, 27.04.03, 09:32:14 конечно а ничего что вероятность отклонится от мат. ожидания на более чем десять дисперсий незначима формально, это правда. но имхо человек, задававший вопрос в такой форме просто не вполне понимал что есть нормальное распределение. |
|
Сообщ.
#7
,
|
|
|
|
Народ помогите! я не программист, а строитель.....как в VBA задать гауссовское распределение (неравномерное распределение), то есть скорее всего есть функция аналогичная RND(x) (равномерное распределение).
И как оно действует Гауссовское распределение в ВБА |
|
Сообщ.
#8
,
|
|
|
|
http://alglib.sources.ru/statistics/randomnumbers.php
|
|
Сообщ.
#9
,
|
|
|
|
по конкретнее пожалуйста? напишите функцию
|
|
Сообщ.
#10
,
|
|
|
|
RndNormal - Гаусовское оноже нормальное распределение.
|
|
Сообщ.
#11
,
|
|
|
|
пасиб!
|
|
Сообщ.
#12
,
|
|
|
|
чет не выходит(((
короче вот пример: dim N as double N=20 N1=(rnd*0.9)+1.1 N2=N*N1 вот надо то же самое ...только через распределение Гаусса |
|
Сообщ.
#13
,
|
|
|
|
Rndnoral это на каком языке??
мне надо на VBA ...имя функции Добавлено Rndnormal* |
|
Сообщ.
#14
,
|
|
|
|
что специалистов нету что ли? подскажите одну функцию
|
|
Сообщ.
#15
,
|
|
|
|
BountyKnight
Тебе нужна функция, возвращающая (псевдо)случайное число с нормальным распределением? В посте #8 есть ссылка. Перейди по ней, там внизу есть ссылки на несколько реализаций, среди них имеется Visual Basic. С минимальными переделками эти функции должны работать и в VBA. В посте #10 тебе даже указали нужную функцию - RandNormal. |