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