Vous êtes sur la page 1sur 8

APROXIMAREA NUMARULUI

FOLOSIND VECTORUL ALEATOR UNIFORM PE O ELIPSA

S TUDENT : C HIVU S TEFAN -I ULIAN , GRUPA 343 P ROFESOR COORDONATOR : P ROF . D R . I ON V ADUVA N UMAR PROIECT : 74

I NTRODUCERE
F ORMULAREA PROBLEMEI
Folosii vectorul aleator uniform pe o elips pentru a evalua valoarea numrului .

D EFINITII SI NOTIUNI NECESARE


Definitie Fie de rezolvat o problema numerica care are solutia . O metoda Monte Carlo pentru rezolvarea lui consta in urmatoarele: se asociaza in mod adecvat un proces stochastic problemei astfel incat cu ajutorul lui sa se poata estima ; (de exemplu = E*()+ sau E*()+ sau () converge intr-un sens probabilistic catre , unde este o functie data). Sa notam deci = () estimatorul lui . (() se numeste estimatorul primar). se simuleaza o selectie 1, 2, , n asupra lui si se calculeaza un estimator al lui () ; daca de exemplu E*()+ = atunci estimatorul lui () este

si el se numeste estimator secundar. solutia problemei se aproximeaza cu . Daca estimatorul primar () este nedeplasat, adica E*()+ = , atunci estimatorul secundar satisface de regula legea numerelor mari si deci in probabilitate. De cele mai multe ori, estimatorul primar este () astfel ca E*()+ = . Estimatia Monte Carlo aproximeaza solutia , asa cum s-a precizat. Sa presupunem ca exista 2 = Var,()- < si ca dorim sa aproximam cu o

anumita eroare data . Dar este determinist si este aleator. De aceea eroarea trebuie considerata in probabilitate adica | | unde este o probabilitate mica (un risc mic). Deci conform legii numerelor mari, trebuie sa alegem un n astfel incat pentru si sufficient de mici dati sa fie satisfacuta relatia de mai sus. Teorema Volumul n al selectiei 1, 2, , n necesar pentru a estima prin cu eroarea data si cu riscul admis este [ ]

unde [x] este partea intreaga a lui x. Daca consideram U variabila aleatoare uniforma 0 1, atunci se poate scrie [ ]

adica = f(U) este un estimator primar nedeplasat al lui de unde rezulta ca daca consideram selectia U1, U2, , Un atunci se estimeaza cu media aritmetica, adica cu estimatorul secundar

Metoda aceasta bazata pe formula de mai sus se numeste metoda Monte Carlo bruta (denumirea derivand din faptul ca se foloseste repartitia uniforma).

T RATAREA MATEMATICA
Se da elipsa cu centrul in origine , fie D domeniul marginit de aceasta elipsa si sa consideram D (x, y) functia indicator a acestui domeniu D, atunci

Sa consideram acum intervalul bidimensional (dreptunghiul) J = [-a,a]x[-b,b] si vectorul V = (V1, V2) uniform pe J. Atunci

se estimeaza cu

unde V1, V2, , Vn este o selectie asupra lui V. Din ultima relatie rezulta ca

Daca se cere estimarea (aproximarea) lui cu eroarea data si cu coeficientul de risc dat, atunci volumul necesar al selectiei este dat de formula [ ]

Pentru a aplica formula ar trebui sa cunoastem [ ]

Suntem deci in fata unui caz special si oarecum ciudat: pentru a calcula trebuie sa-l cunoastem mai intai pe . Pentru a rezolva aceasta problema presupunem ca atunci avem si deci putem inlocui obtinand un n mai mare, dar care asigura cu atat mai mult precizia si coeficientul de risc . In cazul nostru putem lua

D ESCRIEREA ALGORITMULUI
Algoritmul problemei se reduce la a genera N vectori aleatori uniformi pe intervalul [-a,a]x[-b,b] si a verifica daca apartin sau nu graficului elipsei, efectuandu-se la final o medie aritmetica. Pseudocodul este urmatorul: Intrare a, b, n; Ia S := 0; For i= repeat begin Genereaza V1 uniform pe [-a,a]; Genereaza V2 uniform pe [-b,b]; If end; Afiseaza ; then S := S + 1;

Implementarea algoritmului
C ODUL SURSA LA APASAREA BUTONULUI DE
SIMULARE
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) { int N = ((SpinnerNumberModel)jSpinner1.getModel()). getNumber().intValue(); double A = ((SpinnerNumberModel)jSpinner2.getModel()). getNumber().doubleValue(); double B = ((SpinnerNumberModel)jSpinner3.getModel()).

getNumber().doubleValue(); Graphics g = jPanel1.getGraphics(); int W = jPanel1.getWidth(); int H = jPanel1.getHeight(); double S = 0; g.setColor(Color.WHITE); g.fillRect(0, 0, W, H); if(A>B){ for(int i = 1; i <= N; i++) { double V1 = (1-2*Math.random())*A; double V2 = (1-2*Math.random())*B; if(((V1*V1)/(A*A)) + ((V2*V2)/(B*B)) <= 1) { g.setColor(Color.GREEN); S++; } else g.setColor(Color.RED); g.drawLine((int)(W/2+(W/3)*(V1/A)), (int)(H/2+(W/3)*(V2/A)), (int)(W/2+(W/3)*(V1/A)), (int)(H/2+(W/3)*(V2/A))); } g.setColor(Color.BLACK); g.drawOval(W/6, H/2 - (int)((B/A)*(W/3)), 4*W/6, (int)((B/A)*(2*W/3))); g.drawRect(W/6, H/2 - (int)((B/A)*(W/3)), 4*W/6, (int)((B/A)*(2*W/3))); } else { for(int i = 1; i <= N; i++) { double V1 = (1-2*Math.random())*A; double V2 = (1-2*Math.random())*B; if(((V1*V1)/(A*A)) + ((V2*V2)/(B*B)) <= 1) { g.setColor(Color.GREEN); S++; } else g.setColor(Color.RED); g.drawLine((int)(W/2+(H/3)*(V1/B)), (int)(H/2+(H/3)*(V2/B)), (int)(W/2+(H/3)*(V1/B)), (int)(H/2+(H/3)*(V2/B))); } g.setColor(Color.BLACK); g.drawOval(W/2 - (int)((A/B)*(H/3)), H/6, (int)((A/B)*(2*H/3)), 4*H/6); g.drawRect(W/2 - (int)((A/B)*(H/3)), H/6, (int)((A/B)*(2*H/3)), 4*H/6); } g.setColor(Color.BLACK); g.drawLine(0, H/2, W, H/2); g.drawLine(W/2, 0, W/2, H); jTextField1.setText(S/N*4+""); }//

Implementarea algoritmului
I MAGINI PROGRAM

Fig 1. Simularea a 1.000 de vectori, a=2, b=1, valoarea generata: 3.144

Fig 3. Simularea a 100.000 de vectori, a=2, b=2.6, valoarea generata: 3.14244

Fig 2. Simularea a 10.000 de vectori, a=1.5, b=1, valoarea generata: 3.1472

Fig 4. Simularea a 1.000.000 de vectori, a=3, b=2.8, valoarea generata: 3.141975

B IBLIOGRAFIE
[1] Ion Vaduva, Modele de simulare cu calculatorul , Editura Tehnica, Bucuresti, 1977 [2] Ion Vaduva, Modele de simulare, Bucuresti, 2004 [3] http://mathworld.wolfram.com/Ellipse.html

Vous aimerez peut-être aussi