• Nenhum resultado encontrado

Caderno de Física Computacional

N/A
N/A
Protected

Academic year: 2019

Share "Caderno de Física Computacional"

Copied!
27
0
0

Texto

(1)

Caderno de

Física Computacional

Métodos computacionais I

Ordenação e estatística básica

Prof. Dr. Luís Fernando de Oliveira

Universidade do Estado do Rio de Janeiro – UERJ Centro de Tecnologia e Ciência – CTC

Instituto de Física Armando Dias Tavares – IFADT

(2)
(3)

Sumário

2 Métodos de ordenação 3

2.1 Método da seleção . . . 3

2.2 Mergesort . . . 5

3 Métodos em estatística 11 3.1 Preliminares. . . 11

3.2 Parâmetros de posição . . . 12

3.2.1 Média aritimética. . . 12

3.2.2 Média quadrática . . . 13

3.2.3 Moda . . . 14

3.2.4 Mediana . . . 14

3.3 Parâmetros de dispersão . . . 16

3.3.1 Amplitude. . . 16

3.3.2 Desvio médio . . . 16

3.3.3 Variância ou desvio médio quadrático . . . 18

3.3.4 Desvio padrão . . . 18

3.4 Parâmetros de correlação . . . 19

3.4.1 Covariância . . . 19

3.4.2 Coeficiente de correlação linear de Pearson . . . 20

Códigos em Fortran 23

(4)
(5)

Métodos computacionais em

estatística básica

(6)
(7)

2

Métodos de ordenação

Antes de entrarmos nos métodos estatísticos, vamos estudar um pouco sobre métodos de ordenação. Esta iniciativa se justifica visto que os dados que serão analisados estatisticamente quase sempre nos chegam de forma desordenada. Com a ordenação dos dados, torna-se possível, por exemplo, o levantamento das frequências dos dados.

2.1

Método da seleção

O método da seleção também é conhecido como shellsort ou bubblesort. O princípio de

funcionamento é simples: identificar o menor (maior) valor no conjunto de dados e reposicioná-lo no inicio da sequência de vareposicioná-lores; depois, identificar o segundo menor (maior) e, novamente, reposicioná-lo na sequência, logo após o menor (maior) e assim por diante.

Imaginando um conjuntoXdeN valores, dispostos na forma de sequência (logo, são elemen-tos indexados), a busca (identificação) pelo menor valor (ou maior se a ordenação é na ordem decrescente) se dá pela comparação do valor armazenado na primeira posição da sequência (x1) como todos os demais elementos (x2,· · ·, xN). Quando se identifica um valor menor que o que está em x1, estes dois valores (o que está em x1 e o “menor”) devem ser cabiados. Assim, o menor valor assume a primeira posição. A busca prossegue até o fim da sequência. Sempre que se encontrar um valor menor que o que está na primeira posição, estes devem ser trocados. Terminada a busca, o primeiro elemento da sequência será certamente o menor valor do conjunto.

5 7 -1 10 2

N

5 7 -1 10 2

S

-1 7 5 10 2

N

(8)

4

-1 7 5 10 2

N

-1 7 5 10 2

O passo seguinte é identificar o segundo menor valor. Em uma lista ordenada, o segundo menor valor deve ocupar a segunda posição (x2). A sua esquerda está o menor valor (em x1). Este valor já se encontra na sua posição correta na sequência ordenada, por isso, não é ne-cessário comparar-se o valor em x1 com o valor de x2, pois o valor que está em x1 é menor. Então, a busca pelo segundo menor valor se dá comparando o valor emx2 com todos os demais a sua direita (x3,· · ·, xN). Sempre que se encontrar um valor menor que o valor armazenado emx2, faz-se a troca. Assim, no final da busca, o valor emx2será o segundo menor do conjunto.

-1 7 5 10 2

S

-1 5 7 10 2

N

-1 5 7 10 2

S

-1 2 7 10 5

O procedimento é o mesmo para todos os outros valores, sempre se comparando, generica-mente, o valor emxi com os demais a sua direita (xi+1,· · · , xN). Quando se encontra um valor menor, troca-se de lugar os valores envolvidos. A última comparação se dá entre xN−1 e xN.

Na primeira busca, realiza-seN 1 comparações. Na segunda busca,N2 comparações. São N 1 buscas. Logo, o número de comparações, ao final do processo é da ordem de N2. O método é simples, mas depende de muitas comparações. Existem métodos mais “espertos” que demandam um número menor de comparações, sendo, portanto, mais rápidos.

Mas vamos, neste momento, nos concentrarmos em implementar a lógica do método da seleção. Então, sintetizando a dinâmica descrita acima e assumindo a variável icomo o índice do elemento a ser ordenado, temos que:

• para cada elementoxi, para i= 1,· · ·, N 1, fazer para cada elementoxj, paraj =i+ 1,· · ·, N, fazer sexi+1 >xj, então trocar xi+1↔xj

Pondo na forma de pseudocódigo:

(9)

5

Algoritmo 1: Ordenação por seleção.

AlgoritmoOrdenação_por_Seleção {O comprimento 100 é um exemplo. }

declarar x[100]numérico { sequência de valores }

declarar N numérico {comprimento da sequência }

declarar i,j numéricos {índices }

declarar tmpnumérico { auxiliar }

{Antes da ordenação, é necessário ler os dados. }

{As instruções de leitura de dados entrariam aqui. }

1. paraide1 até N−1,fazer 2. | paraj de i+ 1até N,fazer 3. | | se(x[i]> x[j]), então

4. | | | tmpx[i] 5. | | | x[i]x[j] 6. | | | x[j]tmp 7. | | fim se

8. | fim para 9. fim para

Fim algoritmo

programador para ordenar sequências numéricas. Vejamos no algoritmo2sua estrutura usando a sintaxe correta de sequências e passagem de argumentos.

Façamos algumas análises. Quando o programador transforma seu algoritmo para um for-mato de função ou subrotina (isto é, ele modulariza a lógica), ele deve observar quais dados deverão ser trocados entre a lógica principal e módulo criado. Existem dados que bastam ser copiados da lógica principal e outros que são passados, processados e modificados no módulo e devolvidos à lógica principal.

No caso de da passagem de argumentos que não prevê uma alteração nos conteúdos dos dados, estes argumentos são passadoscomo cópia, isto é, os conteúdos dos dados originais (na lógica principal) são replicados dentro do módulo através dos argumentos do módulo. Se os valores copiados forem alterados, os dados originais não serão afetados, pois o módulo possui cópias dos valores originais. Já no caso de dados que precisam ser modificados no escopo (dentro) do módulo, estes precisam ser passadospor referência, ou seja, o módulo “enxerga” além de seu escopo, isto é, tem acesso aos dados originais e, sendo assim, se o módulo modificar o conteúdo dos dados passados, alterará os dados originais fora do escopo do módulo.

Em nossa lógica, o tamanho da sequência de dados, N, não precisa ser modificado. Logo, é passado como cópia do dado original. Já a sequência propriamente dita, esta é passada por referência, pois deverá ser modificada pela ordenação. Os valores de cada posição da sequência estão sujeitos a alterações e estas alterações devem ser “vistas” pela lógica principal. O for modificado no escopo da subrotina de ordenação (módulo) será significativo na lógica principal.

2.2

Mergesort

O método de ordenação por seleção é fácil e de rápida implementação, mas é pouco eficiente no sentido de tempo de processamento. Se a sequência a ser ordenada possui N elementos, o método da seleção realiza algo em torno de N2 comparações1 Para um N pequeno, o método é uma boa solução, mas se N for grande... Para estes casos, exitem outros métodos de orde-nação mais eficientes (no sentido de número de comparações) que utilizam outras estratégias

1Diz-se em computação “na ordem de”. Isto não significa exatamente N2 comparações, mas algum valor

(10)

6

Algoritmo 2: Subrotina de ordenação por seleção.

SubrotinaOrdenação_por_Seleção (x,N)

{argumentos da subrotina }

declarar x[]numérico (por referência) { sequência de valores }

declarar N numérico (por cópia) {comprimento da sequência }

{variáveis locais }

declarar i,j numéricos {índices }

declarar tmpnumérico { auxiliar }

1. paraide1 até N1,fazer

2. | paraj de i+ 1até N,fazer 3. | | se(x[i]> x[j]), então 4. | | | tmpx[i]

5. | | | x[i]x[j] 6. | | | x[j]tmp 7. | | fim se

8. | fim para 9. fim para

Fim subrotina

(lógicas) para realizar a tarefa. Consequentemente, mais eficiente significa mais elaborado, mais sofisticado, mais “complicado”, mas não impossível de se entender.

Uma estratégia muito utilizada em problemas com grandes quantidades de dados é o “di-vidir para conquistar” (do inglês “divide and conquer”.) A ideia básica é reduzir a dimensão

do problema para reduzir o custo da tarefa. Nem sempre esta estratégia se mostra aplicável dependendo do problema. Mas no caso do problema de ordenação, ela é bastante útil.

Dois métodos bastante conhecidos que se baseiam nesta estratégia são oMergesorte o Quick-sort. Estudaremos apenas o primeiro, até porque o propósito da apresentação deste método é

a lógica da solução2.

O métodoMergesort, como a tradução para o português indica, é uma solução de ordenação

por “junção”. A ideia básica é pegar a sequência de dados original desordenado e dividi-la em seguimentos menores. Cada seguimento pode ser novamente dividido até que se chegue a um tamanho mínimo de dados que sejam facilmente ordenados. Depois, faz-se o processo inverso de junção só que de forma a preservar a ordenação das partes, ou seja, os dados ordenados em cada parte precisam ser intercalados de forma organizada para formar uma sequência maior ordenada. Quando se reunir as duas últimas partes intercalando os dados ordenados em cada uma, a sequência original estará totalmente ordenada.

Então, a estratégia é, resumidamente:

• dividir: fragmentar a sequência sucessivamente até um que cada parte tenha um tamanho mínimo estabelecido;

• conquistar: ordenar os menores fragmentos e reconstruir a sequência original intercalando os dados previamente ordenados.

Na etapa de divisão, uma sequência com n elementos é dividida em 2 produzindo duas subsequências den/2 elementos ou uma comn/2 e outra comn/2+1. A divisão deve prosseguir até que as subsequências tenham 2 ou 3 elementos. É neste momento que se realiza a primeira ordenação que é muito rápida.

A ordenação entre 2 elementos depende de uma única comparação: ou já estão ordenados ou estão invertidos. Se a sequência tem 3 elementos, são necessárias três comparações. Vejamos as subrotinas de ordenação (algoritmos3 e4) para cada caso,

2Em Ciência da Computação existe uma disciplina chamada Estrutura de dados e seus algoritmos que se

(11)

7

Algoritmo 3: Ordenação de 2 elementos.

SubrotinaOrdenação_de_2 (seq,p)

declarar seq[]numérico (por referência) { sequência de valores }

declarar pnumérico (por cópia) { índice }

declarar tmpnumérico { variável auxiliar }

{se o segundo elemento é o maior que o primeiro... }

1. se(seq[p+ 1]> seq[p]), então

2. | tmpseq[p+ 1] 3. | seq[p+ 1]←seq[p] 4. | seq[p]tmp 5. fim se

Fim subrotina

Algoritmo 4: Ordenação de 3 elementos.

SubrotinaOrdenação_de_3 (seq,p)

declarar seq[]numérico (por referência) { sequência de valores }

declarar pnumérico (por cópia) { índice }

declarar tmpnumérico { variável auxiliar }

{se o segundo elemento é o maior entre os três... }

1. se(seq[p+ 1]> seq[p]eseq[p+ 1]> seq[p+ 2]),então 2. | tmpseq[p+ 1]

3. | seq[p+ 1]←seq[p] 4. | seq[p]tmp

{se o terceiro elemento é o maior entre os três... }

5. senão se (seq[p+ 2]> seq[p]eseq[p+ 2]> seq[p+ 1]),então 6. | tmpseq[p+ 2]

7. | seq[p+ 2]←seq[p] 8. | seq[p]tmp 9. fim se

{se o terceiro elemento é o segundo maior... }

10. se(seq[p+ 2]> seq[p+ 1]),então 11. | tmpseq[p+ 1]

12. | seq[p+ 1]←seq[p+ 2] 13. | seq[p+ 2]←tmp 14. fim se

(12)

8

O passo seguinte é pensar no processo de divisão da sequência. Este processo será recursivo, ou seja, ele se invocará até que o tamanho da sequência recebida seja 2 ou 3. Neste caso, a divisão se interrompe e o processo começa a retornar intercalando as sequências previamente ordenadas.

A intercalação precisa misturar de forma ordenada as duas partes já ordenadas. Uma parte começa no índice p e a outra no índice q. O último elemento da segunda parte possui índice r. Logo, a primeira parte possuiqp elementos e a segunda parte, rq+ 1. O comprimento total das duas sequências juntas ét=rp+ 1.

Para armazenar os dados intercalados, precisamos de uma estrutura de apoio com um com-primento igual a soma dos comcom-primentos das partes. Sejatmpo nome da sequência intercalada. O processo de intercalação é simples: associamos um índice auxiliar i para uma parte or-denada e j para a outra; os valores iniciais de i e j serão p e q respectivamente; outro índice será associado à sequênciatmp, sejak; kcomeça em 1; compara-se os primeiros elementos das duas partes (seq[i] e seq[j]); se seq[i] é menor que seq[j], então copia-se o valor de seq[i] para tmp[k], incrementam-se ie k; senão, copia-se seq[j] para tmp[k] e incrementam-se j e k. Este procedimento se repete até que a sequênciatmpesteja toda preenchida, ou seja,k=t. Depois, a sequência ordenada finaltmpdeve ser copiada paraseqa partir do índicep. Este procedimento está expresso no algoritmo5.

Algoritmo 5: Intercalação das subsequências.

SubrotinaIntercalação (seq,p,q,t)

declarar seq[]numérico (por referência) { sequência de valores }

declarar p,q numéricos (por cópia) { índices iniciais de cada sequência }

declarar tnumérico (por cópia) { soma dos comprimentos das duas sequências }

declarar tmp[]numérico { sequência auxiliar sem comprimento definido }

declarar i,j,k numéricos { índices auxiliares }

1. alocartmp[t] 2. ip

3. jq

4. parakde 1até t,fazer 5. | se (seq[i]≤seq[j]),então 6. | | tmp[k]seq[i]

7. | | ii+ 1 8. | senão

9. | | tmp[k]seq[j] 10. | | jj+ 1 11. | fim se 12. fim para

13. parakde 1até t,fazer 14. | seq[p+k−1]←tmp[k] 15. fim para

16. desalocartmp

Fim subrotina

Por fim, temos o algoritmo principal que realiza a ordenação completa. A estratégia de dividir e conquistar é uma estratégia naturalmente recursiva, isto é, ela invoca a si mesma até que uma determinada condição seja atendida. A partir deste ponto, a recursão vai retornando à invocação inicial encerrando os procedimentos realizados.

(13)

9

Pode-se enxergar o método como um todo se aplicarmos a imagem de uma árvore (um pinheiro de natal) onde o vértice é a primeira invocação. Abaixo do vértice, encontraremos as mesmas invocações (recursão) aplicadas às partes geradas no vértice. Chamamos de nós: nó da esquerda e nó da direita. Abaixo de cada nó, encontraremos mais nós e assim por diante até que os comprimentos das subpartes sejam 2 ou 3. Como a recursão para nesta condição, não encontraremos mais nós abaixo destes. Estas são as “folhas” da estrutura em árvore. Resta agora percorrer os caminhos inversos, intercalando as sequências das folhas até alcançarmos o vértice novamente.

n

le=n/2

le=le/2 ld= (le+ 1)/2 ld= (n+ 1)/2

le=ld/2 ld= (ld+ 1)/2

Algoritmo 6: Ordenação por intercalação –mergesort.

SubrotinaOrdenação_por_Intercalação (seq,p,n)

declarar seq[]numérico (por referência) { sequência de valores }

declarar nnumérico (por cópia) {comprimento da sequência }

declarar .numérico declarar le,ldnumérico

1. se(n= 2), então

2. | Ordenação_de_2(seq,p) { interrompe a recursão } 3. senão se (n= 3), então

4. | Ordenação_de_3(seq,p) { interrompe a recursão } 5. senão { divisão da sequência em duas partes “iguais” } 6. | ld←(n+ 1)/2 { se n for ímpar, ld fica igual a le+1 }

7. | len/2 {total de elemento da parte esquerda } 8. | Ordenação_por_Intercalação(seq,p+le,ld) {recursão } 9. | Ordenação_por_Intercalação(seq,p,le) {recursão }

