packages feed

toysolver-0.0.2: src/Data/Polynomial/Lagrange.hs

-- http://en.wikipedia.org/wiki/Lagrange_polynomial
module Data.Polynomial.Lagrange
  ( interpolation
  ) where

import Data.Polynomial

interpolation :: (Eq k, Fractional k) => [(k,k)] -> UPolynomial k
interpolation zs = sum $ do
  (xj,yj) <- zs
  let lj x = product [constant (1 / (xj - xm)) * (x - constant xm) | (xm,_) <- zs, xj /= xm]
  let x = var ()
  return $ constant yj * lj x