Deconvolution/1D: Difference between revisions

m
→‎{{header|Perl}}: v5.36 for subroutine signatures
m (syntax highlighting fixup automation)
m (→‎{{header|Perl}}: v5.36 for subroutine signatures)
Line 928:
Using <code>rref</code> routine from [[Reduced row echelon form#Perl|Reduced row echelon form]] task.
{{trans|Raku}}
<syntaxhighlight lang="perl">use Math::Cartesian::Productv5.36;
use Math::Cartesian::Product;
 
sub deconvolve($g,$f) {
ourmy @g; local= *@{$g = shift};
ourmy @f; local= *@{$f = shift};
my(@m,@d);
 
Line 947 ⟶ 948:
}
 
sub convolve($f,$h) {
ourmy @f; local= *@{$f = shift};
ourmy @h; local= *@{$h = shift};
my @i;
for my $x (cartesian {@_} [0..$#f], [0..$#h]) {
Line 962 ⟶ 963:
}
 
sub rref($m) {
ourmy @m; local= *@{$m = shift};
@m or return;
my ($lead, $rows, $cols) = (0, scalar(@m), scalar(@{$m[0]}));
 
foreachfor my $r (0 .. $rows - 1) {
$lead < $cols or return;
my $i = $r;
 
until ($m[$i][$lead]) {
{ ++$i == $rows or next;
$i = $r;
++$lead == $cols and return;}
}
 
@m[$i, $r] = @m[$r, $i];
Line 981 ⟶ 983:
 
my @mr = @{ $m[$r] };
foreachfor my $i (0 .. $rows - 1) {
{ $i == $r and next;
($lv, my $n) = ($m[$i][$lead], -1);
$_ -= $lv * $mr[++$n] foreach @{ $m[$i] };}
}
 
++$lead;}
}
}
 
2,392

edits