[はじめに]

行列クラスMatの使い方を学ぶため, SDMSimpleディレクトリ下の以下の
ディレクトリに移動しよう:

  > cd Example/Example.Mat/

このディレクトリには4つのソースファイル: 

  main1.cc
  main2.cc
  main3.cc
  main4.cc

が保存されている. これらのソースファイルの中身を確認しながら実行
することにより, Matクラスの基本的な使い方を理解しよう. 

[コンパイル]

これらのソースファイルをコンパイルするには, Makefileをこのディレ
クトリにコピーする必要がある:

  > cp ../../SDMSimple/Makefile ./

main1.ccをコンパイルする場合, 

  > gmake main1

とコマンドすることにより関連するファイルすべてが自動的にコンパイ
ルされる(main2.cc, main3.cc, main4.ccの場合も同様).

すべてのソースファイルを一度にコンパイルしたいときは, 単に, 

  > gmake

とコマンドするだけでよい(Makefileは該当ディレクトリのすべての .cc
ファイルを探しだしそれらすべてをコンパイルする).

[main1]

main1.ccには行列の作成, 要素へのアクセス, その表示の例が与えられ
ている. 行列を作成する際, 例えば, 

  Mat<double> m(3, 2);

とすると3行2列のダブル型の行列が作成される. 行列クラスの各要素へ
は二次元配列と同様にアクセスできる. 2次元配列に対する行列クラスの
主な利点は, メモリの動的確保と開放を自動的に行えることである. 

main1を実行するには, 

  > ./main1

とコマンドすればよい. 

[main2] 

main2.ccでは, 行列の列と行の長さを, それぞれ,

  getColLen(),
  getRowLen()

というメンバ関数で取得できることが例示されている. 例えば3行2列の
行列の場合, getColLen()は3を, getRowLen()は2を返す. 行列の縦の長
さを返すのがgetColLen(), 横の長さを返すのがgetRowLen()と理解して
もよい. また, 

  resize(int, int)

というメンバ関数を使うことにより長さを事後的に変更できる. 

main2を実行するには, 

  > ./main2

とコマンドすればよい. 

[main3/main4]

main3, main4では行列の保存と読込方法を例示したものである. 

保存は, 

  save(string&)

読込は

  load(string&)

というメンバ関数により実装されており, 引数にファイル名を指定する
だけでよい. なお, argv[1] というのは第1コマンド引数であり, それを
string型に変換しているのが, 

  toString(argv[1])

という箇所である(コマンド引数は char* 型であるので). 

main3を実行するには,

  > ./main3 mat1.mdat

とコマンドすればよい. 

main4を実行するには, 読み込む行列のファイルを準備しておく必要があ
る. main3で作成した mat1.mdat を参考にして, mat2.mdatを(emacsなど
を使って)自分で作成してみよう. これを保存した後, 

  > ./main4 mat2.mdat

とすると, mat2.mdatのデータがベクトルクラスとして読み込まれる.


[最後に]

Matクラスをメモリ管理が不要な2次元配列とみなして利用するだけでも
よいが, 他にも便利な機能を有しているので興味がある場合は各自で

  SDMSimple/Lib/Mat.{DECL, IMPL}.h

を参照せよ. Mat.DECL.hにメンバ関数の関数宣言が, Mat.IMPL.hにその
実装が記述されている.