Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 73, средняя оценка - 4.82
slavikg
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 71
#1

Моделирование случайных чисел с экспоненциальным законом распределения - C++

03.04.2012, 00:11. Просмотров 10765. Ответов 28
Метки нет (Все метки)

Программирования случайных чисел с экспоненциальным законом распределения. Товарищи помогите пожалуйста.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2012, 00:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Моделирование случайных чисел с экспоненциальным законом распределения (C++):

Сгенерировать последовательность 60 случайных чисел с экспоненциальным законом распределения с параметром - C++
Сгенерировать последовательность 60 случайных чисел с экспоненциальным законом распределения с параметром =0,8. Упорядочить полученную...

Как подобрать последовательность 100 случайных чисел с экспоненциальным законом на C++ - C++
Сгенерировать последовательность 100 случайных чисел с экспоненциальным законом =2. Вычислить среднее значение и дисперсию. распределения с...

Моделирование случайной величины с заданным законом распределения - C++
нужна программка на с++ сгенерировать x по заданным законам распределения помогите пожалуйста!

Генератор случайных чисел, закон распределения задан - C++
Генерация случайных чисел заданным законом распределения. Разработать алгоритм генерации случайных чисел заданным законом...

Написать датчик случайных чисел с таблично заданной функцией распределения - C++
Здравствуйте! у меня есть просто текст задачи и не чего больше((может поможете??? Написать датчик случайных чисел с таблично заданной...

Написание своего генератора случайных чисел с различными плотностями распределения - C++
Помогите найти статьи/книги, где рассматривается написание своего генератора случайных чисел с различными плотностями распределения...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
slavikg
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 71
04.04.2012, 16:00  [ТС] #16
А почему мне всегда видает результат -0,0000 ?
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
04.04.2012, 16:36 #17
Цитата Сообщение от slavikg Посмотреть сообщение
А почему мне всегда видает результат -0,0000 ?
потому что для double надо в считывании\вводе писать "%lf", а не "%f"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
double getLrand(double l)
{
 return -log((double)(rand())/RAND_MAX)/l;
}
 
int main()
{
 printf("Enter size of random sample:");
 int N;
 scanf("%d", &N);
 printf("Enter lambda of distribution");
 double lambda;
 scanf("%lf", &lambda);
 srand ( time(NULL) );
 while (N>0) 
 {
  printf("%lf ", getLrand(lambda));
  N=N-1;
 }             
 getch();
 return 0;
}
1
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
04.04.2012, 19:36 #18
Цитата Сообщение от Nekto Посмотреть сообщение
(float)RAND_MAX
а разве и так можно привести переменную к типу float?
0
slavikg
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 71
04.04.2012, 21:35  [ТС] #19
а какой вариант правилный тот который ты дал или тамтой что выше ? Ато результати разные
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
04.04.2012, 21:36 #20
Цитата Сообщение от slavikg Посмотреть сообщение
а какой вариант правилный тот который ты дал или тамтой что выше ? Ато результати разные
последний. В том я формулу не ту задал.
1
slavikg
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 71
04.04.2012, 22:14  [ТС] #21
можеш кинуть а то я непонял какой ето последній?)
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
04.04.2012, 22:32 #22
Цитата Сообщение от slavikg Посмотреть сообщение
можеш кинуть а то я непонял какой ето последній?)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
double getLrand(double l)
{
return -log((double)(rand())/RAND_MAX)/l;
}
 
int main()
{
printf("Enter size of random sample:");
int N;
scanf("%d", &N);
printf("Enter lambda of distribution");
double lambda;
scanf("%lf", &lambda);
srand ( time(NULL) );
while (N>0)
{
 printf("%lf ", getLrand(lambda));
 N=N-1;
}            
getch();
return 0;
}
2
slavikg
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 71
04.04.2012, 23:08  [ТС] #23
спасибо
0
Twi7ter
3 / 3 / 1
Регистрация: 27.03.2013
Сообщений: 147
18.12.2013, 23:38 #24
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Логарифмическая функция распределения
F=1-exp(-lx)
Тебе нужна обратная ей функция. То есть по оси F откладываем случайные числа от 0 до 1 с равномерным распределением, а соответствующие им значения на оси x будут случайными, распределёнными по нужному нам закону.

Функция распределения F=1-exp(-lx)
Обратная ей будет x=ln(1-F)/(-l)
В итоге получаем
F=rand()/RAND_MAX;//нецелочисленное деление
x=ln(1-F)/(-l)
1-F распределена точно так же, как F, поэтому
x=ln(F)/-l=ln( rand()/RAND_MAX )/-l=( ln(rand()) - ln(RANDMAX))/(-l)

Итог:
C
1
2
3
4
#define LOFFSET ln(RAND_MAX)
double getLrand(double l){
   return (ln(rand()+1)-LOFFSET)/(-l);
}
ДО сего поста не мог понять как числа генерить с заданным законом распределения,огромное спасибо)
0
Sergey7777
7 / 7 / 0
Регистрация: 03.12.2013
Сообщений: 44
21.11.2014, 22:57 #25
А что такое lambda of distribution? Т.е. double lambda;? У наж же ведь экспоненциальный закон распределения? А не какая-то там лямбда.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
22.11.2014, 10:47 #26
Цитата Сообщение от Sergey7777 Посмотреть сообщение
У наж же ведь экспоненциальный закон распределения?
а теперь напиши мне, какова плотность экспоненциального распределения? Или все формулы из головы вылетели?
0
Sergey7777
7 / 7 / 0
Регистрация: 03.12.2013
Сообщений: 44
22.11.2014, 15:53 #27
Вот те формула L*exp^(L*x) при x>0, где L-лямбда, но в программе нет такой формулы! Там только такая есть F=1-exp(-lx).

Добавлено через 6 минут
Но F=1-exp(-lx) - это логарифмическая функция распределения, а у нас говорится про экспоненциальный закон распределения.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
22.11.2014, 17:38 #28
Sergey7777, https://en.wikipedia.org/wiki/Exponential_distribution
0
Владимирл
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 172
30.03.2015, 06:00 #29
slavikg,
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2015, 06:00
Привет! Вот еще темы с ответами:

ГСЧ для равномерного распределения случайных чисел на заданном интервале - C++
Доброго всем времени суток. Мне нужно получить последовательность случайных чисел типа double равномерно распределённых на заданном...

Запишите шесть строк, состоящих из двух случайных чисел типа int, которые не больше 10 и трех случайных чисел - C++
Запишите шесть строк, состоящих из двух случайных чисел типа int, которые не больше 10 и трех случайных чисел типа float, что не больше...

Моделирование случайных величин - C++
Смоделировать выбор &quot;втемную&quot; одной карты из полного набора игральных карт включает 4 масти (&quot;пики&quot;, &quot;трефы&quot;, &quot;бубны&quot; и &quot;черви&quot;) и по 9...

Моделирование случайных величин - C++
Смоделировать бросание игрального кубика (т.е. с помощью датчика случайных чисел получить одно из целых чисел 1, 2, .... 6) каждым из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.03.2015, 06:00
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru