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
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
Métodos computacionais em
estatística básica
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
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,N−2 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:
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. | | | tmp←x[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
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é N−1,fazer
2. | paraj de i+ 1até N,fazer 3. | | se(x[i]> x[j]), então 4. | | | tmp←x[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
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. | tmp←seq[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. | tmp←seq[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. | tmp←seq[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. | tmp←seq[p+ 1]
12. | seq[p+ 1]←seq[p+ 2] 13. | seq[p+ 2]←tmp 14. fim se
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 possuiq−p elementos e a segunda parte, r−q+ 1. O comprimento total das duas sequências juntas ét=r−p+ 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. i←p
3. j←q
4. parakde 1até t,fazer 5. | se (seq[i]≤seq[j]),então 6. | | tmp[k]←seq[i]
7. | | i←i+ 1 8. | senão
9. | | tmp[k]←seq[j] 10. | | j←j+ 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.
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. | le←n/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
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[n−1];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 ⇒ q←q+p[1] = (0) +p[1] =p[1] i= 2 ⇒ q←q+p[2] = (p[1]) +p[2] i= 3 ⇒ q←q+p[3] = (p[1] +p[2]) +p[3]
· · ·
i=n−1 ⇒ q←q+p[n−1] = (p[1] +p[2] +p[3] +· · ·+p[n−2]) +p[n−1]
i=n ⇒ q←q+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
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. | q ←q+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. | q ←q∗p[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 ⇒ q←q∗p[1] = (1)∗p[1] =p[1] i= 2 ⇒ q←q∗p[2] = (p[1])∗p[2] i= 3 ⇒ q←q∗p[3] = (p[1]∗p[2])∗p[3]
· · ·
i=n−1 ⇒ q←q∗p[n−1] = (p[1]∗p[2]∗p[3]∗ · · · ∗p[n−2])∗p[n−1]
i=n ⇒ q←q∗p[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
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. | med←med+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 =
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. | s←s+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. | med2←med2 +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á
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. | | mf ←f[i] { memoriza qual é a mior frequência } 5. | | moda←x[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. | mediana←x[(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
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. maior←x[1] 2. menor←x[1]
3. paraide1 até n,fazer
4. | se (x[i]> maior),então 5. | | maior←x[i]
6. | senão se (x[i]< menor),então
7. | | menor←x[i] 8. | fim se
9. fim para
10. retornar maior−menor { 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 xi−X
= M X i=1 fi x˜i−X
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. | soma←soma+Absoluto (x[i]−media) 5. fim para
6. desvio←soma/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. | desvio←desvio+ f[i]*Absoluto (x[i]−media) 5. fim para
6. retornar desvio
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
xi−X
2 = M X i=1 fi ˜ xi−X
2
Também pode ser calculada através da expressão
V ar=σ2 =X2−X2
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. | soma←soma+ (x[i]−media)∗ ∗2 5. fim para
6. var←soma/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. | var←var+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
xi−X
2 = v u u t M X i=1 fi ˜ xi−X
2
=
q
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. var←rms∗ ∗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
xi−X yi−Y
Também pode ser calculada através da expressão
σxy =XY −X Y ∴XY = 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. | soma←soma+ (x[i]−mx)∗(y[i]−my) 6. fim para
7. cov←soma/n 8. retornar cov
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. r←cov/√dx∗dy 5. retornar r
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.