行列計算用のHaskellライブラリ hmatrix を入れる. (Ubuntu 8.10)

http://www.hmatrix.googlepages.com/

f:id:jeneshicc:20090314222904p:image

概要

Haskellで行列計算したとき,あるじゃないですか.

そんなときは,hmatrixというライブラリを使おう.

でも標準ではインストールされない.それを使えるようにしよう.

目標

Haskellの行列計算用ライブラリ hmatrix

http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hmatrix-0.5.0.1

をインストールし,使えるようにする.

環境

  • Ubuntu 8.10
  • ghc 6.8.2
  • hmatrix 0.5.0.1

参考

http://www.hmatrix.googlepages.com/installation

必要な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 (2r2)
where r2 = xx+yy
f :: (Floating a) => a -> a
f x = sin x + 0.5  sin (5x)
main = do
let x = linspace 1000 (-4,4)
mplot [f x]
plot2D sombrero 40

そして,

ghc –make plot.hs
./plot

とすれば…

グラフが表示される!!

こんな感じ.

f:id:jeneshicc:20090314223058p:image

f:id:jeneshicc:20090314223117p:image

内部ではgnuplot や imageMagickを使用してるらしい.

More Reading
Newer// Problem 227
Older// Problem 223