37 lines
853 B
Go
37 lines
853 B
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)))
|
|
}
|