[F77] Modyfikacja rozkładu Gaussa
: 25 gru 2009, o 21:34
Otrzymuję standardowy rozkład Gaussa, korzystając z generatora liczb pseudolosowych. Jednak dla moich potrzeb ten rozkład musi być bardziej rozlazły (czyt. większa wariancja). Próbowałem to zrobić po ludzku, więc zwyczajnie matematycznie:
N(0,σ)=N(0,1)⋅1/σ⋅exp(x²/2-x²/2σ²),
ale to się sypie.
Kod mojego drivera dla r. standardowego:
Skorzystałem tu - jak widać - z funkcji gasdev(seed) (biblioteka num. recipes). Jej opis:
Będę wdzięczny za rady.
N(0,σ)=N(0,1)⋅1/σ⋅exp(x²/2-x²/2σ²),
ale to się sypie.
Kod mojego drivera dla r. standardowego:
Kod: Zaznacz cały
PROGRAM
INTEGER seed,N,Nmax,j,i
PARAMETER(N=500,Nmax=501,NP=10000)
REAL x,dist(Nmax)
seed=-12
DO i=1,Nmax
dist(j)=0.0
END DO
!rozklad gaussa na podstawie NP punktow
DO i=1,NP
j=nint(gasdev(seed)/0.1) !randomizer gaussowy + rzutowanie
if ((j.ge.1).and.(j.le.Nmax)) dist(j)=dist(j)+1 !tworzymy krzywa dzwonowa
END DO
!wypis pierwszych Nmax wartosci
DO j=1,Nmax
x=0.1*float(j)
dist(j)=dist(j)/NP
WRITE (*,*) x,dist(j)
END DO
ENDKod: Zaznacz cały
http://www.nrbook.com/a/bookfpdf/f7-2.pdfBędę wdzięczny za rady.