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

f🆔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 (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

とすれば…

グラフが表示される!!

こんな感じ.

f🆔jeneshicc:20090314223058p:image

f🆔jeneshicc:20090314223117p:image

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