IN DER VERTEILUNG PROGRAMMIERBAHRER ZUFALLSGENERATOR
**************************************************************
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.
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]])