LU decomposition: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (→{{header|Perl 6}}: Add Perl 6 example) |
Thundergnat (talk | contribs) m (→{{header|Perl 6}}: minor tweaks, remove some superstitious parentheses) |
||
Line 1,875: | Line 1,875: | ||
die unless @a.&is-square; |
die unless @a.&is-square; |
||
my $n = +@a; |
my $n = +@a; |
||
⚫ | |||
⚫ | |||
my @P = pivotize @a; |
my @P = pivotize @a; |
||
my @A = mmult @P, @a; |
my @A = mmult @P, @a; |
||
⚫ | |||
⚫ | |||
for ^$n -> $i { |
for ^$n -> $i { |
||
for ^$n -> $j { |
for ^$n -> $j { |
||
if $j >= $i { |
if $j >= $i { |
||
@U[$i][$j] = @A[$i][$j] - [+] map { @U[$_][$j] * @L[$i][$_] }, ^$i |
@U[$i][$j] = @A[$i][$j] - [+] map { @U[$_][$j] * @L[$i][$_] }, ^$i |
||
} else { |
} else { |
||
@L[$i][$j] = (@A[$i][$j] - [+] map { @U[$_][$j] * @L[$i][$_] }, ^$j) / @U[$j][$j]; |
@L[$i][$j] = (@A[$i][$j] - [+] map { @U[$_][$j] * @L[$i][$_] }, ^$j) / @U[$j][$j]; |
||
Line 1,913: | Line 1,913: | ||
sub is-square (@m) { so @m == all @m[*] } |
sub is-square (@m) { so @m == all @m[*] } |
||
sub matrix-zero ($n, $m = $n) { map |
sub matrix-zero ($n, $m = $n) { map { [ flat 0 xx $n ] }, ^$m } |
||
sub matrix-ident ($n) { map |
sub matrix-ident ($n) { map { [ flat 0 xx $_, 1, 0 xx $n - 1 - $_ ] }, ^$n } |
||
sub mmult(@a,@b) { |
sub mmult(@a,@b) { |