Jump to content

Gauss-Jordan matrix inversion: Difference between revisions

m
→‎{{header|Raku}}: sync up 'rref'
(→‎{{header|jq}}: matrix(1;_;_))
m (→‎{{header|Raku}}: sync up 'rref')
Line 3,392:
=={{header|Raku}}==
(formerly Perl 6)
 
{{works with|Rakudo|2019.03.1}}
Uses bits and pieces from other tasks, [[Reduced_row_echelon_form#Raku|Reduced row echelon form]] primarily.
 
Line 3,404:
sub identity ($n) { [ 1, |(0 xx $n-1) ], *.rotate(-1).Array ... *.tail }
 
# reduced row echelon form (from 'Gauss-Jordan elimination' task)
sub rref (@m) {
my ($lead, $rows, $cols) = 0, +@m, +@m[0];
return unless @m;
my ($lead, $rows, $cols) = 0, +@m, +@m[0];
 
for ^$rows -> $r {
Line 3,418 ⟶ 3,417:
}
@m[$i, $r] = @m[$r, $i] if $r != $i;
my@m[$r] »/=» $lv = @m[$r;$lead];
@m[$r] »/=» $lv;
for ^$rows -> $n {
next if $n == $r;
@m[$n] »-=» @m[$r] »*×» (@m[$n;$lead] // 0);
}
++$lead;
Line 3,428 ⟶ 3,426:
@m
}
 
sub rat-or-int ($num) {
return $num unless $num ~~ Rat|FatRat;
return $num.narrow if $num.narrow.WHAT ~~ Int;
$num.nude.join: '/';
}
2,392

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.