行列 M のスミス正規形を計算するアルゴリズムが必要です。通常は として記述されます。M = USV
たとえば、WP の SNF を参照してください。ここで、行列は常にフル ランク、つまりdet(S) ~= 0
です。
私は Mathematica から始めました.Mathematica では素晴らしいパッケージがこのアルゴリズムを提供しています. たとえばthis one、this one by Gilbert、this one using mapleなど、いくつかの実装がありますが、私は maple にアクセスできず (私は思う)、他の両方の実装は行列U
を計算しないかV
、間違って計算します( [5,0;0,5]
2 番目の実装で試してください。ここでU
、 とV
は単に単位行列である必要があります)
利用可能な他の実装はありますか?
おそらく、この Mathematica パッケージのアプローチに従うものです (もちろん、Mathematica で同様に)。これは、(Mathematica を使用する場合) 私のニーズに対して非常にうまく機能したためですが、U
とV
が正しく提供されている限り、私は気にしません。