N x N
行列式を計算したいいくつかの行列を生成するプログラムを作成しました。これに関連して私は2つの質問があります
そのために最適なライブラリはどれですか?私はそのような行列を何百万も持っているので、可能な限り最速のライブラリが欲しいです。
結果を整数にキャストするときに注意すべき詳細はありますか?生成するすべての行列には整数の行列式があり、丸め誤差が行列式の正しい値を歪めないことを確認したいと思います。
編集。可能であれば、推奨ライブラリの行列式を計算する例を提供してください。
N x N
行列式を計算したいいくつかの行列を生成するプログラムを作成しました。これに関連して私は2つの質問があります
そのために最適なライブラリはどれですか?私はそのような行列を何百万も持っているので、可能な限り最速のライブラリが欲しいです。
結果を整数にキャストするときに注意すべき詳細はありますか?生成するすべての行列には整数の行列式があり、丸め誤差が行列式の正しい値を歪めないことを確認したいと思います。
編集。可能であれば、推奨ライブラリの行列式を計算する例を提供してください。
マトリックスライブラリに関しては、その質問はここで答えられるようです:
整数へのキャストに関して:行列式が整数でない場合は、整数にキャストするべきではありません。 round
、、、floor
またはceil
を使用して、許容可能な方法で変換する必要があります。これらはおそらく整数値を与えるでしょうが、それでもそれらをキャストする必要があります。ただし、情報を失うことを恐れずにこれを行うことができるようになります。
blasとlapackによる行列で驚異的な作業を行うことができます。それらは実際にはFortranで書かれており、「c」からそれらを使用することは一種の微調整です。しかし、全体として、彼らは恐ろしい速度で数を処理することができます。
GSLがありますが、選択は実際にはマトリックスによって異なります。行列は密ですか、それとも疎ですか?Nは大きいですか小さいですか?小さいNの場合、クラメルの法則またはガウスの消去法を使用して行列式を自分でコーディングする方が高速であることがわかります。これは、ほとんどの高性能ライブラリが大きな行列に焦点を合わせており、それらの最適化によって単純な問題にオーバーヘッドが生じる可能性があるためです。