2

NxN行列 C# の行列式をどのように計算しますか?

4

4 に答える 4

8

OP は、4x4 マトリックスについて具体的に尋ねる別の質問を投稿しましたが、この質問の正確な複製としてクローズされました。一般的な解決策を探しているのではなく、代わりに 4x4 行列のみに制約されている場合は、この見苦しいが実証済みのコードを使用できます。

public double GetDeterminant() {
    var m = _values;
    return
         m[12] * m[9]  * m[6]  * m[3]   -  m[8] * m[13] * m[6]  * m[3]   -
         m[12] * m[5]  * m[10] * m[3]   +  m[4] * m[13] * m[10] * m[3]   +
         m[8]  * m[5]  * m[14] * m[3]   -  m[4] * m[9]  * m[14] * m[3]   -
         m[12] * m[9]  * m[2]  * m[7]   +  m[8] * m[13] * m[2]  * m[7]   +
         m[12] * m[1]  * m[10] * m[7]   -  m[0] * m[13] * m[10] * m[7]   -
         m[8]  * m[1]  * m[14] * m[7]   +  m[0] * m[9]  * m[14] * m[7]   +
         m[12] * m[5]  * m[2]  * m[11]  -  m[4] * m[13] * m[2]  * m[11]  -
         m[12] * m[1]  * m[6]  * m[11]  +  m[0] * m[13] * m[6]  * m[11]  +
         m[4]  * m[1]  * m[14] * m[11]  -  m[0] * m[5]  * m[14] * m[11]  -
         m[8]  * m[5]  * m[2]  * m[15]  +  m[4] * m[9]  * m[2]  * m[15]  +
         m[8]  * m[1]  * m[6]  * m[15]  -  m[0] * m[9]  * m[6]  * m[15]  -
         m[4]  * m[1]  * m[10] * m[15]  +  m[0] * m[5]  * m[10] * m[15];
}

次の順序で、ベクトル データを 16 要素の配列_values(doubleこの場合は of ですが、これも機能します)に格納することを前提としています。float

0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 10, 11,
12, 13, 14, 15
于 2010-06-05T15:36:00.263 に答える
4

上三角形式に縮小してから、位置i==jのすべての値を乗算するネストされたループを作成します。そこにあります。

于 2010-05-27T16:09:59.077 に答える
1

標準的な方法はLU 分解です。自分でコーディングする代わりに、ライブラリを使用したい場合があります。C#についてはわかりませんが、40年の標準はLAPACKです。

于 2010-06-29T12:34:53.847 に答える