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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2015, 12:01   #1
Cope2
Новичок
Джуниор
 
Регистрация: 28.03.2015
Сообщений: 2
По умолчанию Генератор случайных чисел по нормальному закону

Здравствуйте. Помогите написать генератор случайных величин из заданного интервала по нормальному закону при известной сигме (средн. квадратичному отклонению). Rand не подходит, тк он генерирует числа по равновероятному закону.
С чего начать даже не представляю.
Где-то вычитал что можно сгенерировать несколько чисел с помощью rand ( например 10 чисел), посчитать их сумму и разделить на 10 и это число будет стремиться к случайному числу полученному по норм. закону. Но как-то не доверяю я этому методу.

Вот нашел код,но не знаю, действительно ли он генерирует числа по нормальному закону.

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float t1,t2,t3,t4,t5=0, n1, n2;
float average,sigma,sum,x;
{
srand( time( 0 ) );
n1 = StrToFloat(LabeledEdit1->Text);
n2 = StrToFloat(LabeledEdit2->Text);
average = ( n1 + n2 ) / 2.;
sigma =(average - n1)/3.;
sum=0;
for (int i=0;i<25;i++)
sum+=1.0*rand()/RAND_MAX;
t1 = (sqrt(2.0)*(sigma)*(sum-12.5))/1.99661 + average;
}
ShowMessage (t1);
}
Cope2 вне форума Ответить с цитированием
Старый 28.03.2015, 13:03   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Randg1.jpg
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 28.03.2015, 13:13   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от Cope2 Посмотреть сообщение
... и это число будет стремиться к случайному числу полученному по норм. закону. Но как-то не доверяю я этому методу.
Можете доверять. Все доверяют - ЦПТ . Это еще г-н Ляпунов доказал
Чем больше чисел сложить, тем ближе к нормальному. На практике обычно 10 - мало, надо где-то 30..50, не меньше.

Но чаще используют Преобразование Бокса Мюллера
Ваша 1.0*rand()/RAND_MAX - это как раз стандартное равномерно распределенное СЧ . Стандартное - значит на интервале [0;1] для равномерного.
Получается z0,z1 - сразу 2 стандартных нормально распределенных СЧ, у которых параметры мат. ожидание a=0, дисперсия σ^2 равна 1.

Для того, чтобы получить при заданном a и σ , надо просто z0*σ + a.
У вас вроде только σ задана, а мат. ожидание - что, любое ?

Ваш код - да, вроде генерирует нормальное, если у вас сумма 25-ти равномерных. Только какие получатся a и σ, не соображу, проверяйте по теореме Ляпунова.

PS Пока писал, опередили.
Да, у вас же можно использовать VCL , там RandG - то что надо.
+ Randomize.

Последний раз редактировалось type_Oleg; 28.03.2015 в 13:16.
type_Oleg вне форума Ответить с цитированием
Старый 29.03.2015, 00:19   #4
Cope2
Новичок
Джуниор
 
Регистрация: 28.03.2015
Сообщений: 2
По умолчанию

Большое спасибо! То что нужно!
Cope2 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
анализ соответствия дискретной выборки нормальному закону распределения s77lanselot77s Qt и кроссплатформенное программирование С/С++ 21 16.07.2013 17:43
генератор случайных чисел Nicolas_46 Microsoft Office Excel 9 03.12.2012 14:35
Генератор случайных чисел remont_it, C++ Builder 1 12.05.2012 21:11
генератор случайных чисел dearkato Помощь студентам 4 30.10.2011 13:16
Генератор случайных чисел Костян Пират Общие вопросы Delphi 8 23.01.2011 22:08