#!/usr/local/bin/perl # -*- perl -*- while ( ) { @line = split; $i = 0; foreach $val1 ( @line ) { $j = 0; foreach $val2 ( @line ) { $cross{$i,$j} += $val1 * $val2; $j++; } $i++; } } $rows = $j - 1; $cols = $j; #foreach $row ( 0 .. $rows - 1 ) { # foreach $col ( 0 .. $cols - 1) { # printf "%8d", $cross{$row,$col}; # } # print "\n"; #} # forward elimination foreach $row1 (0 .. $rows - 2) { foreach $row2 ( $row1 + 1 .. $rows - 1) { $coeff = - $cross{$row2,$row1} / $cross{$row1,$row1}; $cross{$row2,$row1} = 0; foreach $col ( $row1 + 1 .. $cols - 1 ) { $cross{$row2,$col} += $coeff * $cross{$row1,$col}; } } } # backward substitution foreach $i (1 .. $rows) { $row = $rows - $i; $val = $cross{$row, $cols - 1}; foreach $col ( $row + 1 .. $cols - 2 ) { $val -= $sol[$col] * $cross{$row,$col}; } $sol[$row] = $val / $cross{$row,$row}; } # print answer print "@sol\n";