クラスの場合、疎行列用の独自の線形方程式ソルバーを作成する必要があります。疎行列には任意のタイプのデータ構造を自由に使用でき、共役勾配を含むいくつかの解を実装する必要があります。
ベクトルとの乗算が比較的高速になるようにスパース行列を保存する有名な方法があるかどうか疑問に思っていました。
現在、私のスパース行列は基本的にラップされて実装されstd::map< std::pair<int, int>, double>
ており、データがあればそれを格納します。これは、各行列要素のルックアップを実行する必要があるため、ベクトルから O(n²) の複雑さの行列の乗算を O(n²log(n)) に変換します。Yale Sparse マトリックス形式を調べたところ、要素の取得も O(log(n)) にあるように見えるので、はるかに高速になるかどうかはわかりません。
参考までに、5000 のエントリが入力された 800x800 のマトリックスがあります。このような系を共役勾配法で解くには、およそ 450 秒かかります。
別のデータ構造でもっと速くできると思いますか?
ありがとう!