スパースマトリクス — CAE用語解説
スパースマトリクス
FEMの剛性行列って100万×100万とかのサイズになりますけど、そんな巨大な行列をメモリに載せられるんですか?
密行列で格納したら無理だね。100万×100万の倍精度行列なら約7.5TBのメモリが必要になる。でも実際のFEMの剛性行列は99%以上がゼロ。各節点は隣接要素の節点としか結合しないから、非ゼロ要素は対角線近傍にしかない。このゼロだらけの行列が「スパースマトリクス(疎行列)」で、非ゼロ要素だけを記録すれば数GBに収まるんだ。
定義
非ゼロ要素だけ記録するって、具体的にどうやるんですか?
代表的なのがCSR(Compressed Sparse Row)形式。行ごとに「非ゼロ要素の値」「その列番号」「各行の開始位置」の3つの配列で格納する。例えば100万行の行列でも非ゼロ要素が500万個なら、配列のサイズは合計で数十MB程度。メモリだけでなく、行列-ベクトル積の計算もゼロとの演算をスキップできるから速くなるよ。
数値解法における役割
疎行列の構造がソルバーの選択にも影響するんですか?
大きく影響する。直接法(LU分解やCholesky分解)は分解過程で「フィルイン」(元はゼロだった位置に非ゼロが出現)が起きるから、ノード番号の並び替え(RCMやMETIS)で帯幅を最小化するのが重要。反復法(CG法、GMRES法)ではフィルインは起きないけど、前処理行列の選択が収束に直結するんだ。
メッシュの節点番号の付け方が計算速度に影響するなんて驚きです…
そうなんだよ。隣接する節点に近い番号を付ければ帯幅が小さくなって、直接法のメモリ消費とフィルインが大幅に減る。商用ソルバーは自動で番号を最適化してくれるけど、仕組みを知っておくとトラブルシューティングで役立つよ。
関連用語
スパースマトリクス関連で覚えておくべき概念はありますか?
帯幅とCSR形式は必須。あとは直接法ソルバーの仕組みも知っておくといいよ。
- 帯幅
- CSR
- 直接法
99%がゼロの行列を全部メモリに載せてたら無駄だらけですもんね。疎行列の格納方式、もっと勉強します。
いいね。Pythonのscipyやpetsc4pyで実際にCSR行列を触ってみると理解が深まるよ。spy()関数で非ゼロパターンを可視化するのもおすすめだ。
CAE用語の正確な理解は、チーム内のコミュニケーションの基盤です。 — Project NovaSolverは実務者の学習支援も視野に入れています。
スパースマトリクスの実務で感じる課題を教えてください
Project NovaSolverは、CAEエンジニアが日々直面する課題——セットアップの煩雑さ、計算コスト、結果の解釈——の解決を目指しています。あなたの実務経験が、より良いツール開発の原動力になります。
お問い合わせ(準備中)関連トピック
なった
詳しく
報告