雨谷の日和

過去20年で2,700を超えるアニメの第1話だけは見続けた僕のお勧めアニメがハズレなはずがない

分数での掃き出し法による行列式計算16

今回でこのシリーズはおしまいです。
今までに作ったFraction、BigFraction、展開法での行列式計算とかをまとめて、一つのユーティリティクラスにしてみました。
行列式計算ユーティリティのソースコード
Fraction/BigFractionとかも、ちょっとメソッドを追加して同じ場所に置いておきます。
Fractionソースコード
BigFractionソースコード
展開法ソースコード
これらを使った、処理比較のためのテストコードは、以下のようになるかと思います。
テスト用ソースコード
実行してみると、以下のようになりました。

start by expand
result[18620ms] = 489261678
start by double
result[0ms] = 4.892616779999999E8
start by BigFraction
result[110ms] = 489261678

実行環境は以前にも書きましたが、以下のようになっています。

なお、最適化はHotSpotで行っています。
展開法だと約19秒、掃き出し法ではdouble で約0秒(計測不能なくらいに速い)、BigFraction で約0.1秒となってますね。
BigFraction で計算している場合には、理論上誤差無く計算結果が出るはずです。
ということで、そこそこ速くて誤差の無い行列式計算のプログラムについては、これでオッケーということで。

長々とお付き合い、ありがとうございました。