Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
UNIVERSITATEA TEHNICA DE CONSTRUCTII BUCURESTI
FACULTATEA:HIDROTEHNICA
SPECIALIZAREA:AUTOMATICA SI INFORMATICA APLICATA
MODELARE SI SIMULARE
LUCRAREA NR.2
METODE DE GENERARE A
VARIABILELOR ALEATOARE
I.Metoda inversa
Enunt
Daca X,F inversabila
Algoritm:
Pasul 1: Intializare algoritmul pentru generarea uniforma pe (0,1) si a algoritmului pentru calcu;lul lui F-1
Pasul 2: Genereaza U
Pasul 3: -Calculeaza
-Returneaza X
1.Metoda exponentiala
Enunt
xdaca are f(x)=
F(x)=
x=ln V
Daca UU(0,1) 1-UU(0,1)
Algoritm:
Pasul 1: Intrare λ
Pasul 2: Genereaza UU(0,1)
Pasul 3: x=-
Program:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<conio.h>
#include<iostream.h>
void main()
getch();
2.Metoda Gumbel
Enunt
Metoda este folosita in stabilirea extremelor interferand variabile aleatoare ale caror functii de repatitie sunt de forma :
F(x)= pentru maxime x
F(x)=;x>0,v,k>0,pentru maxime
F(x)=
Cu schimbare de variabila y=α(x-u)F(x)=
Pentru (1) F(y)=u ln sau ln
(x-u)=-ln(-lnU)x-u=- variabila aleatoare de tip Gumbel
Pentru (2) Cu schimbarea de variabila y=kln dublu exponentiala (5) x=veFr(v,k) cu y dat de relatia anterioara y=kln
(5)
F(y)= Dublu expinetiala
Algoritm:
Pasul 1: Intrare α,u
Pasul 2: Genereaza uU(0,1)
Pasul 3: x=u-
Program:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<iostream.h>
void main()
getch();
II.Metoda compunerii
1.Metoda discreta
Enunt:
F(x)=
0 Gi sunt functii de repartitie
Algoritm:
Pasul 1: - Intrare p1,pk
- Initializarea algoritmilor RND, care genereaza variabilele aleatoare cu repartitia Gi pt i= calculam functia de repartitia
Pasul 2: repeta
j=0;
genereaza UU(0,1)
repeta
j=j+1;
pana cand Fj<U
X:
u
genereaza zGj(z)
x=z
Pasul 3: STOP!
Program:
#include<iostream.h>
#include<math.h>
#include<time.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
while(f[j]<u);
g=p[i];
z=(rand()%100)/99;
if(z=p[j]);
x=z;
} }
getch();
}
2.Metoda continua.Pearson XI
Enunt:
Daca Yg(y),y, iar X unde y este o realizare a lui Y atunci densitarea de reparytitie a lui x este:f(x)=
In termenii de functie de repartitie
Fie y Consideram o variabila X
XλExp(λ)
Amestecul celor 2 legi de repartitie este x Person de tip XI
F(x)=1-
Algoritm:
Pasul 1: Initializarea algoritmilor RND, care genereaza variabilele aleatoare YG(y)
Pasul 2: repeta
genereza YG(y)
genereaza X H(x,y)
X= X
pana cand conditie oprire
Pasul 3: STOP!
Pearson:
Pasul 1: Initializarea algoritmilor RND, intrare μ
Pasul 2: repeta
genereza UU(0,1)
λ=
genereaza UU(0,1)
X=
pana cand conditie oprire
Pasul 3: STOP!
Program:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<conio.h>
#include<iostream.h>
void main()
getch();
}
III.Metoda respingerii
Algoritm:
Pasul 1: Initializarea algoritmilor RND, care genereaza variabilele aleatoare Si,verifica proprietatea P si calculeaza functia Ψ
Pasul 2: repeta
repeta
genereza n, variabile aleatore de tip N
pentru i= genereaza Si
pana cand P(S1,S2, . ,Sn)
X=Ψ(S1,S2, . Sn)
pana cand conditie oprire
Pasul 3: STOP!
1.Lema
Enunt:
X si y si P(y) f(y)=0
Presupunem ca α>0 astfel incat sa avem relatia si spunem ca y poate fi generat cu calculatorul atunci daca si indepentent de y densitatea de repartitie a lui Y conditionata de este f(x) adica Y este o realizare a lui X
S=
N=2
P:
(Y,U)=Y
Algoritm:
Pasul 1: Initializarea algoritmilor RND, Y;Intrare α
Pasul 2: repeta
repeta
genereza UU(0,1)
genereza Yh(y)
pana cand
retine X=Y
pana cand conditie oprire
Pasul 3: STOP!
Program:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<iostream.h>
void main()
getch();
}
2.Metoda infasuratoarei
Enunt:
YExp(1) λ=1 (exponentiala standard)
h(x)=e-x
h(x)=
Am determinat
x |
1 |
r` |
+ - |
r |
↑ │ ↓ |
Algoritm:
Pasul 1: Initializarea algoritmilor RND
Pasul 2: repeta
repeta
genereza UU(0,1)
genereza Y=-lnU
genereza UU(0,1)
pana cand
retine X=Y
pana cand conditie oprire
Pasul 3: STOP!
Program:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<conio.h>
#include<iostream.h>
void main()
getch();
IV.METODE PARTICULARE
1.Metoda Box-Muller
Enunt:
Daca u1 si u2U(0,1) independente atunci Zi=vi, unde vi=2u1-1
In S=v12+v22<1
Mes v1,v2U(-1,1),
Introducem variabila aleatoare (0,1) (Zi(0,1)) independente i=1,2
Algoritm:
Pasul 1: Initializarea algoritmilor RND,n
Pasul 2: pentru i= executa
genereza U1U(0,1)
genereza U2U(0,1)
S=v12+v22
cat timp S<1
v1=2*U1-1;
v2=2*U2-1;
z1=v1
z2=v2
genereza U1U(0,1)
v1=2*U1-1;
genereza U2U(0,1)
v2=2*U2-1;
S=v12+v22
genereaza z1,z2
Pasul 3: STOP!
Program:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<conio.h>
#include<iostream.h>
void main()
}
getch();
2.Metoda
Enunt:
χν2= cu zi(0,1) independente
Densitatea de probabilitate χn2
F(x)=,X>0
Algoritm:
Pasul 1: Initializarea algoritmilor RND,n
Pasul 2: pentru i= executa
genereza U1U(0,1)
genereza U2U(0,1)
S=v12+v22
cat timp S<1
v1=2*U1-1;
v2=2*U2-1;
z1=v1
z2=v2
genereza U1U(0,1)
v1=2*U1-1;
genereza U2U(0,1)
v2=2*U2-1;
S=v12+v22
genereaza variabila aleatoare χ2
Pasul 3: STOP!
Program:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<conio.h>
#include<iostream.h>
time_t t;
int i=1,n,niu;
float v1,v2,s,z1,z2,x=0;
void Box_Muller()
z1=v1*sqrt(-2*log(s)/s);
z2=v2*sqrt(-2*log(s)/s);
void main()
if(niu%2!=0)
cout<<x<<' ';
}
getch();
}
3.Metoda Student
Enunt:
Variabila aleatoare Student cu grade de libertate este definite de relatia
tν=,unde z(0,1) si χ2ν sunt independente
Algoritm:
Pasul 1: Initializarea algoritmilor RND,n
Pasul 2: Pentru i= executa
genereza z(0,1)
genereza cu HIP
t
Pasul 3: STOP!
Program:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<conio.h>
#include<iostream.h>
time_t t;
int i=1,n,niu;
float v1,v2,s,z1,z2,X=0,T,z;
void Box_Muller()
z1=v1*sqrt(-2*log(s)/s);
z2=v2*sqrt(-2*log(s)/s);
void hi2()
if(niu%2!=0)
}
void main()
getch();
4.Metoda Fisher
Enunt:
unde sunt independente
Algoritm:
Pasul 1: Initializarea algoritmilor RND,Intrare ν1 si ν2, n
Pasul 2: Pentru i= executa
genereza cu HIP
F=
Pasul 3: STOP!
Program:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<conio.h>
#include<iostream.h>
time_t t;
int i=1,n,niu1,niu2,l;
float v1,v2,s,z1,z2,X=0,F,z,x1,x2;
void Box_Muller()
z1=v1*sqrt(-2*log(s)/s);
z2=v2*sqrt(-2*log(s)/s);}
void hi2(int n, int niu)
if(niu%2!=0)
void main()
getch();
5.Metoda Geometrica
Enunt:
Metoda inversa:
F(x)=U V=1-U si Vv=qx-1 (x-1)ln q =lnV (x+1)=
0
0
qx+1=1-F(x)│:q
qx=
Algoritm:
Pasul 1: Initializarea algoritmilor RND,Intrare q, n
Pasul 2: Pentru i= executa
Genereza genereza UU(0,1)
Pasul 3: STOP!
Program:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<conio.h>
#include<iostream.h>
void main()
getch();
6.Metoda Poisson
Enunt:
Pi=P(X=i)=i=0,1,2,3,.
M[x]=λ; var[x]=λ;
Variabila aleatoare Poisson de parametru λ reprezinta numarul de evenimente rare (intrarile intr-un sistem de asteptare pe unitatea de timp)
Intervalal de timp dintre 2 sosiri consecutive este o variabila de tip exponential de x
Pentru generarea lui x generam intervalele de timp τ=intervalele de timp Exp(λ) asfel incat suma lor sa acopere intervalul de timp egal cu unitatea. Numarul j de astfel de intervale este sectiune a variabilei aleatoare de timp Poisson.
j satisface inegalitatea dubla:
astfel il gasim pe j
uiu(0,1)
Algoritm:
Pasul 1: Initializarea algoritmilor RND,Intrare λ,n
Pasul 2: Pentru i= executa
j=-1;P=1
repeta
genereza UU(0,1)
P=P*u;
j=j+1;
pana cand P<e-λ
retine x=j
Pasul 3: STOP!
Program:
#include<iostream.h>
#include<math.h>
#include<time.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
}
getch();
Copyright © 2024 - Toate drepturile rezervate