10. | Intercalação(seq,p,p+le,n) 11. fim se

(14)
(15)

3

Métodos em estatística

3.1

Preliminares

Somatório e produtório são duas operações muito comuns nas implementações de soluções numéricas. São operações básicas e muito simples. Ambas são implementadas utilizando simples recorrência, onde o resultado atual é o resultado anterior (obtido na iteração anterior) combinado (por soma ou produto) com a informação atual (novo valor).

A operação de somatório pode ser vista iterativamente da seguinte forma

• a sequência a ser somada se chama pe possui nelementos (seu comprimento); p[p[1];p[2];· · ·;p[n1];p[n]]

• designa-se uma variável (chamada acumuladora)qpara armazenar os resultados das somas a cada iteração (sãon iterações, pois se temnelementos);

• as iterações são controladas por uma variável contadora chamada i(variável índice);

• após o último valor somado (o n-ésimo elemento), a variável acumuladora q contém o valor final do somatório.

Deve-se ter em mente que em computação, a operação de atribuição é realizada em duas etapas: primeiro se computa o que está à direita do operador de atribuição e, depois, o resultado obtido é copiado (atribuído) à variável à esquerda do operador.

q= 0

i= 1 ⇒ qq+p[1] = (0) +p[1] =p[1] i= 2 qq+p[2] = (p[1]) +p[2] i= 3 qq+p[3] = (p[1] +p[2]) +p[3]

· · ·

i=n1 ⇒ qq+p[n−1] = (p[1] +p[2] +p[3] +· · ·+p[n−2]) +p[n−1]

i=n qq+p[n] = (p[1] +p[2] +p[3] +· · ·+p[n−1]) +p[n] = n

X

i=1 p[i]

Transcrevendo esta lógica em pseudolinguagem, tem-se a funçãosomatórioconforme apre-sentado em Algoritmo 7.

O procedimento para o produtório é idêntico ao do somatório. A única diferença é que o

(16)

12

Algoritmo 7: Função somatório.

Função Somatório(p,n) numérico

declarar p[]numérico (por referência) { sequência de dados }

declarar nnumérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar q numérico {variável acumuladora e de retorno }

1. q←0 {iniciando variável neutra } 2. paraide1 até n,fazer

3. | qq+p[i] { acumulando iterativamente a soma dos valores da sequência } 4. fim para

5. retornar q {retornando valor final do somatório }

Fim função

Algoritmo 8: Função produtório.

Função Produtório(p,n) numérico

declarar p[]numérico (por referência) { sequência de dados }

declarar nnumérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar q numérico {variável acumuladora e de retorno }

1. q←1 {iniciando variável neutra } 2. paraide1 até n,fazer

3. | qqp[i] {acumulando iterativamente o produto dos valores da sequência } 4. fim para

5. retornar q {retornando valor final do produtório }

Fim função

elemento neutro no produtório é 1 e não 0.

q= 1

i= 1 ⇒ qqp[1] = (1)p[1] =p[1] i= 2 ⇒ qqp[2] = (p[1])p[2] i= 3 qqp[3] = (p[1]p[2])p[3]

· · ·

i=n1 qqp[n1] = (p[1]p[2]p[3]∗ · · · ∗p[n2])p[n1]

i=n qqp[n] = (p[1]p[2]p[3]∗ · · · ∗p[n−1])∗p[n] = n

Y

i=1 p[i]

Novamente, utilizando a pseudolinguagem, tem-se a função produtório como visto em Algoritmo 8.

3.2

Parâmetros de posição

3.2.1 Média aritimética

(17)

13

de valores e que é calculado da seguinte forma:

X= 1 N

N

X

i=1 xi

Algoritmo 9: Função Média.

Função Média (x,n) numérico

declarar x[]numérico (por referência) { sequência de valores }

declarar nnumérico (por cópia) {comprimento da sequência }

declarar m numérico { média }

1. m← (1/n)∗Somatório(x, n) {calculando a média }

2. retornar m { retornando a média }

Fim função

Se o conjunto de valores X é organizado em M classes de ocorrência, com M N, a ocorrência do valor classificado ˜xi é indicado pelo valor inteironi e a médiaXpode ser expressa como:

