2011-10-29 28 views
3

Ax = b系を解くにはライブラリが必要です。ここで、Aは非対称スパース行列で、行ごとに8つのエントリがあります(かなり大きいかもしれません)。私はbiconjugateグラデーションを実装するライブラリはうまくいくはずだと思いますが、動作するものを見つけることができません(iml ++を試しましたが、iml ++/sparselib ++パッケージにいくつかのヘッダーがありません)。任意のヒント?スパース行列過決定線形方程式系C/C++ライブラリ

+0

http://www.boost.org/doc/libs/1_47_0/libs/numeric/ublas/doc/index.htmを見ましたか? – andand

+0

しかし、私はウブラスは単なるテンプレートライブラリだと思う、私はスパースシステムを解決するための反復メソッドを見ることができない、私は間違っていますか? – tuccio

+0

スパース行列クラスがあります。私はそれについてのソルバーがあるかどうかについては詳細を見ていませんが、http://www.boost.org/doc/libs/1_47_0/libs/numeric/ublas/docを見てみてください。 /matrix_sparse.htmそこに何かがあるかどうかを確認してください。 – andand

答えて

3

オーバー決定されたシステムを処理する標準的な方法があります。例えば、Wikipediaは次のように書いています。

一連の線形連立方程式は、Ax = yとして行列形式で書くことができます。変数より多くの方程式がある場合、システムは過決定と呼ばれ、(一般的に)解はありません。次に、システムは、(A TA)x = A Tに変更することができる。新しいシステムは、変数(行列A T Aは正方行列です)と同数の式を持ち、通常の方法で解くことができます。この解は、元のシステムの2つの辺の不一致の尺度であるユークリッドノルム|| Ax-y ||を最小化する、元の過決定システムの最小二乗解です。

したがって、任意の標準正方行列スパースソルバを使用できます。

個人的に私はティム・デイビスのCSparseの直接ソルバーを使用しています。ティムは多くの優れた直接スパースソルバを書いています。実際には、彼のUMFPACKが別の優れたオプションであり、MATLABなどで使用されています。これらのソルバーの両方がCインターフェースを提供することに注意してください。ネイティブのC++インターフェイスで何かを探しているなら、私は何も提供しません。

私は反復ソルバーでいくつかの経験があります。しかし、私が見ていた問題では、反復法は大きな行列では不安定になりました。私はダイレクトソルバーではるかに成功しました。もちろん、あなたの問題がスローアップするマトリックスのタイプに応じて、逆の経験をすることも可能です。

+0

大変ありがとうございます、これは役に立ちました、私はumfpackを使っています(それはコンパイルするためにビジュアルスタジオプロジェクトを作るのは面倒でした:D)、うまく動作しているようです – tuccio

+0

あなたは答えを受け入れません。なにかもんだいがありますか? –

+0

はい、私は痙攣していて、私はそれをトグルしたことに気が付かなかった:D – tuccio

0

ARPACKは、スパースな非対称行列問題を解決します。 C++バージョンがあります。

+0

ARPACKは固有ソルバです。それは壮大ですが、問題は別の問題に関係しています。 –

0

David Heffernanの答え:重要なことの一つを忘れないでください:行列Aは直線的に独立した列を持つことを確認しなければなりません。そうでなければ(A^TA)は単数形です。コース)。

関連する問題