#!/usr/local/bin/perl -W

while (<DATA>){
    next if (/^#/);
    last if (/__END__/);
    print ;
    chomp;
    next unless ($_);
    $i++;
    $x[$i] = $_;
}
$n = $i;
print "Orden de autorregresión = ";
chomp ($p = <STDIN>);
$k = 1/$p;

for $i (1..$p){
    $w[$i]=$k;
}

$smin = 9e99;

while (++$iter<100000){
    $s=$h1=0;
    for $i ($p+1..$n){
	$f=0;
	for $j (1..$p){
	    $f+=$w[$j]*$x[$i-$j];
	    $h1+=$x[$i-$j]**2;
	}
	$h1=sqrt($h1);
	$e[$i]=$x[$i]-$f;
	for $j (1..$p){
	    $w[$j]+= 2*$k*$e[$i]/$h1*$x[$i-$j]/$h1;
	}
	$s+=$e[$i]**2;
    }
    print "\r$iter\t", $s/($n-$p+1);
    if ($s>=$smin){ 
#	last; 
    }else { 
	$smin=$s; 
	@wopt = @w;
    }
}
print "\nNúmero de predicciones = ";
chomp ( $m = <STDIN> );
for $i ($n+1..$n+$m){
    $f=0;
    for $j (1..$p){
	$f+=$wopt[$j]*$x[$i-$j];
    }
    print "$i) $f\n";
    $x[$i] = $f;
}
print "Pesos:\n";
for $j (1..$p){
    print "$wopt[$j]\n";
}
__DATA__
25
28
30
26
25
29
31
33
35
36
__END__

Adaptado de un programa en basic de 1991, a su vez adaptado de Spyro Makridakis.
  
