Deconvolution/1D: Difference between revisions

→‎{{header|Go}}: add new solution using gonum library
(→‎{{header|Go}}: add new solution using gonum library)
Line 507:
[-3.0 -6.0 -1.0 8.0 -6.0 3.0 -1.0 -9.0 -9.0 3.0 -2.0 5.0 2.0 -2.0 -7.0 -1.0]
[-3.0 -6.0 -1.0 8.0 -6.0 3.0 -1.0 -9.0 -9.0 3.0 -2.0 5.0 2.0 -2.0 -7.0 -1.0]
</pre>
'''Library gonum/mat:'''
<lang go>package main
 
import (
"fmt"
 
"gonum.org/v1/gonum/mat"
)
 
var (
h = []float64{-8, -9, -3, -1, -6, 7}
f = []float64{-3, -6, -1, 8, -6, 3, -1, -9, -9, 3, -2, 5, 2, -2, -7, -1}
g = []float64{24, 75, 71, -34, 3, 22, -45, 23, 245, 25, 52, 25, -67, -96,
96, 31, 55, 36, 29, -43, -7}
)
 
func band(g, f []float64) *mat.Dense {
nh := len(g) - len(f) + 1
b := mat.NewDense(len(g), nh, nil)
for j := 0; j < nh; j++ {
for i, fi := range f {
b.Set(i+j, j, fi)
}
}
return b
}
 
func deconv(g, f []float64) mat.Matrix {
z := mat.NewDense(len(g)-len(f)+1, 1, nil)
z.Solve(band(g, f), mat.NewVecDense(len(g), g))
return z
}
 
func main() {
fmt.Printf("deconv(g, f) =\n%.1f\n\n", mat.Formatted(deconv(g, f)))
fmt.Printf("deconv(g, h) =\n%.1f\n", mat.Formatted(deconv(g, h)))
}</lang>
{{out}}
<pre>
deconv(g, f) =
⎡-8.0⎤
⎢-9.0⎥
⎢-3.0⎥
⎢-1.0⎥
⎢-6.0⎥
⎣ 7.0⎦
 
deconv(g, h) =
⎡-3.0⎤
⎢-6.0⎥
⎢-1.0⎥
⎢ 8.0⎥
⎢-6.0⎥
⎢ 3.0⎥
⎢-1.0⎥
⎢-9.0⎥
⎢-9.0⎥
⎢ 3.0⎥
⎢-2.0⎥
⎢ 5.0⎥
⎢ 2.0⎥
⎢-2.0⎥
⎢-7.0⎥
⎣-1.0⎦
</pre>
 
1,707

edits