Você está na página 1de 18

Modelagem e Simulação

CCMP0057

www.univasf.edu.br/~brauliro.leal
ccmp0057@gmail.com

Prof. Brauliro Gonçalves Leal

2021
Aula

Geração de Números Aleatórios

1. Testes Empíricos de GNA


2. Testes Teóricos de GNA

2
Estude

Capítulo 10 – Geração de Números Aleatórios

Chapter 7 – Random-Number Generators

Chapter 27 – Testing Random-Number Generators

Introduction to the Art and Science of Simulation

3
1. Testes Empíricos de GNA

Os teste empíricos são, em geral, gráficos que permitem avaliar as


propriedades P1 e P2.

Gráfico dos pares (xi,xi+1) de números aleatórios permite avaliar a


independência do gerador de números aleatórios. Quando números da
sequência são independentes eles ficam dispersos aleatoriamente sem
tendência, caso contrário estão próximos de uma reta.

4
1. Testes Empíricos de GNA

Gráfico dos barra é útil para avaliar a distribuição dos números


aleatórios gerados. As alturas das barras exibem poucas diferenças
indicando que os números gerados estão bem distribuídos.

5
2. Testes Teóricos de GNA

n−k

Cov ( X i , X i+k ) E[( X i −μ)( X i+k −μ)]


∑ ( X i−μ)( X i+k −μ)
i=1
ρ(k )= 2
= 2
= n
σ σ
∑ ( X i−μ)
2

i=1

Autocorrelação ρ(k) – verifica a independência estatística de uma série


numérica informando o quanto o valor de um de um elemento da série
é capaz de influenciar seus vizinhos à distância k, k > 0.

Variação: -1 ≤ ρ(k) ≤ 1

A ausência de correlação é indicada por 0 (P2).

6
2. Testes Teóricos de GNA

n−k

Cov ( X i , X i+k ) E[( X i −μ)( X i+k −μ)]


∑ ( X i−μ)( X i+k −μ)
i=1
ρ(k )= 2
= 2
= n
σ σ
∑ ( X i−μ)2
i=1

Verifique se os números aleatórios X = { 3, 2, 5, 4, 7, 6, 8 } são estatisticamente


independente.
Para calcular ρ(1) são necessários calcular:

tamanho da amostra: n = 7

média amostral: m = (3+2+5+4+7+6+8)/7 = 35/7 = 5

numerador: [(3-5)x(2-5)+(2-5)x(5-5)+(4-5)x(4-5)+(4-5)x(7-5)+(7-5)x(6-5)+(6-5)x(8-5)] = 9

denominador: [(3-5)2+(2-5)2+(5-5)+(4-5)2+(7-5)2+(6-5)2+(8-5)2] = 28

autocorrelação: ρ(1) = 9/28 = 0,32

Conclusão: X não é estatisticamente independente.

7
2. Testes Teóricos de GNA

n−k

Cov ( X i , X i+k ) E[( X i −μ)( X i+k −μ)]


∑ ( X i−μ)( X i+k −μ)
i=1
ρ(k )= 2
= 2
= n
σ σ
∑ ( X i−μ)2
i=1

X (Xi-μ)2 (Xi-μ)(Xi+k-μ)
3 4 6
2 9 0
5 0 0
4 1 -2
7 4 2
6 1 3
8 9
média(μ) 5 28 9
ρ(1) 0,321

8
2. Testes Teóricos de GNA

O Teste χ2 (CQ) é um teste de aderência de um GNA à distribuição de


probabilidade uniforme (DPU) com nível de significância α (P1).

Para verificar se a sequência X = { x1 , x2 , ..., xn } se ajusta à DPU, o Teste CQ


requer:

segmentar X em k classes

calcular a frequência observada Oi de cada classe, i = 1, 2, ..., k

calcular a frequência esperada Ei de cada classe, Ei = n/k (DPU), i = 1,
2, ..., k

calcular a estatística D que tem distribuição χ 2 com gl = k-1 graus de
liberdade para a DPU

decidir: se D < χ2 (1-α;gl) não se pode rejeitar a hipótese H0 ao nível de
significância α, caso contrário rejeita-se a hipótese H0.

A distribuição χ2 permite obter o valor de χ2(1-α,gl) com nível significância α e


gl graus de liberdade (valor tabelado – unicaudal).
k 2
(O i −E i )
D=∑
i=1 Ei
9
2. Testes Teóricos de GNA

Foram gerados uma sequência com 140 números aleatórios, organizados em 7


classes, descritas abaixo. Verifique se a sequência é uniformemente distribuída
com 5% de significância.

Classe Frequência (Oi)


1 35
2 20
3 30
4 15
5 10
6 10
7 20
Hipóteses a serem testadas:


H0: a sequência de números aleatórios é uniformemente distribuída

Ha: a sequência de números aleatórios não é uniformemente distribuída

Tamanho da amostra: n = 140


Número de classes: k = 7
Cálculo de Ei: Ei = 140/7 = 20, i = 1, 2, ..., k
10
2. Testes Teóricos de GNA

Classe Oi Ei
1 35 20
2 20 20
3 30 20
4 15 20
5 10 20
6 10 20
7 20 20

Cálculo de D: D = (35-20)2/20 +(20-20)2/20 + ... + (20-20)2/20 = 27,5

