Deconvolution/1D: Difference between revisions
m
→{{header|Perl}}: v5.36 for subroutine signatures
Thundergnat (talk | contribs) m (syntax highlighting fixup automation) |
SqrtNegInf (talk | contribs) 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
use Math::Cartesian::Product;
sub deconvolve($g,$f) {
my(@m,@d);
Line 947 ⟶ 948:
}
sub convolve($f,$h) {
my @i;
for my $x (cartesian {@_} [0..$#f], [0..$#h]) {
Line 962 ⟶ 963:
}
sub rref($m) {
@m or return;
my ($lead, $rows, $cols) = (0, scalar(@m), scalar(@{$m[0]}));
$lead < $cols or return;
my $i = $r;
until ($m[$i][$lead]) {
$i = $r;
++$lead == $cols and return;
}
@m[$i, $r] = @m[$r, $i];
Line 981 ⟶ 983:
my @mr = @{ $m[$r] };
($lv, my $n) = ($m[$i][$lead], -1);
$_ -= $lv * $mr[++$n] foreach @{ $m[$i] };
}
++$lead;
}
}
|