Sunteți pe pagina 1din 19

Proiect Tehnici de Simulare - An 3, I.D.

Tema numarul 15

Simularea Variabilei Beta(a,b)

Student:
1. Introducere
- formularea problemei, definitii si notiuni necesare -

Formularea problemei
Construiti doua metode de simularea variabilei Beta(a; b), din care una sa includa
cazul 0 < a < 1 ; b > 1

Definitii si notiuni necesare

Repartitia uniforma

Una din repartitiile de probabilitate importante, dar care este naturala, este repartitia
uniforma pe un interval[a, b] care are densitatea de repartitie de forma


𝑘, 𝑑𝑎𝑐𝑎 𝑥 ∈ [𝑎, 𝑏] 1
𝑔(𝑥) = { , ∫ 𝑔(𝑥)𝑑𝑥 = 1 → 𝑘=
0, 𝑖𝑛 𝑟𝑒𝑠𝑡 𝑏−𝑎
−∞

Variabila V avand densitatea de repartitie sus mentionata se spune ca este repartizata


uniform pe [a, b]. Deci toate valorile variabilei V sunt egal probabile.
Functia de repartitie corespunzand densitatii sus mentionate este

𝑥 0, 𝑑𝑎𝑐𝑎 𝑥 < 𝑎
𝑥−𝑎
𝐺(𝑥) = ∫ 𝑔(𝑢)𝑑𝑢 = { , 𝑑𝑎𝑐𝑎 𝑥 ∈ [𝑎, 𝑏]
𝑏−𝑎
−∞ 1, 𝑑𝑎𝑐𝑎 𝑥 > 𝑏

Sa notam cu U variabila aleatoare uniforma pe [0, 1], pe care o vom numi pe scurt
variabila uniforma 0−1. Densitatea de repartitie si functia de repartitie a lui U sunt respectiv

0, 𝑑𝑎𝑐𝑎 𝑥 < 0
1, 𝑑𝑎𝑐𝑎 𝑥 ∈ [0,1]
𝑓(𝑥) = { 𝐹(𝑥) = {𝑥, 𝑑𝑎𝑐𝑎 𝑥 ∈ [0,1]
0, 𝑖𝑛 𝑟𝑒𝑠𝑡
1, 𝑑𝑎𝑐𝑎 𝑥 > 1

2
Repartitia Beta

Variabila X are repartitia Beta(a, b), a > 0, b > 0 daca densitatea sa de repartitie este

1
𝑥 𝑎−1 (1 − 𝑥)𝑏−1 , 𝑑𝑎𝑐𝑎 𝑥 ∈ [0,1]
f(x) = {𝐵(𝑎,𝑏)
0 𝑎𝑙𝑡𝑓𝑒𝑙

unde
1 Г(𝑎)Г(𝑏)
𝐵(𝑎, 𝑏) = ∫0 𝑥 𝑎−1 (1 − 𝑥)𝑏−1 𝑑𝑥, 𝐵(𝑎, 𝑏) = Г(𝑎+𝑏)

Următoarea teorema permite simularea variabilei Beta(a, b)

Teorema. Daca 𝑋1 ⤳ Gamma(0, 1, a), 𝑋2 ⤳ Gamma(0, 1, b), 𝑋1 independent de 𝑋2 ,


atunci variabila

𝑋1
𝑋=
𝑋1 + 𝑋2

este o variabila Beta(a,b).

Demonstratie. Densitatea comuna de repartitie a lui (𝑋1 , 𝑋2 ) este

1
𝑓(𝑥1 , 𝑥2 ) = 𝑥1𝑎−1 𝑥2𝑏−1 𝑒 −(𝑥1 +𝑥2)
Г(𝑎)Г(𝑏)

Facand in ultima integrala transformarea


𝑥1 𝜕(𝑥1 + 𝑥2 ) 𝑣
𝑢= , 𝑣 = 𝑥2 , 𝐽= = , 0 < 𝑢 < 1,
𝑥1 + 𝑥 2 𝜕(𝑢, 𝑣) 1−𝑢

avem

1 𝑢𝑎−1 𝑣 𝑎+𝑏−1 − 𝑣
𝑓(𝑥1 (𝑢, 𝑣), 𝑥2 (𝑢, 𝑣)) = 𝑔(𝑢, 𝑣) = 𝑒 1−𝑢 , 0 < 𝑣 < ∞
Г(𝑎)Г(𝑏) (1 − 𝑢)𝑎

𝑋1
Densitatea de repartitie a variabilei este
𝑋1 + 𝑋2

3
∞ ∞
1 𝑢𝑎−1 𝑣 𝑎+𝑏−1 − 𝑣
ℎ(𝑢) = ∫ 𝑔(𝑢, 𝑣)𝑑𝑣 = ∫ 𝑒 1−𝑢 𝑑𝑣
Г(𝑎)Г(𝑏) (1 − 𝑢)𝑎
0 0

adica dupa calcule deducem

Г(𝑎 + 𝑏) 𝑎−1
ℎ(𝑢) = 𝑢 (1 − 𝑢)𝑏−1
Г(𝑎)Г(𝑏)

si teorema este demonstrata.

Deoarece aceasta formula presupune generarea prealabila a doua variabile gamma,


rezulta ca aceasta metoda are o complexitate mare. In cazurile particulare, care nu necesita o
complexitate mare, se pot folosi alte teoreme.

Teorema. Daca variabila aleatoare X are repartitie Beta(a, b), ( a > 0, b  0) , atunci
momentele initiale de ordinul k sunt

𝑎(𝑎 + 1) ∙∙∙ (𝑎 + 𝑘 − 1)
𝑚𝑘 (𝑋) = , 𝑘 ∈ 𝑁∗
(𝑎 + 𝑏)(𝑎 + 𝑏 + 1) ∙∙∙ (𝑎 + 𝑏 + 𝑘 − 1)

Din relatia de mai sus se deduce ca media si dispersia variabilei X cu repartitia


Beta(a, b) sunt

𝑎 𝑎𝑏
𝐸(𝑋) = 𝑚1 (𝑋) = , 𝑉𝑎𝑟(𝑋) = 𝑚2 (𝑋) − [𝑚1 (𝑋)]2 =
𝑎+𝑏 (𝑎 + 𝑏)2 (𝑎 + 𝑏 + 1)

Legea numerelor mari.


Aceasta lege este necesara la validarea algoritmilor, deoarece repetand experimentul
de un numar suficient de mare de ori, vom observa ca rezultatele - media si dispersia
variabilelor aleatoare obtinute- isi vor pierde caracterul intamplator, apropiindu-se tot mai
mult de rezultatele teoretice.

Teorema lui Bernoulli:

Fie A un eveniment a carui probabilitate de realizare este p si fie fn(A) frecventa


relativa de realizare a evenimentului A in n repetari independente ale experimentului in care
se produce A.

4
Atunci pentru fiecare ℰ>0

lim 𝑃({|𝑓𝑛 (𝐴) − 𝑝| ≤ ℰ}) = 1


𝑛→∞

Demonstratie:Asociem fiecarei efectuare a experimentului o variabila aleatoare Xᵢ


care poate lua valori 1 daca experimentul i s-a realizat si 0 in caz contrar. Numarul de realizari
ale lui A in cele n repetari independente ale experimentul e dat de:
𝑛

𝑎 = ∑ 𝑥𝑖
𝑖=1

1 0
unde 𝑋𝑖 = ( ), vom avea 𝑀(𝑋𝑖 ) = 𝑝; 𝑉𝑎𝑟(𝑋𝑖 ) = 𝑝(1 − 𝑝)
𝑝 1−𝑝
𝑛 𝑛

𝑀(∑ 𝑋𝑖 ) = 𝑛𝑝; 𝑉𝑎𝑟( ∑ 𝑋𝑖 ) = 𝑛𝑝(1 − 𝑝)


1 1

𝑎 𝑝(𝑝−1)
Deci 𝑀(𝑓𝑛 (𝐴)) = 𝑀 (𝑛) = 𝑝; 𝑉𝑎𝑟(𝑓𝑛 (𝐴)) = 𝑛

Aplicam inegalitatea lui Cebisev si obtinem

𝑝(1 − 𝑝)
𝑃(|𝑓𝑛 (𝐴) − 𝑝| < ℰ) ≥ 1 −
𝑛ℰ 2
Pentru ca 𝑝(1 − 𝑝) ≤ 4 rezulta

lim 𝑃({|𝑓𝑛 (𝐴) − 𝑝| ≤ ℰ}) = 1


𝑛→∞

5
2. Tratarea matematica a problemei

In continuare vor fi prezentate doua cazuri particulare pentru simularea variabilei


Beta(a, b).

1. 0 < a < 1 si 0 < b < 1


2. 0 < a < 1 si b > 1

Primul caz particular de simulare

Vom folosi urmatoarea teorema.

Teorema. Daca 0 < a < 1, 0 < b < 1 si 𝑈1 , 𝑈2 sunt variabile aleatoare uniforme 0 –
1 1
𝑎 𝑏 𝑉
1 si independente si daca 𝑉 = 𝑉1 , 𝑇 = 𝑈2 , atunci repartitia variabilei 𝑋 = 𝑉+𝑇 conditionata
de 𝑉 + 𝑇 < 1 este Beta(a,b).

Demonstratie:

Observam ca
1
𝐹(𝑥) = 𝑃(𝑉 < 𝑥) = 𝑃 (𝑈 𝑎 < 𝑥) = 𝑃(𝑈 < 𝑥 𝑎 ) = 𝑥 𝑎 , 𝑥 ∈ [0,1]

de unde rezulta ca densitatea de repartitie a lui V este

𝑓(𝑥) = 𝑎𝑥 𝑎−1 , 𝑥 ∈ [0,1]

si densitatea de repartitie a lui T este

ℎ(𝑦) = 𝑏𝑦 𝑏−1 , 𝑦 ∈ [0,1]


𝑉
rezulta ca densitatea de repartitie a variabilei 𝑋 = este
𝑉+𝑇

𝑎𝑥 𝑎−1
𝑔(𝑥, 𝑦) =
(𝑎𝑥 𝑎−1 + 𝑏𝑦 𝑏−1 )

iar

𝑎𝑏
𝑃(𝑉 + 𝑇 < 1) = 𝐵(𝑎, 𝑏)
𝑎+𝑏
Deci densitatea variabilei X conditionata de 𝑉 + 𝑇 < 1 este

(𝑎 + 𝑏)(𝑥 𝑎−1 )
𝑞(𝑥, 𝑦) =
𝑏(𝑎𝑥 𝑎−1 + 𝑏𝑦 𝑏−1 )𝐵(𝑎, 𝑏)

6
Si teorema este demonstrata.

Al doilea caz particular de simulare

Vom folosi urmatoarea teorema.

Teorema. Daca 0 < a < 1, b > 1 si 𝑈1 , 𝑈2 sunt variabile uniforme 0 – 1


1 1
𝑎 𝑏−1
independente si consideram 𝑉 = 𝑈1 , 𝑇 = 𝑈2 , atunci repartitia variabilei V conditionata de
𝑉 + 𝑇 < 1 este Beta(a,b).

Demonstratie:

Mai intai observam ca


1
𝐹(𝑥) = 𝑃(𝑉 < 𝑥) = 𝑃 (𝑈 𝑎 < 𝑥) = 𝑃(𝑈 < 𝑥 𝑎 ) = 𝑥 𝑎 , 𝑥 ∈ [0,1]

de unde rezulta ca densitatea de repartitie a lui V este

𝑓(𝑥) = 𝑎𝑥 𝑎−1 , 𝑥 ∈ [0,1].

si densitatea de repartitie a lui T este

ℎ(𝑦) = (𝑏 − 1)𝑦 𝑏−2 , 𝑦 ∈ [0,1]

Rezulta ca densitatea comuna de repartitie a variabilelor V,T- independente este

𝑔(𝑥, 𝑦) = 𝑎(𝑏 − 1)𝑥 𝑎−1 𝑦 𝑏−2

iar
1 1−𝑥
𝑃(𝑉 + 𝑇 < 1) = 𝑎(𝑏 − 1) ∫ (∫ 𝑦 𝑏−2 𝑑𝑦)𝑥 𝑎−1 𝑑𝑥 = 𝑎𝐵(𝑎, 𝑏)
0 0

Deci densitatea comuna a variabilelor (V,T) conditionata de 𝑉 + 𝑇 < 1 este

𝑏 − 1 𝑎−1 𝑏−2
𝑝(𝑥, 𝑦) = 𝑥 𝑦 , 𝑥 ∈ [0,1] 𝑦 ∈ [0,1]
𝐵(𝑎, 𝑏)

De aici rezulta ca densitatea lui V conditionata de 𝑉 + 𝑇 < 1 este


1−𝑥
1
𝑞(𝑥) = ∫ 𝑝(𝑥, 𝑦)𝑑𝑦 = 𝑥 𝑎−1 (1 − 𝑥)𝑏−1
0 𝐵(𝑎, 𝑏)

Si teorema este demonstrata.

7
3. Descrierea algoritmilor

Algoritmul de simulare variabilei Beta(a,b), 𝟎 < 𝒂 < 𝟏, 𝒃 < 𝟏

Datele de intrare: a si b
Datele de iesire: Variabila Beta(a,b) X

Repeat
Genereaza 𝑈1 , 𝑈2 uniforme 0 – 1 si independente;
1
𝑎
𝑉 ≔ 𝑈1 ;
1
𝑇 ≔ 𝑈2𝑏 ;
Until 𝑉 + 𝑇 < 1;
𝑉
Calculeaza 𝑋 = 𝑉+𝑇
Probabilitatea de acceptare a acestui algoritm este
𝑎𝑏
𝑝𝑎 = 𝐵(𝑎, 𝑏)
𝑎+𝑏

Algoritmul de simularea variabilei Beta(a,b) unde 𝟎 < 𝒂 < 𝟏, 𝒃 > 𝟏

Datele de intrare: a si b
Datele de iesire: Variabila Beta(a,b)V

Repeat
Genereaza 𝑈1 , 𝑈2 unifirme 0 – 1 independente ;
1
𝑎
𝑉 ≔ 𝑈1 ;
1
𝑇 ≔ 𝑈2𝑏−1 ;
Until 𝑉 + 𝑇 < 1;
Probabilitatea de acceptare a acestui algoritm este
𝑝𝑎 = 𝑎𝐵(𝑎, 𝑏)

8
4. Validarea algoritmilor.

Vom folosi pentru validarea algoritmilor de simulare doua metode, respectiv


aproximarea graficului densitatii de repartitie si verificarea aproximarii mediei si dispersiei.

Aproximarea densitatii de repartitie

Pentru a verifica acuratetea rezultatelor obtinute in urma algoritmului de generare a


unui set de date, se analizeaza in ce masura histograma asociata setului obtinut aproximeaza
densitatea de repartitie a variabilelor generate.

Validarea algortimului s-a facut cu ajutorul graficului densitatii de probabilitate


folosind histograme.
La fiecare rulare a programului se va afisa si histograma. K = 25 intervale.

Cazul 1- Beta(a,b), 𝟎 < 𝒂 < 𝟏, 𝒃 < 𝟏

Mai jos se gaseste histograma pentru 5000 de variabile generate cu alfa = 0.5 si beta = 0.5

9
Mai jos se gaseste histograma pentru 4000 de variabile generate cu alfa = 0.3 si beta = 0.7

10
Cazul 2 - Beta(a,b) unde 𝟎 < 𝐚 < 𝟏, 𝐛 > 𝟏
Mai jos se gaseste histograma pentru 2000 de variabile generate cu alfa = 0.5 si beta = 1.3

Mai jos se gaseste histograma pentru 4000 de variabile generate cu alfa = 0.7 si beta = 1.9

11
Verificarea mediei si a dispersiei

Se observa ca dimensiunea multimii de selectie influenteaza rezultatele mediei si


dispersiei aferente setului de date, in sensul ca le apropie foarte mult de valorile teoretice
corespunzatoare tipului de date din multimea de selectie (o consecinta a legii numerelor mari).
In tabelul urmator se gasesc rezultatele obtinute pentru diferite dimensiuni ale
multimii de selectie in comparatie cu valorile teoretice corespunzatoare.

Nr.Crt Volum de Media Media Eroare Dispersia Dispersia Eroare


selectie obtinuta teoretia obtinuta teoretica
1 10 0.5938157 0.5 0.09381 0.086594 0.125 0.1
2 50 0.5135461 0.5 0.01354 0.121538 0.125 0.04
3 200 0.5132767 0.5 0.01327 0.124688 0.125 0.001
4 300 0.5051822 0.5 0.005 0.124956 0.125 0.001

12
5. Codul sursa

Programul a fost scris in C# folosind ca IDE Visual Studio Express 2010. Pentru
rulare este necesar sa aveti instalat .NET.

Codul sursa pentru simularea variabilei Beta(a,b) unde 𝟎 < 𝒂 < 𝟏, 𝒃 > 𝟏
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace Beta
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

private void button1_Click(object sender, EventArgs e)


{
Output.Text = "";
//initializez variabilele
int i = 0;
double alfa = 0, beta = 0, U1=0, U2=0, V = 0, T=0;
Random rand = new Random();
double[] rezultat;
try
{
//verific numarul de valori de calculat si dau lungimea vectorului ce
le va contine
if (nr_valori.Text != "")
{
rezultat = new double[Convert.ToInt64(nr_valori.Text)];
}
else
{
nr_valori.Text = "1";
rezultat = new double[Convert.ToInt64(nr_valori.Text)];
Output.Text = "Casuta nr de variabile este goala, se va calcula o
singura variabila!";
}

if (input.Text!="") alfa = Convert.ToDouble(input.Text); // atribui


lui alfa valoarea din form
if (input1.Text!="") beta = Convert.ToDouble(input1.Text);//atribui
lui beta valoarea din form
if ((alfa > 0) && (alfa < 1) && (beta > 1))// verific ca 0<alfa<1, b>1

13
{
do
{
U1 = rand.NextDouble();
U2 = rand.NextDouble();
V = Math.Pow(U1,(1/alfa)); //generez U1 uniform pe 0 - 1 cu
V=U1^(1/alfa)
T = Math.Pow(U2,(1/(beta-1))); //generez U2 uniform pe 0 - 1
cu T=U2^(1/beta-1)
U1 = rand.NextDouble();
U2 = rand.NextDouble();//generez alt U uniform pe 0 - 1
if (V+T <= 1) // verific conditia de inegalitate V+T<1
{
rezultat[i] = V ; //pastrez V ca rezultat daca
inegalitatea este respectata
i++;
}
} while (i < Convert.ToInt64(nr_valori.Text)); // reaplic pasul pana
cand calculez nr necesar de variabile
histograma(rezultat); //apelez functia pentru a crea histograma
for (int q = 0; q < Convert.ToInt64(nr_valori.Text); q++)
{
Output.AppendText(rezultat[q] + "\r\n");
}
double xb = xbar(rezultat);
xbr.Text = xb + "";
double sp = spatrat(rezultat, xb);
sptext.Text = sp + "";
}
else
{
if (alfa < 0) { MessageBox.Show("a trebuie sa fie mai mare decat
0","Eroare"); }
else if (alfa > 1) { MessageBox.Show("a trebuie sa fie mai mic
decat 1"); }
if (beta < 1) { MessageBox.Show("b trebuie sa fie mai mare decat
1"); };

}
}
catch (Exception ex)
{
Output.Text = ex + "";
}
}
public double xbar(double[] rezultat)
{
double suma = 0;
for (int i = 0; i < rezultat.Length - 1; i++)
{
suma = suma + rezultat[i];
}
return suma / rezultat.Length;
}
public double spatrat(double[] rezultat, double xbar)
{
double sumap = 0;
for (int i = 0; i < rezultat.Length - 1; i++)
{
sumap = sumap + rezultat[i] * rezultat[i];
}
return ((sumap / rezultat.Length) - (xbar * xbar));

14
}
public void histograma(double[] rezultat)
{
int k = 25;
double[] bins = new double[k + 1];
double m = rezultat.Min();
double M = rezultat.Max();
double ratio = (M - m) / (k);
for (int i = 0; i < bins.Length; i++)
{
bins[i] = i * ratio + m; //stabilesc intervalele pentru histograma
}
double[] frequency = new double[k];
for (int i = 0; i < rezultat.Length; i++)
{
for (int j = 0; j < bins.Length; j++)
if ((rezultat[i] > bins[j]) && (rezultat[i] <= bins[j + 1]))
frequency[j]++; //iau fiecare element din rezultat si verific frecventa lui in
intervalele stabilite
}
for (int i = 0; i < frequency.Length; i++)
{
chart2.Series["Series1"].Points.AddXY(Math.Round(bins[i + 1], 2),
frequency[i] / rezultat.Length); //fac histograma folosing intervalele si frecventa
variabilelor
}
TextWriter tw = new StreamWriter("bins.txt");
for (int i = 0; i < bins.Length; i++)
{
tw.WriteLine(bins[i]);
}
tw.Close();
TextWriter tw1 = new StreamWriter("frequency.txt");
for (int i = 0; i < frequency.Length; i++)
{
tw1.WriteLine(frequency[i]);
}
tw1.Close();
}

private void Form1_Load(object sender, EventArgs e)


{

}
}
}

Codul sursa pentru simularea variabilei Beta(a,b) unde 𝟎 < 𝒂 < 𝟏, 𝒃 < 𝟏

15
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace Beta
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

private void button1_Click(object sender, EventArgs e)


{
Output.Text = "";
//initializez variabilele
int i = 0;
double alfa = 0, beta = 0, U1=0, U2=0, V = 0, T=0;
Random rand = new Random();
double[] rezultat;
try
{
//verific numarul de valori de calculat si dau lungimea vectorului ce
le va contine
if (nr_valori.Text != "")
{
rezultat = new double[Convert.ToInt64(nr_valori.Text)];
}
else
{
nr_valori.Text = "1";
rezultat = new double[Convert.ToInt64(nr_valori.Text)];
Output.Text = "Casuta nr de variabile este goala, se va calcula o
singura variabila!";
}

if (input.Text!="") alfa = Convert.ToDouble(input.Text); // atribui


lui alfa valoarea din form
if (input1.Text!="") beta = Convert.ToDouble(input1.Text);//atribui
lui beta valoarea din form
if ((alfa > 0) && (alfa < 1) && (beta > 0 ) && (beta < 1 ))// alfa si
beta verific sa fie intre 0 si 1
{
do
{
U1 = rand.NextDouble();
U2 = rand.NextDouble();
V = Math.Pow(U1,(1/alfa)); //generez U1 uniform pe 0 - 1 cu
V=U1^(1/alfa)
T = Math.Pow(U2,(1/beta)); //generez U2 uniform pe 0 - 1 cu
T=U2^(1/beta)
U1 = rand.NextDouble();

16
U2 = rand.NextDouble();//generez alt U uniform pe 0 - 1
if (V+T <= 1) // verific conditia de inegalitate V+T<1
{
rezultat[i] = V / (V + T); //pastrez V/(V+T) ca
rezultat daca inegalitatea este respectata
i++;
}
} while (i < Convert.ToInt64(nr_valori.Text)); // reaplic pasul pana
cand calculez nr necesar de variabile
histograma(rezultat); //apelez functia pentru a crea histograma
for (int q = 0; q < Convert.ToInt64(nr_valori.Text); q++)
{
Output.AppendText(rezultat[q] + "\r\n");
}
double xb = xbar(rezultat);
xbr.Text = xb + "";
double sp = spatrat(rezultat, xb);
sptext.Text = sp + "";
}
else
{
Output.Text = "Variabila de intrare trebuie sa fie intre 0 si 1";
}
}
catch (Exception ex)
{
Output.Text = ex + "";
}
}
public double xbar(double[] rezultat)
{
double suma = 0;
for (int i = 0; i < rezultat.Length - 1; i++)
{
suma = suma + rezultat[i];
}
return suma / rezultat.Length;
}
public double spatrat(double[] rezultat, double xbar)
{
double sumap = 0;
for (int i = 0; i < rezultat.Length - 1; i++)
{
sumap = sumap + rezultat[i] * rezultat[i];
}
return ((sumap / rezultat.Length) - (xbar * xbar));
}
public void histograma(double[] rezultat)
{
int k = 25;
double[] bins = new double[k + 1];
double m = rezultat.Min();
double M = rezultat.Max();
double ratio = (M - m) / (k);
for (int i = 0; i < bins.Length; i++)
{
bins[i] = i * ratio + m; //stabilesc intervalele pentru histograma
}
double[] frequency = new double[k];
for (int i = 0; i < rezultat.Length; i++)
{
for (int j = 0; j < bins.Length; j++)

17
if ((rezultat[i] > bins[j]) && (rezultat[i] <= bins[j + 1]))
frequency[j]++; //iau fiecare element din rezultat si verific frecventa lui in
intervalele stabilite
}
for (int i = 0; i < frequency.Length; i++)
{
chart2.Series["Series1"].Points.AddXY(Math.Round(bins[i + 1], 2),
frequency[i] / rezultat.Length); //fac histograma folosing intervalele si frecventa
variabilelor
}
TextWriter tw = new StreamWriter("bins.txt");
for (int i = 0; i < bins.Length; i++)
{
tw.WriteLine(bins[i]);
}
tw.Close();
TextWriter tw1 = new StreamWriter("frequency.txt");
for (int i = 0; i < frequency.Length; i++)
{
tw1.WriteLine(frequency[i]);
}
tw1.Close();
}

private void Form1_Load(object sender, EventArgs e)


{

}
}
}

6. Bibliografie

18
[1] Ion Vaduva, „ Modele de simulare ”, Bucuresti, 2004

[2] Enciclopedia Wikipedia, Beta distribution

http://en.wikipedia.org/wiki/Beta_distribution

19

S-ar putea să vă placă și