質問

な向上を拡大したものである。が、xとyはマトリックス(少なく、非常に多くなることもある)、ベクター。はy、xができます。

できないようです。 http://www.boost.org/doc/libs/1_39_0/libs/numeric/ublas/doc/index.htm

役に立ちましたか?

解決

線形ソルバーは、LAPACKにはより高いレベルのBLASライブラリ。の場合はLinuxのIntel MKLはいくつかの良いソルバーの研究開発、最適化されたものための高密度化、疎行列.の場合はwindows MKL一ヶ月の試用のための無料---実を言うというその他のものがあります。ピックアップしました。アトラスのパッケージには無料のLAPACK実装がなどのハードで走windows上でしか利用できません。

思索のためにLAPACK図書館を作ります。

他のヒント

はい、boostのublasライブラリを使用して線形方程式を解くことができます。 LU-factorizeと逆代入を使用して逆を取得する1つの簡単な方法を次に示します。

using namespace boost::ublas;

Ainv = identity_matrix<float>(A.size1());
permutation_matrix<size_t> pm(A.size1());
lu_factorize(A,pm)
lu_substitute(A, pm, Ainv);

したがって、線形システムAx = yを解くには、(trans(A)A)^-1の逆数をとってxを取得することにより、方程式trans(A)Ax = trans(A)yを解きます:x = (trans(A)A)^-1Ay。

Aがスパースの場合、Ax = bの最適なソルバーの1つは、Tim Davisの UMFPACK

UMFPACK は、AのスパースLU分解を計算します。これは、 x = A \ b を入力すると、Matlabの背後で使用されます(Aはスパースです) および正方形)。 UMFPACK はフリーソフトウェア(GPL)です

また、y = Axであり、xが既知であるがyが不明である場合、線形システムを解くことではなく、スパース行列ベクトル乗算を実行してyを計算します。

ブーストドキュメントを読むと、w.r.t xの解決が実装されているようには見えません。 yで解くのは行列ベクトル積の問題であり、ublasで実装されているようです。

心に留めておくべきことの1つは、blasはベクトル型と行列型の加算、乗算などの「簡単な」演算のみを実装するということです。より高度なもの(x y = A xのような線形問題解決、固有ベクトル、co)は、BLASの上に構築されたLAPACKの一部です。その点でブーストが提供するものがわかりません。

Boostの線形代数パッケージの調整は、「密な行列」に焦点を合わせました。 私の知る限り、Boostのパッケージには線形システムソルバーはありません。 Cの&quot; Numerical Recipeでソースコードを使用する方法( http://www.nr.com/oldverswitcher .html )&quot;

注。ソースコードにわずかなインデックスバグがある可能性があります(一部のコードでは、1から始まる配列インデックスが使用されます)

JAMA / TNT をご覧ください。非スパース行列のみに使用しました(どちらもソルバーユーティリティメソッドを備えたQRまたはLU分解が必要な場合があります)が、明らかにスパース行列用の機能がいくつかあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top