czwartek, 10 lutego 2011

Średnia ruchoma aka moving average

Poniżej nie do końca sprawdzona procedura wyznaczania średniej ruchomej zwykłej, zaimplementowana w Perlu:


#!/usr/bin/perl
my @qq= (1, 2, 6, 7, 10, 11, 11, 12, 13); # 9 elementów

print "Oryginalne:: @qq\n";

$ref_av = moving_avg(\@qq, 3);
print "Uśrednione:: @{$ref_av}\n";

$ref_av = moving_avg(\@qq, 7);
print "Uśrednione:: @{$ref_av}\n";

# ## ## ## ## ## ## ##
sub moving_avg {
my $wlista = shift; # wskaźnik do listy, która będzie uśredniona
my $lokr = shift; # liczba okresów

my $i; my $total ;

my @lista_av = @{$wlista};

for ($i=0; $i < $lokr; $i++) { $total += ${$wlista}[$i] ; }

## trzeba sprawdzić czy jest OK; nie jestem pewien
for ($i = $lokr; $i <= $#{$wlista} + 1; $i++) {
$lista_av[$i] = $total / $lokr ;
$total += ${$wlista}[$i] - ${$wlista}[$i - $lokr];
}

return \@lista_av; ## zwróć wskaźnik do listy z uśredn. wartościami
}

Brak komentarzy:

Prześlij komentarz