最初のプログラム UbuntuでSuitesparse Suitesparse の cholmodを使ってみる

  • 疎行列情報ファイル
    • 例から見よう。3x3行列に5つの非ゼロ要素がある複素数を要素とする行列。./Matrix/c.matというファイルだとする
%%MatrixMarket matrix coordinate complex hermitian
3 3 5
1 1  1.  0.
3 1  2. -1.
2 2  1.  0.
3 2  3.  0.
3 3 42.  0.
    • 以下のファイルをmain.cppとして、src/以下に置く
#include "cholmod.h"
#include <iostream>

using namespace std;

int main( int argc, char **argv )
{
	FILE *f ; // 読み込みファイルのハンドル
	cholmod_common Common, *cm ; // このCommonとcmを使ってcholmodらしいことをする。そのためのもの
	cholmod_sparse *A ; //cholmodでのsparse matrixを宣言
	
	if( argc != 2 )
	{
		cerr << "err "  << endl;
		return 1;
	}
	f = fopen (argv [1], "r"); //ファイル名を引数として渡し、読み込み権限で開いた状態とする

	cm = &Common ; // cholmodはこのcmを使って『開始』する
	cholmod_start (cm) ; // 開始
	A = cholmod_read_sparse (f, cm) ; // ファイルを読む。cholmodなので、cholmod世界を使うためにcmも引数として渡す
	fclose (f) ; // ファイルは閉じよう
	cholmod_print_sparse(A, "A", cm); // cholmod世界でsparse matrixであるAの概要を標準出力
	cholmod_finish(cm); // cholmod世界を終える
	return 0;
}
    • ビルドして実行
make
./sstest ./Matrix/c.mat
CHOLMOD sparse; A; 3-by-3, nz 5, upper. OK