一次方程式を解く

やっつけコーディング。

use YAML;

my $matrix = [
#       [ 2, 1, 1],
#       [ 3, 1, 2]
        [ 2, 1, 21],
        [ 3, 1, 41]
];


sub equation {
        my $matrix = shift;

        # http://gihyo.jp/dev/serial/01/java-calculation/0043?page=2
        my $n = $matrix->[0]->[0];
        for (my $i = 0; $i < 3; $i++) {
                $matrix->[0]->[$i] /= $n;
        }

        my $m = $matrix->[1]->[0];
        for (my $i = 0; $i < 3; $i++) {
                $matrix->[1]->[$i]  -= $matrix->[0]->[$i] * $m;
        }

        my $l = $matrix->[1]->[1];
        for (my $i = 1; $i < 3; $i++) {
                $matrix->[1]->[$i]  /= $l;
        }

        my $k = $matrix->[0]->[1];
        for (my $i = 1; $i < 3; $i++) {
                $matrix->[0]->[$i]  -= $matrix->[1]->[$i] * $k;
        }

        return ($matrix->[0]->[2], $matrix->[1]->[2] );
}

print YAML::Dump equation($matrix);