Willkommen! Anmelden Ein neues Profil erzeugen

Erweiterte Suche

programmierbarer Zufallsgenerator

geschrieben von richy_2 
In diesem Forum können zur Zeit keine Beiträge verfasst werden. Bitte versuche es später noch einmal.
programmierbarer Zufallsgenerator
17. December 2006 22:43
Hi
Die Random Algorithmen von Programmiersprachen erzeugen in der Regel gleichverteilte Zufallszahlen. Wie geht man vor, wenn man einen Zufallszahlengenerator benoetigt, der beliebig verteilte Zufallszahlen erzeugt ?
Diese Aufgabestellung ist etwas schwieriger als sie zunaechst erscheint.
Man kann sie mitt Hilfe des aequivalenten Ereignisses Loesen.
Dazu habe ich vor Jahren mal ein Programm geschrieben. Die Ziel-Verteilung wird dabei ueber Abtastwerte im Array a[N] vorgegeben.

Im Beispielprogramm ist die Variable j (nach dem break in der for Schleife) die Variable, die mit der in a[N] gespeicherten Haufigkeit auftritt.
Ein recht nuetzliches Tool.
Hier der Quellcode in Maple:

# programmierbarer randomgenerator

> restart;
> with(linalg):
> N:=6;
> N_go:=5000; # Anzahl Simulationsschritte
> z:=rand(1..1000)/1000: # z=Zufallszahl 0..1
> for i from 1 to N+1 do b[i]:=0; od: # testfeld

> # Vorgabe Wahscheinlichkeit;
> a[1]:=1;a[2]:=2;a[3]:=3;a[4]:=4;a[5]:=5;a[6]:=6;

> #Normieren
> p:=0:
> for i from 1 to N do p:=p+a[i]; od:
> for i from 1 to N do a[i]:=a[i]/p; od:
> # Integrieren
# a[1]:=a[1];
for i from 2 to N do a[i]:=a[i]+a[i-1]; od;
>
> # SIMULATION. Hier werden die Zufallszahlen erzeugt
> for i from 1 to N_go do
> s:=z(): # s wird die Zufallsfunktion zugeordnet
> for j from 1 to N do
> if s<=a[j] then break; fi; # s=Zufallszahl
> od;
> b[j]:=b[j]+1; # Zaehlen ob der Generator funktionert
> od:

> # GRAPHISCHE DARSTELLUNG, yepp er funktioniert :-)
> druck2:=seq([(i),(b[i])],i=1..N+1):
> plot([[druck2]])



1-mal bearbeitet. Zuletzt am 14.01.07 15:32.