X= 1 N

M

X

i=1 nixi˜

Com uma manipulação simples da expressão, podemos reescrevê-la como:

X= M

X

i=1 fix˜i

ondefi é a frequência associada ao valor classificadoxi: fi =ni/N e PMi=1fi = 1.

Algoritmo 10: Função Média2.

Função Média2(x,f,m) numérico

declarar x[]numérico (por referência) { sequência de valores }

declarar f numérico (por referência) {sequência de frequencias }

declarar m numérico (por cópia) {comprimento da sequência }

declarar mednumérico { média }

declarar inumérico {variável contadora }

1. med←0 { iniciando med com zero } 2. paraide1 até m,fazer

3. | medmed+f[i]∗x[i] 4. fim para

5. retornar med { retornando a média }

Fim função

3.2.2 Média quadrática

A média quadrática xrms é um valor positivo calculado como a raiz quadrada da média dos quadrados dos valores presentes emX:

xrms =

q

X2 =

(18)

14

Algoritmo 11: Função Média_Quad.

Função Média_Quad(x,n) numérico

declarar x[]numérico (por referência) { sequência de dados }

declarar nnumérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar s,m numéricos { variável acumuladora e média quadrática }

1. s←0 {iniciando variável neutra } 2. paraide1 até n,fazer

3. | ss+x[i]x[i] 4. fim para

5. m←Raiz(s/n) {iniciando variável neutra }

6. retornar m { retornando valor da média quadrática }

Fim função

Se o conjunto de valores for expresso na forma de valores classificados com suas respectivas frequências, a média quadrática pode ser

xrms =

q

X2 =

v u u t M X i=1 fix˜2i

Algoritmo 12: Função Média_Quad2.

Função Média_Quad2(x,f,m) numérico

declarar x[]numérico (por referência) { sequência de dados }

declarar f[]numérico (por referência) {sequência de frequências }

declarar m numérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar s,med2 numéricos { variável acumuladora e média quadrática }

1. med2←0 {iniciando variável neutra } 2. paraide1 até m,fazer

3. | med2med2 +f[i]∗x[i]x[i] 4. fim para

5. retornar Raiz(med2) { retornando valor da média quadrática }

Fim função

3.2.3 Moda

O parâmetro chamadomodade um conjunto de valores corresponde ao valor mais frequente

do conjunto. O conjunto de valores pode apresentar mais de uma moda. No caso em que apresente somente um valor máximo de frequência, o conjunto é chamado de unimodal; duas

modas,bimodal, e mais de três, multimodal.

3.2.4 Mediana

A mediana, Xmed, é o valor do conjunto de valores que divide a distribuição ordenada em duas partes iguais. Deve-se considerar o fato de o conjunto de valores ter comprimento par ou ímpar. Em cada caso, o valor da mediana será

(19)

15

Algoritmo 13: Função Moda para conjunto unimodal.

Função Moda(x,f m) numérico

declarar x[]numérico (por referência) { sequência de dados }

declarar f[]numérico (por referência) {sequência de frequências }

declarar m numérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar mf numérico { maior frequência }

declarar moda numérico {moda }

1. mf ←0 { preparando para monitorar as frequências } 2. paraide1 até m,fazer

3. | se (f[i]> mf),então { se frequência atual é maior que valor em mf, então... }

4. | | mff[i] { memoriza qual é a mior frequência } 5. | | modax[i] {armazena o valor correspondente } 6. | fim se

7. fim para

8. retornar moda {retornando valor da moda }

Fim função

Algoritmo 14: Função Mediana.

Função Mediana(x,n) numérico

declarar x[]numérico (por referência) { sequência de dados }

declarar nnumérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar mediananumérico {moda }

1. se(N%2 = 1),então 2. | medianax[(n+ 1)/2] 3. senão

4. | mediana←0,5∗(x[n/2] +x[n/2 + 1]) 5. fim se

6. retornar mediana { retornando valor da mediana }

Fim função

• seN é par: Xmed= 0,5∗(xN/2+xN/2+1)

A mediana corresponde ao segundo quartil do conjunto ordenado de valores. O primeiro quartil é o valor o conjunto em um quarto e três quartos (valores inferiores e superiores ao primeiro quartil respectivamente). O terceiro quartil divide o conjunto ordenado em três quartos e um quarto.

