Deconvolution/1D: Difference between revisions

→‎{{header|zkl}}: added GSL solution
m (→‎{{header|Perl 6}}: bug in 'trim_system', omit)
(→‎{{header|zkl}}: added GSL solution)
Line 1,106:
 
=={{header|zkl}}==
Using GNU Scientific Library:
<lang zkl>var [const] GSL=Import("zklGSL"); // libGSL (GNU Scientific Library)
fcn dconv1D(f,g){
fsz,hsz:=f.len(), g.len() - fsz +1;
A:=GSL.Matrix(g.len(),hsz);
foreach n,fn in ([0..].zip(f)){ foreach rc in (hsz){ A[rc+n,rc]=fn } }
h:=A.AxEQb(g);
h
}</lang>
<lang zkl>f:=GSL.VectorFromData(-3,-6,-1,8,-6,3,-1,-9,-9,3,-2,5,2,-2,-7,-1);
g:=GSL.VectorFromData(24,75,71,-34,3,22,-45,23,245,25,52,25,-67,-96,96,31,55,36,29,-43,-7);
h:=dconv1D(f,g);
h.format().println();
 
f:=dconv1D(h,g);
f.format().println();</lang>
{{out}}
<pre>
-8.00,-9.00,-3.00,-1.00,-6.00,7.00
-3.00,-6.00,-1.00,8.00,-6.00,3.00,-1.00,-9.00,-9.00,3.00,-2.00,5.00,2.00,-2.00,-7.00,-1.00
</pre>
Or, using lists:
{{trans|D}}
<lang zkl>fcn deconv(g,f){
Anonymous user