Облегчённая версия программы, может кому пригодится.
Код:
#!/usr/bin/perl -w
# Least squares method.
open( DAT, "< 1.dat" ) or die "Couldn't open file for &!\n";
while ( $line = <DAT> ) {
$line =~ m/^([^\s]+)\s+([^\s]+)\s+([^\s]+)/gi;
push @x, $1;
push @y, $2;
push @z, $3;
$n++;
}
for ( $i = 0 ; $i <= $n - 1 ; $i++ ) {
$A1 += 1 / $z[$i]**2;
$A2 += $x[$i]**2 / $z[$i]**2;
$A3 += $x[$i] / $z[$i]**2;
$A4 += $y[$i] / $z[$i]**2;
$A5 += $x[$i] * $y[$i] / $z[$i]**2;
}
$delta = $A1 * $A2 - $A3**2;
$b = sprintf( "%.6e", 1 / $delta * ( $A4 * $A2 - $A5 * $A3 ) );
$a = sprintf( "%.6e", 1 / $delta * ( $A5 * $A1 - $A4 * $A3 ) );
$delta_b = sprintf( "%.6e", sqrt( 1 / $delta * $A3 ) );
$delta_a = sprintf( "%.6e", sqrt( 1 / $delta * $A1 ) );
close(DAT);
# Data output
print "A = $a Delta A = $delta_a\n";
print "B = $b Delta B = $delta_b\n";