Gaussian elimination: Difference between revisions

Line 1,468:
isSquareMatrix xs = null xs || all ((== (length xs)).length) xs
 
multiplymult:: Num a => [[a]] -> [[a]] -> [[a]]
mult uss vss = map (foldl (zipWith (+)) ts . zipWith (\vs u -> map (u*) vs) vss) uss
multiply us vs = map (mult [] vs) us
where ts = map (const 0).concat $ take 1 vss
where
mult xs [] _ = xs
mult xs _ [] = xs
mult [] (zs:zss) (y:ys) = mult (map (\v -> v*y) zs) zss ys
mult xs (zs:zss) (y:ys) = mult (zipWith (\u v -> u+v*y) xs zs) zss ys
 
gauss::[[Double]] -> [[Double]] -> [[Double]]
Line 1,488 ⟶ 1,484:
solveTriangle ([c]:as) (b:bs) = go as bs [map (/c) b]
where
val us vs ws = let u = head us in map (/u) $ zipWith (-) vs (head $ multiplymult [tail us] ws)
go [] _ zs = zs
go _ [] zs = zs
678

edits