Para um conjunto deM valores ordenados e classificadosxicom suas respectivas frequências fi, a mediana corresponde a um valor real para o qual a soma das frequências é igual a 0,5. Caso a soma das frequências não totalize exatamente 0,5, o valor da mediana será a média ponderada dos dois valores do conjunto, índices p e p+ 1, vizinhos ao valor de frequência acumulada de 0,5:

Xmed=

(F1−0,5)˜xp+ (0,5−F0)˜xp+1

F1−F0 , tal que F0 =

p

X

i=1

fi <0,5 eF1 = p+1

X

i=1

(20)

16

Algoritmo 15: Função Mediana2.

Função Mediana2(x,f m) numérico

declarar x[]numérico (por referência) { sequência de dados }

declarar f[]numérico (por referência) {sequência de frequências }

declarar m numérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar mediananumérico {moda }

1. se(), então

2. senão 3. fim se

4. retornar mediana { retornando valor da mediana }

Fim função

3.3

Parâmetros de dispersão

3.3.1 Amplitude

A amplitude de um conjunto de valores é a diferença entre os valores máximo e mínimo.

Para um conjunto ordenado de valores, é a diferença entre o último (xN) e o primeiro (x1) valores.

A=xN x1

Algoritmo 16: Função Amplitude.

Função Amplitude(x,n)numérico

declarar x[]numérico (por referência) { sequência de dados }

declarar nnumérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar maior,menor numérico { maior e menor valores }

1. maiorx[1] 2. menorx[1]

3. paraide1 até n,fazer

4. | se (x[i]> maior),então 5. | | maiorx[i]

6. | senão se (x[i]< menor),então

7. | | menorx[i] 8. | fim se

9. fim para

10. retornar maiormenor { retornando valor da amplitute }

Fim função

3.3.2 Desvio médio

O desvio médio é a média dos módulos dos desvios (diferença entre cada valor e a média

aritmética do conjunto).

D= 1 N N X i=1 xiX

= M X i=1 fi x˜iX

(21)

17

Algoritmo 17: Função Desvio_Médio.

Função Desvio_Médio(x,n) numérico

declarar x[]numérico (por referência) { sequência de dados }

declarar nnumérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar medianumérico { média }

declarar desvionumérico {desvio }

1. media← Média (x, n) 2. soma←0

3. paraide1 até n,fazer

4. | somasoma+Absoluto (x[i]−media) 5. fim para

6. desviosoma/n 7. retornar desvio

Fim função

Algoritmo 18: Função Desvio_Médio2.

Função Desvio_Médio2(x,f,m)numérico

declarar x[]numérico (por referência) { sequência de dados }

declarar f[∗]numérico (por referência) {sequência de frequências }

declarar m numérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar medianumérico { média }

declarar desvionumérico {desvio }

1. media← Média (x, f, m) 2. desvio←0

3. paraide1 até m,fazer

4. | desviodesvio+ f[i]*Absoluto (x[i]−media) 5. fim para

6. retornar desvio

(22)

18

3.3.3 Variância ou desvio médio quadrático

Variância é a média dos quadrados dos desvios.

V ar=σ2 = 1 N

N

X

i=1

xiX

2 = M X i=1 fi ˜ xiX

2

Também pode ser calculada através da expressão

V ar=σ2 =X2X2

Algoritmo 19: Função Variância.

Função Variância(x,n)numérico

declarar x[]numérico (por referência) { sequência de dados }

declarar nnumérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar var,medianumérico { variância e média }

declarar somanumérico {soma }

1. media← Média (x, n) 2. soma←0

3. paraide1 até n,fazer

4. | somasoma+ (x[i]−media)∗ ∗2 5. fim para

6. varsoma/n 7. retornar var

Fim função

Algoritmo 20: Função Variância2.

Função Variância2(x,f,m) numérico

declarar x[]numérico (por referência) { sequência de dados }

declarar f[]numérico (por referência) {sequência de frequências }

declarar m numérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar var,medianumérico { variância e média }

1. media← Média (x, n) 2. var←0

3. paraide1 até m,fazer

4. | varvar+f[i]∗(x[i]−media)∗ ∗2 5. fim para