Regra de decisão: se, para α fixado, obtém-se D > χ2(1-α;gl) então rejeita-se a
hipótese H0, caso contrário a hipótese H0 não pode ser rejeitada.

Valor de χ2(0,95;6) = 12,59 (valor tabelado – unicaudal)

Neste caso, χ2(0,95;6) = 12,59 e D > χ2(0,95;6), isto é, 27,5 > 12,59. Rejeita-se
H0.

Conclusão: a sequência de números aleatórios não é uniformemente distribuída


segundo o Teste de χ2 com 95% de confiança.
11
2. Testes Teóricos de GNA

Classe Oi Ei Di
1 35 20 (35-20)²/20
2 20 20 (20-20)²/20
3 30 20 (30-20)²/20
4 15 20 (15-20)²/20
5 10 20 (10-20)²/20
6 10 20 (10-20)²/20
7 20 20 (20-20)²/20
D = 27,5

Valor de χ2(0,95;6) = 12,59

D > χ2(0,95;6)

Conclusão: a sequência de números aleatórios não é uniformemente distribuída


segundo o Teste de χ2 com 95% de confiança.

12
2. Testes Teóricos de GNA

Gere 3000 amostras do GNA Apple CarbonLib e verifique se elas estão


uniformemente distribuídas.
#include <algorithm>
#include <iostream>
Classe O E (O-E)2/E #include
#include
<iomanip>
<fstream>
#include <sstream>
1 282 300 1,080 #include <cmath>
#include <ctime>
2 321 300 1,470 using namespace std;

3 279 300 1,470 void salvar( string fn, string str ){


ofstream fs;
4 319 300 1,203 fs.open(fn);
replace(str.begin(), str.end(),'.',',');
fs << str;
5 301 301 0,000 fs.close();
}
6 300 300 0,000 long double gnacl( void ){
static long x = time(nullptr),
7 278 300 1,613 m = pow(2,31)-1;
x = (16807*x)%m;
return (long double)x/m;
8 294 302 0,212 }
int main( void ){
9 314 300 0,653 stringstream ss;
for( int i = 0; i < 3000; i++ )
ss << i+1 << ";" << gnacl() << endl;
10 312 300 0,480 salvar("tcq.csv", ss.str() );
return 0;
}

D = 8,2 ⇒ χ2(0,95;9) = 16,9 ⇒ D < χ2(0,95;9)

Conclusão: segundo o Teste de χ2, as 3000 amostras geradas estão


uniformemente distribuídas com 95% de confiança estatística.
13
2. Testes Teóricos de GNA

Gere 3000 amostras da distribuição uniforme com GNA Apple CarbonLib e


verifique se elas estão uniformemente distribuídas.

E = 3000/10
O = Selecione {D2:D11} e execute {Frequência(B2:B3001;C2:C11)}
14
2. Testes Teóricos de GNA

Custo Computacional de GNA

Custo unitário = 3.805e-09 s

#include <iostream>
#include <chrono>
#include <ctime>
#include <cmath>

using namespace std;

long double gnacl( void ){


static long x = time(nullptr),
m = pow(2,31)-1;
x = (16807*x)%m;
return (long double)x/m;
}
int main( void ){
long N = 1E9;
cout << " Cálculo do custo computacional" << endl;
srand(time(nullptr));
auto i = chrono::high_resolution_clock::now();
for( long c = 0; c < N; c++ ){
long double u = gnacl();
}
auto f = chrono::high_resolution_clock::now();
long double custo = chrono::duration_cast<chrono::nanoseconds>(f-i).count();
custo /= 1.0E9*N;
cout << " Custo unitário = " << custo << " s" << endl;
return 0;
}
15
2. Testes Teóricos de GNA

Geradores de Números Aleatórios (GNA)

Propriedade Estatística
P1 - uniformemente distribuídos Teste χ2
P2 - estatisticamente independente Autocorrelação
P3 - não repetição para um comprimento desejado Teorema de Hull-Dobell
P4 - rápida obtenção Custo Computacional

16
Questões

1. Faça um programa C++ para gerar números aleatórios no intervalo [0,1] e


utilize o Teste de χ2 para verificar se eles estão uniformemente distribuídas
considerando:
a) 5000 amostras, 10 classes e α = 5%
b) 5000 amostras, 20 classes e α = 5%
c) 5000 amostras, 10 classes e α = 1%
d) 5000 amostras, 20 classes e α = 1%

2. Gere números aleatórios no intervalo [0,1], organize-os em 10 classes e faça


um fluxograma da frequência observada.

3. Gere 20 números aleatórios no intervalo [0,1] e calcule os valores de ρ(1),


ρ(2) e ρ(3).

4. Compare os custos computacionais dos GCL Numerical Recipes, GCC,


Borland Delphi e Posix, gerando:
e) 100 de cada um deles
f) 1000 de cada um deles
g) 10000 de cada um deles
h) 100000 de cada um deles
i) 1000000 de cada um deles
j) 10000000 de cada um deles

17
Fragata

As fragatas são aves de grande porte, com asas compridas e estreitas que representam a menor superfície de asa por
unidade de peso do mundo das aves. Têm cerca de 1 metro de comprimento, mais de dois de envergadura e uma cauda
longa e bifurcada. As fragatas não conseguem andar em terra, nadar nem levantar voo de uma superfície plana. São no
entanto aves extremamente rápidas em voo sobre o mar ou sobre outras aves.

18

Você também pode gostar