これは、John Carmackが4x4行列の行列式を計算するために使用するアプローチです。私の調査から、私はlaplace拡張定理のように始まったが、それから私が読んだ論文と一致しない3x3行列式を計算することになると判断した。これはどの行列式の計算方法ですか?
// 2x2 sub-determinants
float det2_01_01 = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0];
float det2_01_02 = mat[0][0] * mat[1][2] - mat[0][2] * mat[1][0];
float det2_01_03 = mat[0][0] * mat[1][3] - mat[0][3] * mat[1][0];
float det2_01_12 = mat[0][1] * mat[1][2] - mat[0][2] * mat[1][1];
float det2_01_13 = mat[0][1] * mat[1][3] - mat[0][3] * mat[1][1];
float det2_01_23 = mat[0][2] * mat[1][3] - mat[0][3] * mat[1][2];
// 3x3 sub-determinants
float det3_201_012 = mat[2][0] * det2_01_12 - mat[2][1] * det2_01_02 + mat[2][2] * det2_01_01;
float det3_201_013 = mat[2][0] * det2_01_13 - mat[2][1] * det2_01_03 + mat[2][3] * det2_01_01;
float det3_201_023 = mat[2][0] * det2_01_23 - mat[2][2] * det2_01_03 + mat[2][3] * det2_01_02;
float det3_201_123 = mat[2][1] * det2_01_23 - mat[2][2] * det2_01_13 + mat[2][3] * det2_01_12;
return (- det3_201_123 * mat[3][0] + det3_201_023 * mat[3][1] - det3_201_013 * mat[3][2] + det3_201_012 * mat[3][3]);
誰かがこのアプローチがどのように機能するのかを説明したり、同じアプローチを使用した良い書き方を教えてもらえますか?
注
この行列は重要な行です。
yep - それです。シンプルな展開されたラプラス展開。 –
さらに詳しい情報が必要な場合は、「補因子展開」 – Martijn
も検索し、丸め誤差が発生する可能性があります。ピボットは通常、(例えば)ピボットとして最大の数字を選択することによって潜在的に近い数字を差し引くのを避けるために、いくつかのロジックを使用します。 –