6. retornar var

Fim função

3.3.4 Desvio padrão

Desvio padrão de um conjunto de valores é a média quadrática dos desvios ou simplesmente

a raiz da variância.

σ=√V ar =

v u u t 1 N N X i=1

xiX

2 = v u u t M X i=1 fi ˜ xiX

2

=

q

(23)

19

Algoritmo 21: Função Variância3.

Função Variância3(x,f,m) numérico

declarar x[]numérico (por referência) { sequência de dados }

declarar f[∗]numérico (por referência) {sequência de frequências }

declarar m numérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar var,rms,medianumérico { variância, média quadrática e média }

1. media← Média2(x, f, m) 2. rms← Média_Quad2 (x, f, m) 3. varrms∗ ∗2−media∗ ∗2 4. retornar var

Fim função

3.4

Parâmetros de correlação

3.4.1 Covariância

Dado dois conjunto de valores, X e Y, de mesmos comprimentos, a covariância entre os

conjuntos é a média dos produtos dos respectivos desvios.

σxy = 1 N N X i=1

xiX yiY

Também pode ser calculada através da expressão

σxy =XYX YXY = 1 N

N

X

i=1 xiyi

Algoritmo 22: Função Covariância.

Função Covariância(x,y,n) numérico

declarar x[],y[]numéricos(por referência) { sequências de dados }

declarar nnumérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar cov,mx,my numérico { covariância e média em x e y }

declarar somanumérico {soma }

1. mx← Média (x, n) 2. my← Média (y, n) 3. soma←0

4. paraide1 até n,fazer

5. | somasoma+ (x[i]−mx)∗(y[i]−my) 6. fim para

7. covsoma/n 8. retornar cov

(24)

20

3.4.2 Coeficiente de correlação linear de Pearson

O coeficiente de correlação de Pearson, r, é um parâmetro adimensional e indica quão linear é a relação entre dois conjuntos de valores organizados na forma de pares coordenados.

r= σxy σxσy

Algoritmo 23: Função Pearson.

Função Pearson(x,y,n) numérico

declarar x[],y[]numéricos(por referência) { sequências de dados }

declarar nnumérico (por cópia) {comprimento da sequência }

declarar inumérico {variável contadora }

declarar cov,dx,dy numérico { covariância e desvios em x e y }

declarar r numérico { coef. de Pearson }

1. cov← Covariância(x, y, n) 2. dx← Variância (x, n) 3. dy←Variância (y, n) 4. rcov/dxdy 5. retornar r

(25)

Referências Bibliográficas

[1] SANTORO, A.; MAHON, J. R.; OLIVEIRA, J. U. C. L.; MUNDIN FILHO, L. M.; OGURI. V.; SILVA, W. L. P. Estimativas e erros em experimentos de física. Rio de Janeiro: Ed.

EdUerj, 2005.

(26)
(27)

Códigos em Fortran

Referências

Documentos relacionados

No código abaixo, foi atribuída a string “power” à variável do tipo string my_probe, que será usada como sonda para busca na string atribuída à variável my_string.. O

 São TADs representados através de listas sequenciais.. (fixas) ou encadeadas (dinâmicas), em que a seguinte regra deve

função recursiva, mais recursos de memória são necessários para executar o programa, o que pode torná-lo lento ou. computacionalmente

É_Realizada n n (0,3) (0,n) Inscrição Nome RG Expedidor UF Data Média Tipo Nota Questões Número Área Sub-Área Avaliação 3 n Esquema ER para o banco de dados CONCURSO..

Marca Vendedor Veículo Ford João Carro Ford João Caminhão Ford Mário Caminhão Fiat Mário Carro Chevrolet Felipe Carro Chevrolet João Carro Chevrolet João

Membro_Faculdade (Matrícula: Inteiro, Nome: string[50], Carga: Inteiro, IniContrato: data, Curso: string[30], professor: booleano, aluno: booleano). Membro

dois gestores, pelo fato deles serem os mais indicados para avaliarem administrativamente a articulação entre o ensino médio e a educação profissional, bem como a estruturação

Indicações: criptorquia bilateral, diagnóstico diferencial entre testículo criptorquídico e retrátil, testículo retrátil de menor tamanho do que o testículo