[c++/STD]Pseudolosowy generator o rozkładzie poissona
Ostatnio zmodyfikowano 2015-04-17 23:59
tytrydsdf Temat założony przez niniejszego użytkownika |
[c++/STD]Pseudolosowy generator o rozkładzie poissona » 2015-04-08 18:20:36 Hej, mam taki program w którym mam oś X i tworzę sobie tablice intów gdzie przechowuje pozycję x i za pomocą pętli for do każdego elementu tablicy wpisuję wartość z generatora tab = ( rand() % 24 ); Całkowita długosć osi x wynosi 24 dlatego ograniczam wylosowane liczby do tego przedziału.
Jednak chciałbym żeby rozkład nie był jednostajny tak jak mam teraz ale poissonowski. A największe prawdopodobieństwo wygenerowania punktu było dla x=17. Wiem że w bibliotece std jest taki generator ale nie wiem za bardzo jak go użyć aby spełniał moje wymagania
http://en.cppreference.com/w/cpp/numeric/random/poisson_distribution |
|
pekfos |
» 2015-04-08 20:21:30 Argument konstruktora? |
|
tytrydsdf Temat założony przez niniejszego użytkownika |
» 2015-04-08 21:26:57 Ja chyba nie bardzo rozumiem zasadę działania tego rozkładu. Ten program ma w przybliżeniu wizualizować przychodzące do centrali rozmowy. Jeśli za ten parametr wstawię 18 i wygeneruje 200 próbek to praktycznie ułożą się one tak jak bym tego chciał w okolicach 18:00 największy ruch i stopniowo malejący, w późniejszych godzinach praktycznie zerowy.
Ale jeśli chcę przeskalować te wartości na sekundy i zastosować ten sam rozkład to już wartości się nie zachowują tak jak bym tego chciał. Wynika to pewnie z tego że nie znam się na probabilistyce a ze źródeł naukowych niewiele jestem w stanie zrozumieć bo brakuje mi podstaw. Czy mógł by mi ktoś w takim razie własnymi słowami na moje potrzeby wyjaśnić mi na jakiej zasadzie to działa?
|
|
Monika90 |
» 2015-04-09 12:42:26 Generator z rozkładem Poissona zwraca ilość zdarzeń które przypadły na symulowaną jednostkę czasu. Nie zwraca godziny w której zdarzenie wystąpiło.
Jeżeli masz dane z których wynika ile zdarzeń średnio przypada na daną godzinę, to możesz użyć discrete_distribution do symulacji. |
|
tytrydsdf Temat założony przez niniejszego użytkownika |
» 2015-04-09 16:17:25 Taki rozkład jak tutaj jest dla mnie satysfakcjonujący,
http://www.wolframalpha.com/input/?i=PoissonDistribution%5B9%2C8030%5D
tylko jak to rozbić na mniejsze jednostki czasu? Bo ten rozkład jest dyskretny i wylosowane liczby przyjmują wartości tylko całkowite od 0 do 24. A ja bym chciał żeby to był rozkład ciągły albo ewnetualnie dyskretny ale ograniczony co do minut albo senkund a nie godzin. Tak aby przy wygenerowaniu tych 200-500 próbek wartości się nie powtarzały zbyt często. |
|
Monika90 |
» 2015-04-09 16:55:17 Nie możesz do tego użyć rozkładu Poissona, bo jak zwiększysz rozdzielczość do minut, to rozkład będzie bardzo skupiony wokół wartości średniej. Czyli większość wylosowanych wartości będzie około godziny 18:00 (czy której tam chcesz). Użyj rozkładu normalnego.
|
|
Piastlis |
» 2015-04-17 23:59:00 Metoda dla dowolnego rozkładu może wyglądać tak: 1 losujesz liczbę A 2 losujesz drugą liczbę B i porównujesz ją z rozkładem w punkcie R(A) 3 jeżeli B>R(A) punkt 1
Można spróbować "zagęścić" punkty jakąś funkcją G(A) ale to metoda przybliżona. Poprawka To może być metoda dokładna.Trzeba policzyć całkę nieoznaczoną z funkcji rozkładu i z niej funkcję odwrotną.Nie zawsze jest to możliwe albo nie bardzo się chce lub potrafi. Najbardziej oczywistą taką funkcją będzie tangens.Nie da ona rozkładu poissona tylko 1/(1+x^2). Jak uznasz że to przybliżenie nie wystarczy spróbuj z wielomianem : a*x+b*x3+c*x^5+d*x^7....
|
|
« 1 » |