Haskell 언어로 행렬 곱셈하는 간단한 소스
(정수로 이루어진 행렬, 분수로 이루어진 행렬, 부동소수점수로 이루어진 행렬, 복소수로 이루어진 행렬 들릐 곱셈을 처리합니다.)
--
-- 참조: http://rosettacode.org/wiki/Matrix_multiplication#Haskell
module Main where
import Data.Complex
import Data.Ratio
import Text.Printf
import Data.List
-- 행렬 곱셉 함수
mmult :: Num a => [[a]] -> [[a]] -> [[a]]
mmult a b = [ [ sum $ zipWith (*) ar bc | bc <- (transpose b) ] | ar <- a ]
-- 사용 예
main :: IO ()
main = do
-- matrix of integers
let test = [[1, 2],
[3, 4]] `mmult` [[-3, -8, 3],
[-2, 1, 4]]
print test
-- matrix of floats
let test = [[1.0, 2.0],
[3.0, 4.0]] `mmult` [[-3, -8, 3],
[-2, 1, 4]]
print test
-- matrix of fraction
let test = [[(1 % 1), (2 % 1)],
[(3 % 1), (4 % 1)]] `mmult` [[-3, -8, 3],
[-2, 1, 4]]
print test
-- matrix of complex numbers
let test = [[(1 :+ 1), (2 :+ 1)],
[(3 :+ 1), (4 :+ 1)]] `mmult` [[-3, -8, 3],
[-2, 1, 4]]
print test
{-
실행: runhaskell testMatrixMultiplication.hs
출력:
-------------------------------------------
[[-7,-6,11],[-17,-20,25]]
[[-7.0,-6.0,11.0],[-17.0,-20.0,25.0]]
[[(-7) % 1,(-6) % 1,11 % 1],[(-17) % 1,(-20) % 1,25 % 1]]
[[(-7.0) :+ (-5.0),(-6.0) :+ (-7.0),11.0 :+ 7.0],[(-17.0) :+ (-5.0),(-20.0) :+ (-7.0),25.0 :+ 7.0]]
-}
'프로그래밍 > Haskell' 카테고리의 다른 글
이진 파일을 읽어서 16진수로 보여주는 HexView 소스 with Haskell (0) | 2013.08.20 |
---|---|
Haskell 언어로 역삼각함수, 역쌍곡선함수 값을 구하는 예제 (0) | 2013.01.03 |
Haskell 언어로 복소수 계산과 분수 계산 쉽게 하기 (0) | 2012.05.27 |
이차방정식 풀이 with Haskell (0) | 2012.05.23 |
30000! 빨리 계산하기 with Haskell (0) | 2010.07.20 |