Generowanie liczb pseudolosowych na postawie histogramu.

0

Witam chciałbym napisać program (właściwie to procedurę) która na podstawie zadanego histogramu wygeneruje mi liczby pseudolosowo.

W moim programie mam już 2 procedury do generacji liczb (metodą Metropolis'a i von Neumann'a) ale one liczą na podstawie wzoru funkcji, a z histogramu będę miał tylko wartości w przedziałach.
Chciałem użyć dopasowanie wielomianu nie mogę (założenia zadania) więc teraz nie wiem jak to ugryźć.

Czy ktoś spotkał się kiedyś z takim problemem i byłby uprzejmy podzielić się pomysłami na rozwiązanie tego problemu ?

Załóżmy że wartości histogramu tj. wysokość (dla uproszczenia) pięciu słupków zapisałem w tablicy
int wys_hist[5];
i jak teraz za pomocą zwykłego "rand'a" i wartości z tablicy mam otrzymać jakiś rozkład (powiedzmy gaussa) ?

Proszę aby ktoś był tak miły na pisał mi w paru punktach taki ogólny algorytm jak problem rozwiązać bo po prostu nie mam pomysłu, a z kodowaniem to chyba sobie poradzę.

0

Przede wszystkim, zastanow sie -- albo opisz poprawnie i po polsku -- co i na podstawie czego masz za zadanie wygenerowac. Dla mnie, "generowanie liczb losowych na podstawie histogramu" oznacza, ze masz stworzyc generator, ktorego ROZKLAD JEST OPISANY tym histogramem. Twoje zaś

Załóżmy że wartości histogramu tj. wysokość (dla uproszczenia) pięciu słupków zapisałem w tablicy
int wys_hist[5];
i jak teraz za pomocą zwykłego "rand'a" i wartości z tablicy mam otrzymać jakiś rozkład (powiedzmy gaussa) ?
kompletnie temu przeczy.. albo generujesz "zgodnie" z opisem rozkladu zawartym w histogramie, albo "zgodnie" z rozkladem gaussa.

Jezeli masz losowac zgodnie z rozkladem przedstawionym "slupkowo" w histogramie (oznacze go 'tabelarycznie' jako H[i]), to pierwsze pytanie - czy histogram jest zgrupowany, czy tez jest zrobiony wprost. Tzn. czy slupek o H[3] wysokosci 80 oznacza ze "bylo 80 wystapień liczb miedzy 0,2 a 0,3", czy tez "bylo 80 wystapień 0,2jki"?. Od tego bedzie zalezal silnie sposob generowania wlasciwej liczby, jednak poczatek sie nie zmienia: tak czy siak, w obu przypadkach moglbys zaczac od przetworzenia histogramu na dystrybuante, nazwijmy ja F(x). Majac ja i biorąc 'dowolny' generator o rozkladzie plaskim, mozesz potaktowac dystrybuante jako funkcje tworzaca generatora o rozkladzie H[], po prostu: generator g = F( y ) ma rozklad dokladnie TEN, pod warunkiem ze F() jest dystrybuantą rozkladu TEGO, a zmienna losowa y ma rozklad plaski. Pomijam dopasowanie kwestie dziedzin/przeciwdziedzin, bo klasycznie zaklada sie ze zmienne losowe sa <0,1> i dystrybuanta ma tęże właśnie dziedzinę..

Statystyke i RNG mialem pare ładnych lat temu, więc jesli cos przekrecilem (poza zapisem, ktory formalny nie byl), chętnie się dowiem co :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1