Skip to content

The solution done by me in C# on the challenge "Matrix Determinant" over at www.codewars.com

Notifications You must be signed in to change notification settings

IvanovArtyom/Matrix-Determinant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Description:

Write a function that accepts a square matrix (N x N 2D array) and returns the determinant of the matrix.

How to take the determinant of a matrix -- it is simplest to start with the smallest cases:

A 1x1 matrix |a| has determinant a.

A 2x2 matrix [ [a, b], [c, d] ] or

|a  b|
|c  d|

has determinant: a*d - b*c.

The determinant of an n x n sized matrix is calculated by reducing the problem to the calculation of the determinants of n matrices of n-1 x n-1 size.

For the 3x3 case, [ [a, b, c], [d, e, f], [g, h, i] ] or

|a b c|
|d e f|
|g h i|

the determinant is: a * det(a_minor) - b * det(b_minor) + c * det(c_minor) where det(a_minor) refers to taking the determinant of the 2x2 matrix created by crossing out the row and column in which the element a occurs:

|- - -|
|- e f|
|- h i|

Note the alternation of signs.

The determinant of larger matrices are calculated analogously, e.g. if M is a 4x4 matrix with first row [a, b, c, d], then:

det(M) = a * det(a_minor) - b * det(b_minor) + c * det(c_minor) - d * det(d_minor)

My solution:

using System.Collections.Generic;

public class Matrix
{
    public static int Determinant(int[][] matrix)
    {
        if (matrix.Length == 1)
            return matrix[0][0];

        int det = 0;

        for (int j = 0; j < matrix.Length; j++)
        {
            int value = matrix[0][j] * Determinant(CalculateMinor(matrix, 0, j));

            det += (j % 2 == 0) ? value : -value;
        }

        return det;
    }

    public static int[][] CalculateMinor(int[][] matrix, int row, int column)
    {
        int[][] minor = new int[matrix.Length - 1][];
        int index = 0;

        for (int i = 0; i < matrix.Length; i++)
        {
            if (i == row)
                continue;

            List<int> line = new();

            for (int j = 0; j < matrix.Length; j++)
            {
                if (j == column)
                    continue;

                line.Add(matrix[i][j]);
            }

            minor[index++] = line.ToArray();
        }

        return minor;
    }
}

About

The solution done by me in C# on the challenge "Matrix Determinant" over at www.codewars.com

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages