Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2010, 09:28   #1
Athen
 
Аватар для Athen
 
Регистрация: 02.11.2009
Сообщений: 8
Вопрос Генерация чисел нормальным распределением

привет всем!
нужна процедурка на Delphi, генерирующая числа с помощью нормального распределения, если известен интервал [a,b].
читаю кучу статей в интернете, все равно не могу понять как это сделать, никаких сигма и мат ожидания неизвестно, только промежуток [a,b]
Программист - человек, который решает проблему, о которой вы и не знали, таким способом, который вы не понимаете
Athen вне форума Ответить с цитированием
Старый 21.10.2010, 11:28   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
неизвестно, только промежуток [a,b]
нормальное распределение задается на всей дествительной прямой
отрезок[А В] это [матожидание -n* дисперсия ; матожидание +n*дисперсия]
п произвольно заданное число (обычно =3 если память не изменяет).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 21.10.2010, 18:41   #3
Athen
 
Аватар для Athen
 
Регистрация: 02.11.2009
Сообщений: 8
По умолчанию

то есть, если мне надо на промежутке [5,15] сгенерировать число, то вытащить дисперсию и мат ожидание по формуле?
Программист - человек, который решает проблему, о которой вы и не знали, таким способом, который вы не понимаете
Athen вне форума Ответить с цитированием
Старый 21.10.2010, 18:47   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Нормальное распределение

Возвращает случайное число, распределенное по нормальному закону распределения
с заданным математическим ожиданием и дисперсией

Зависимости: System
Автор:       Mystic, mystic2000@newmail.ru, ICQ:125905046, Харьков
Copyright:   Из книги Полякова и Круглова "Turbo Pascal 5.5"
Дата:        25 апреля 2002 г.
***************************************************** }

function Gauss(Mx, Sigma: Extended): Extended;
var
  a, b, r, Sq: Extended;
begin
  repeat
    a := 2 * Random - 1;
    b := 2 * Random - 1;
    r := Sqr(a) + Srq(b);
  until r < 1;
  Sq := Sqrt(-2 * Ln(r) / r);
  Result := Mx + Sigma * a * Sq;
end;
Пример использования: 


X := Gauss(0, 1);
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 03.04.2015, 12:18   #5
sergejbakumenko
Новичок
Джуниор
 
Регистрация: 03.04.2015
Сообщений: 1
По умолчанию

Все очень просто. Матожидание на отрезке величин есть его средняя величина, т.е. М=(А+В)/2.
Сигму можно найти как (В-М)/3.
Генерирование случайной величины, распределенной по нормальному закону, выполняется при помощи выражения:
NORM(M,Sigma)=Sigma*cos(rnd(2*pi))* sqrt(-2*ln(end(1)))+M.
Где pi-число пи, а rnd(s)-случайная равномерно распределенная величина 0...S, генерирующаяся генератором случайных чисел. УДАЧИ!
sergejbakumenko вне форума Ответить с цитированием
Старый 03.04.2015, 13:46   #6
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

Зачем что-то городить, если в модуле Math Delphi есть функция RandG, возвращающая нормально распределенные числа.
Первый параметр - M, второй - сигма .
Но только , как уже писали нормальное распределение - это числа на всей числовой оси, от минус ∞ до + ∞.
Правда, есть правило трёх сигм - вероятность того, что нормально распределенное число выйдет за пределы M ∓ 3сигма считается почти 0.

Если на промежутке [5,15] - то RandG(10,1.5) - c вероятностью 99,7 % не вылезет за [5;15].

Но все равно - " на интервале ", так нормально распределенное не задают.
Есть правда " усеченное " нормальное распределение. Чтобы 100% было в интервале , сделайте так
Код:
 t:=RandG(10,1.5);
 if (t>=10)and(t<=15) then x:=t;
PS Вот блин, только что заметил - вопрос был 4,5 года назад. Какой пассаж ..
Ну да ладно, может пригодится, вдруг еще кто-то не знает про волшебную функцию RandG.

Последний раз редактировалось type_Oleg; 03.04.2015 в 14:18.
type_Oleg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
генерация чисел(С++) Ildblik Помощь студентам 6 12.09.2010 17:13
генерация чисел nXs Общие вопросы Delphi 2 13.08.2010 11:39
Генерация случайных чисел от -1 до 1 Shketer Общие вопросы Delphi 4 19.12.2009 23:43
Генерация последовательности псевдослучайных натуральных чисел с требуемым распределением вероятности elsin Фриланс 4 19.11.2008 08:57