あなたがグリッドで作業していると仮定すると(画像について言及しているため-これは保証されていませんが)、精度よりも速度に関心があると仮定します(100万の未知数に対して5秒はすでに遅すぎるように見えるため)、いくつかのオプションがあります。
まず、Cholesky (+ reordering) などの正確な方法を忘れてください。因数分解を保存して複数の rhs で再利用できる場合でも、ケースでは扱いにくいと思われる巨大な行列を保存する必要がある可能性があります (逆 Cuthill McKee などで行/列を並べ替えていることを願っています)それ以外の場合-それは因数分解を大幅にスパース化します)。
境界条件に応じて、最初にpoisolv
FFTを使用してポアソン問題を解くMatlabを試し、周期的な境界条件ではなくディリクレ境界条件が必要な場合は可能な再投影を試します。それは非常に高速ですが、あなたの問題には適切ではないかもしれません(あなたはラプラシアン行列+恒等のために25 nnzを持っていると述べています:なぜですか?それは高次のラプラス行列です。その場合、私が想定するよりも精度に関心があるかもしれません? それとも実際には、あなたが説明したものとは別の問題ですか ?)。
次に、画像と滑らかな問題に対して非常に高速なマルチグリッド ソルバーを試すことができます。各反復とマルチグリッドの各レベルに単純な緩和法を使用するか、より複雑な方法 (たとえば、事前条件付きの共役勾配パー レベル) を使用できます。または、マルチグリッドを使用せずに、より単純な前処理付き共役勾配 (または SSOR) を実行することもできます。近似解のみに関心がある場合は、完全に収束する前に反復を停止できます。
反復ソルバーに対する私の主張は次のとおりです。
- おおよその問題が必要な場合は、収束前に停止できます
- 他の結果を再利用してソリューションを初期化することもできます (たとえば、別の実行がビデオの別のフレームに対応する場合、前のフレームのソリューションを次のフレームの初期化として使用することは意味があります)。
もちろん、因数分解を事前計算、保存、および保持できる直接ソルバーも理にかなっています (ただし、行列が定数の場合、ランク 1 の更新に関するあなたの議論は理解できません)。ランタイム。しかし、これが問題の構造 (通常のグリッド、限られた精度の結果への関心の可能性など) を無視していることを考えると、フーリエのような方法やマルチグリッドなど、これらのケース用に設計された方法を選択します。両方の方法を GPU に実装して、より高速な結果を得ることができます (GPU はむしろ画像/テクスチャを処理するように調整されていることを思い出してください!)。
最後に、より数値解析に的を絞ったscicomp.stackexchangeから興味深い回答を得ることができます。