Reduced row echelon form: Difference between revisions
m
→{{header|Perl 6}}: Updated to work with latest Rakudo, minor updates
m (changed test orders) |
Thundergnat (talk | contribs) m (→{{header|Perl 6}}: Updated to work with latest Rakudo, minor updates) |
||
Line 2,381:
=={{header|Perl 6}}==
{{trans|Perl}}
{{works with|Rakudo|
<lang perl6>sub rref (@m
@m or return;
my ($lead, $rows, $cols) = 0, +@m, +@m[0];
for ^$rows -> $r {
return @m if $lead
my $i = $r;
until @m[$i][$lead] {
++$i == $rows or next;
Line 2,407:
++$lead;
}
@m
}
sub
return $num unless $num ~~ Rat;
return $num.
}
sub say_it ($message, @array) {
say "\n$message";
$_».&
}
Line 2,559:
First, a procedural version:
<lang perl6>sub swap_rows ( @M, $r1, $r2 ) { @M[ $r1, $r2 ] = @M[ $r2, $r1 ] };
sub scale_row ( @M, $scale, $r ) { @M[$r] = @M[$r]
sub shear_row ( @M, $scale, $r1, $r2 ) { @M[$r1] = @M[$r1].list
sub reduce_row ( @M, $r, $c ) { scale_row( @M, 1/@M[$r][$c], $r ) };
sub clear_column ( @M, $r, $c ) {
Line 2,594:
<lang perl6>class Matrix is Array {
method unscale_row ( @M: $scale, $row ) {
@M[$row] = @M[$row]
}
method unshear_row ( @M: $scale, $r1, $r2 ) {
@M[$r1] = @M[$r1]
}
method reduce_row ( @M: $row, $col ) {
Line 2,626:
}
my $M = Matrix.new
[< 1 2 -1 -4 >],
[< 2 3 -1 -11 >],
|