RosettaCodeData/Task/Deconvolution-1D/Haskell/deconvolution-1d-1.hs

17 lines
513 B
Haskell

import Data.List
h, f, g :: [Double]
h = [-8,-9,-3,-1,-6,7]
f = [-3,-6,-1,8,-6,3,-1,-9,-9,3,-2,5,2,-2,-7,-1]
g = [24,75,71,-34,3,22,-45,23,245,25,52,25,-67,-96,96,31,55,36,29,-43,-7]
scale x ys = map (x*) ys
deconv1d :: (Fractional a) => [a] -> [a] -> [a]
deconv1d xs ys = takeWhile (/=0) $ deconv xs ys
where [] `deconv` _ = []
(0:xs) `deconv` (0:ys) = xs `deconv` ys
(x:xs) `deconv` (y:ys) =
q : zipWith (-) xs (scale q ys ++ repeat 0) `deconv` (y:ys)
where q = x / y