行列計算用のHaskellライブラリ hmatrix を入れる. (Ubuntu 8.10)
http://www.hmatrix.googlepages.com/
概要
Haskellで行列計算したとき,あるじゃないですか.
そんなときは,hmatrixというライブラリを使おう.
でも標準ではインストールされない.それを使えるようにしよう.
目標
Haskellの行列計算用ライブラリ hmatrix
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hmatrix-0.5.0.1
をインストールし,使えるようにする.
必要なHaskellライブラリのインストール
(cabal install を使うという方法もあるが,そんなに,ライブラリをインストールしないと思われるので,手動で)
とりあえず,依存関係は次のようになっている.
base (<3), haskell98, HUnit, QuickCheck, storable-complex or
array, base (>=3), haskell98, HUnit, QuickCheck, storable-complex
インストール済みのパッケージは
ghc-pkg -list
で分かる.
多分,array, base, haskell98はUbuntuでも標準で入っていると思う.
Hunit, QuickCheck は apt-get で入れられる.
sudo apt-get install libghc6-hunit-dev libghc6-quickcheck-dev
とか,-doc, -profもある.
storable-complexはapt-getでは入れられないみたい(パッケージがない).
そこで,
http://hackage.haskell.org/packages/archive/storable-complex/0.2/storable-complex-0.2.tar.gz
から,ソースをもらい,自分でインストールする.
tar -xzf storable-complex-0.2.tar.gz cd storable-complex-0.2 runhaskell Setup configure sudo runhaskell Setup install
インストール後 ghc-pkg -list とすると,
/usr/lib/ghc-6.8.2/package.conf: Cabal-1.2.3.0, HUnit-1.2.0.0, QuickCheck-1.1.0.0, array-0.1.0.0, base-3.0.1.0, bytestring-0.9.0.1, containers-0.1.0.1, directory-1.0.0.0, filepath-1.1.0.0, (ghc-6.8.2), haskell98-1.0.1.0, hpc-0.5.0.0, mtl-1.1.0.0, old-locale-1.0.0.0, old-time-1.0.0.0, packedstring-0.1.0.0, pretty-1.0.0.0, process-1.0.0.0, random-1.0.0.0, readline-1.0.1.0, rts-1.0, storable-complex-0.2, template-haskell-2.2.0.0, unix-2.3.0.0
こんな感じで,storable-complex-0.2がインストールされているのが分かる.
これで多分,依存関係は大丈夫.
他のライブラリのインストール
Haskellライブラリの他にもGSL, BLAS/LAPCKというものが必要らしい.
sudo apt-get install libgsl0-dev libblas-dev liblapack-dev libatlas-base-dev
これでインストールできる.
ついでに提案パッケージもインストールしておく
sudo apt-get install libblas-doc liblapack-doc libatlas3gf-3dnow libatlas3gf-sse libatlas3gf-ss
hmatrixのインストール
やっと,本題.
tar -xzf hmatrix-0.5.0.1.tar.gz cd hmatrix-0.5.0.1 runhaskell Setup configure runhaskell Setup build sudo runhaskell Setup install
簡単.
テスト
% ghci GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help Loading package base ... linking ... done. Prelude> import Numeric.LinearAlgebra.Tests Prelude Numeric.LinearAlgebra.Tests> runTests 20 Loading package array-0.1.0.0 ... linking ... done. Loading package old-locale-1.0.0.0 ... linking ... done. Loading package old-time-1.0.0.0 ... linking ... done. Loading package random-1.0.0.0 ... linking ... done. Loading package filepath-1.1.0.0 ... linking ... done. Loading package directory-1.0.0.0 ... linking ... done. Loading package unix-2.3.0.0 ... linking ... done. Loading package process-1.0.0.0 ... linking ... done. Loading package haskell98 ... linking ... done. Loading package HUnit-1.2.0.0 ... linking ... done. Loading package QuickCheck-1.1.0.0 ... linking ... done. Loading package storable-complex-0.2 ... linking ... done. Loading package hmatrix-0.5.0.1 ... linking ... done. ------ mult OK, passed 100 tests. OK, passed 100 tests. OK, passed 100 tests. OK, passed 100 tests. ------ lu OK, passed 100 tests. OK, passed 100 tests. (中略) ------ some unit tests Cases: 13 Tried: 13 Errors: 0 Failures: 0
どうやら,しっかりインストールされているようです.
めでたし,めでたし.
少し遊んでみる
plot.hsとして,次を作成.
import Numeric.LinearAlgebra import Graphics.Plot plot2D f n = mesh (f x y) where (x,y) = meshdom range range range = linspace n (-2,2) sombrero :: (Floating a) => a -> a -> a sombrero x y = exp (-r2) * cos (2*r2) where r2 = x*x+y*y f :: (Floating a) => a -> a f x = sin x + 0.5 * sin (5*x) main = do let x = linspace 1000 (-4,4) mplot [f x] plot2D sombrero 40
そして,
ghc --make plot.hs ./plot
内部ではgnuplot や imageMagickを使用してるらしい.