#!/usr/bin/perl # Simple linear fitting using the Least Squares method # (c) 2003 Martin Mares , GPL'ed use strict; use warnings; my $n = 0; my $sx = 0; my $sy = 0; my $sxy = 0; my $sxx = 0; my $syy = 0; while () { chomp; my ($x, $y) = split /\s+/; $n++; $sx += $x; $sy += $y; $sxy += $x * $y; $sxx += $x * $x; $syy += $y * $y; } $n || die "No data found"; my $b = ($n*$sxy - $sx*$sy) / ($n*$sxx - $sx*$sx); my $a = ($sy - $sx*$b) / $n; my $d = $syy - 2*$sy*$a - 2*$sxy*$b + $a*$a*$n + 2*$sx*$a*$b + $sxx*$b*$b; my $var = $d / $n; my $stdd = sqrt($var); printf "Number of records: %d\n", $n; printf "a: %.9f\n", $a; printf "b: %.9f\n", $b; printf "1/b: %.3f\n", 1/$b; printf "Variance: %.3f\n", $var; printf "Std. deviation: %.3f\n", $stdd;