- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 
                        samples = [(1,14),(2,-66),(3,-414),(4,-1180),(5,-2370),(6,-3726),(7,-4606),(8,-3864),(9,270)]
 
-- Бесконечная система уравнений для МНК
system s = zip (matrix s) (column s) where
    matrix = iterate tail . foldr1 (zipWith (+)) . map (\(x,y) -> iterate (*x) 1)
    column = foldr1 (zipWith (+)) . map (\(x,y) -> iterate (*x) y)
 
-- Сведение бесконечной системы к треугольному виду (первый шаг гаусса)
triangle (eq:eqs) = (eq : triangle (map (sub eq) eqs)) where
    sub eq1@(a1:as, ae) eq2@(b1:bs, be) = (zipWith f as bs, f ae be) where
        f a b = b - a * b1 / a1
 
-- Вычисление иксов (второй шаг гаусса)
calcX n = foldr calc [] . take n where
    calc (a:as, b) xs = ((b - sum (zipWith (*) as xs)) / a : xs)
 
-- метод наименьших квадратов
mnk n = reverse . calcX n . triangle . system
                                     
        
            Метод наименьших квадратов.
http://ideone.com/CsD0ku