Como gostei muito da ferramenta e para privilegiar seu foco educacional, vou usar o Squeak.
Abra o System Browser e, se não tiver o pacote
Kodumaro
, crie-o. Crie então a categoria Kodumaro-Variance
.Crie então a seguinte classe:
FloatArray subclass: #VariantiableArray
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Kodumaro-Variance'
Agora os métodos…
Na categoria
math functions
, crie o método rms
:rms
"Calculates and returns the root mean square"
| aux |
aux := 0.
self do: [ :e |
aux := aux + (e * e)
].
↑ (aux / self size) sqrt
É claro que poderíamos criar um método para retornar o numerador do cálculo, mas vou fazer diferente. =)
Vamos implementar a variância populacional com média aritmética –
average
, herdado de Collection
, já que costuma ser um valor mais redondo – e a variância da amostra com média quadrada, ambas também na categoria math functions
.populationalVariance
"Calculates and returns the populational variance"
| aux mean |
aux := 0.
mean := self average.
self do: [ :e | | temp |
temp := e - mean.
aux := aux + (temp * temp).
].
↑ aux / self size
Agora a variância amostral:
sampleVariance
"Calculates and returns the sample variance"
| aux mean |
aux := 0.
mean := self rms.
self do: [ :e | | temp |
temp := e - mean.
aux := aux + (temp * temp).
].
↑ aux / (self size - 1)
Está pronto!
— Como assim? Só isso?
É, só isso. =)
Vamos testar, abra um
Workspace
e digite:| v |
v := VariantiableArray newFrom: #(1 2 3 4 5).
Transcript
open;
show: 'Média aritmética: ', v average printString; cr;
show: 'Média quadrada: ', v rms printString; cr;
show: 'Variância populacional: ', v populationalVariance printString; cr;
show: 'Variância da amostra: ', v sampleVariance printString; cr.
Pressione M-a M-d para executar.
[]'s
Cacilhas, La Batalema