![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Регистрация: 13.10.2013
Сообщений: 6
|
![]()
Добрый день! Думаю данный вопрос будет интересен не только начинающим, но и программистам хорошего уровня.
Собственно моя задача: мне необходимо написать функцию распределения Пуассона, полностью аналогичную функции poissrnd() в Matlab. Написать из псевдокода не получается, книгу Кнут(а), смотрел, не удается написать, и там похоже не то распределение. Искал и перерыл тысячи иностранных и русских источников, но не нашел ничего подходящего, ни одной функции, которая принимала бы на вход два значения - М и lambda. Помогите пожалуйста, моих знаний не хватает на написание такой функции. Пишу в Dev c++, просьба расписать, как подключать необходимые библиотеки, если это будет необходимо для решения задачи, и где их брать (конкретно именно этой задачи, так я более-менее ориентируюсь в среде разработки Dev c++). Очень прошу помощи и скорейшего ответа, помогите начинающему. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 08.06.2013
Сообщений: 133
|
![]()
просто подставьте свои значения
лямбда = n*p; само распределение k - количество успехов ((лямбда^k)*(e^(-лямбда)))/k!; для начала вам нужно написать функцию факториал Код:
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 08.06.2013
Сообщений: 133
|
![]()
да и что такое M у вас?
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 02.03.2008
Сообщений: 2,504
|
![]()
Да, у распределения Пуассона - 1 параметр.
Наверное, M - сама случайная величина. |
![]() |
![]() |
![]() |
#5 |
Регистрация: 13.10.2013
Сообщений: 6
|
![]()
что касаемо m - , простите, вызывать надо от одного значения - lambda.
получился следующий код, который выводит некорректный результат, где я ошибся? При написании полностью скопировал код факториала, предложенный выше, он выдает корректные результаты и работает идеально, большое спасибо. float factor(float n) { float k = 1; float i = 0; for (i = 0;i<n;i++){ k*=(n-i); } return k; } void pouss() { int lambda = 4; float rrr;//итог int kfact;//факториал к int k=4;//количество испытаний kfact=int(factor(k));//вычисление факториала //printf(" %d ",k); rrr=((pow(lambda,k))*(pow(M_E,-lambda)))/kfact; printf("\n"); printf("%d",rrr); printf("\n"); } |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 21.12.2011
Сообщений: 54
|
![]()
Инициализации M_E не вижу. Ну и говорите на каких данных результат не корректный.
пс: а вообще коль нужна функция, так и делайте ее как функцию float pouss(int lambda) |
![]() |
![]() |
![]() |
#7 | |
Регистрация: 13.10.2013
Сообщений: 6
|
![]() Цитата:
Пока это просто тестовая функция, компонент большой программы, в функцию будут передаваться значения по циклу, я переделаю ее, как вы привели выше, согласен, однако на данный момент мне важно написание самого алгоритма. Данные, на которых результат не корректный приведены в программе - при lambda равное 4, или любому другому числу, результат отрицательный при выводе %d или в данном случае, как в программе выводится 0.19..., это тоже абсурд, должно получаться целое значение по типу 4 или 7 или 9. Ошибка видимо в самой структуре формулы, не могу понять. |
|
![]() |
![]() |
![]() |
#8 |
Регистрация: 13.10.2013
Сообщений: 6
|
![]()
еще вопрос к знатокам, в матлабе poissrnd() вычисляет что-то случайное. В первом ответе мне я не вижу случайности, все работает по циклу, без случайных значений.
Как с этим быть? могу привести код функции в matlab. Очень прошу помощи. |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 02.03.2008
Сообщений: 2,504
|
![]()
Цитата :
R = poissrnd(LAMBDA) функция предназначена для генерации псевдослучайного числа по распределению Пуассона для каждого значения параметра LAMBDA. А вы делаете совсем не то. Вы просто вычисляете вероятность rrr уже заданного случайного числа k. PS Например, в C++ есть генератор псевдослучайных чисел rand() , но он для равномерно распределенных, а не для Пуассона. Последний раз редактировалось type_Oleg; 15.10.2013 в 18:01. |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 02.03.2008
Сообщений: 2,504
|
![]()
Вот, из книги Вадзинский Р.Н. «Справочник по вероятностным распределениям». СПб, Наука, 2001
Мю - это лямбда. rand - стандартно равномерно распределенное случайное число. То есть от 0 до 1, а не так как в Си. Два варианта вычислений: |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Решение уравнения Пуассона. MathCAD | Ridiel | Помощь студентам | 0 | 19.05.2010 22:28 |
пуассоновское распределение | Dafka | Помощь студентам | 0 | 30.03.2010 21:15 |
Необходимо получить случайную величину типа Double, распределенную по функции Пуассона! | SkAndrew | Помощь студентам | 3 | 04.01.2010 08:45 |