コード例 #1
0
ファイル: MatrixExtensions.cs プロジェクト: pritisutar/kelly
 public static double CalculateDeterminant(this Matrix matrix)
 {
     return(matrix[0, 0] * matrix.Cofactor(0, 0)
            + matrix[0, 1] * matrix.Cofactor(0, 1)
            + matrix[0, 2] * matrix.Cofactor(0, 2)
            + matrix[0, 3] * matrix.Cofactor(0, 3));
 }
コード例 #2
0
ファイル: MatrixExtensions.cs プロジェクト: pritisutar/kelly
        public static Matrix Invert(this Matrix matrix)
        {
            var determinant = matrix.CalculateDeterminant();

            if (determinant == 0f)
            {
                throw new Exception("Cannot invert a singular matrix.");
            }

            var cofactorMatrix = new Matrix(
                matrix.Cofactor(0, 0), matrix.Cofactor(1, 0), matrix.Cofactor(2, 0), matrix.Cofactor(3, 0),
                matrix.Cofactor(0, 1), matrix.Cofactor(1, 1), matrix.Cofactor(2, 1), matrix.Cofactor(3, 1),
                matrix.Cofactor(0, 2), matrix.Cofactor(1, 2), matrix.Cofactor(2, 2), matrix.Cofactor(3, 2),
                matrix.Cofactor(0, 3), matrix.Cofactor(1, 3), matrix.Cofactor(2, 3), matrix.Cofactor(3, 3)
                );

            return((1f / determinant) * cofactorMatrix);
        }