Lis

反復解法
固有値求めたりもできる
東大の人が作ってる。(た。今は九大に来た西田先生がメンテ)日本語マニュアルあり
http://www.ssisc.org/lis/

解凍
  • tar zxvf lis-1.2.62.tar.gz

導入
  • cygwinだろうがlinuxだろうが./configure, make, make install でおk
  • もしopenMP使いたい場合は./configure --enable-omp のオプションを付ける
  • 詳しくはマニュアル

コンパイル&実行
  • cygwin
$ gcc -c test.c
$ gcc -o test.exe test.o -L/usr/local/lib -llis
$ ./test.exe
 
  • linux
$ gcc -c test.c
$ gcc -o test.out test.o -L/usr/local/lib -llis -lm
$ ./test.out
 

サンプルプログラム
  • マニュアル読む

IC(不完全コレスキー分解)使いたい
  • たぶんない。ILUでがまん

非定常計算したい->assembledがサポートされたので、これを使えばいい気がする
  • そんなAPIない
  • solveしたら行列がクリアされるのは仕様
  • メモリ2倍つかってコピーしておくorソースコード解読するor中の人に期待
  • crsならstructしない裏技はある(ワーニングがでる)

resultってなに?
  • 各反復ステップごとに吐かれるresultと、Ax=b計算するごとに吐かれるresultがある
  • 詳細は謎だが、後者が大きい場合は計算破たんしてる(時間刻み小さくする)

resultは絶対誤差?相対誤差?
  • たぶん相対

お勧めの反復法
  • 対称行列向けはcg,cr,minresしかない。cgがフツーに速い。crはそこそこ。minresは遅すぎる
  • 非対称行列向けはいろいろあるから試してみる。ただし特定の解法でしか解けない場合は行列が間違ってる可能性あり

解けない・・・
  • ILU(3)+CGとかmaxiterを大きくしたminresは強力
  • 4倍精度もあり

並列計算したけど遅い
  • 行列の次元が小さい時はかえって遅くなるよ

オリジナルのコマンドラインオプション(-aとか)使いたい
  • Lisと干渉して使えない。$./a.exe 2 3 とかは使える

バグかもしれない
  • MINRESの前処理が無視される->lis-1.2.62でサポート開始
  • マシンのよって結果が異なる(-ffloat-storeだけでは一致しない)
    • 付属のtest1は一致した結果を返すことがある(たぶんmakefileが環境差吸収してる)
  • マルチスレッド(openMP)の動作不安定(windows7 64bit + cygwin)(lis-1.2.53)
    • 非定常計算で連続で解く時に起きる. とりあえずシングル動作奨励.

タグ:

+ タグ編集
  • タグ:
最終更新:2012年06月29日 14:59
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。