Ciao,


bada bene che non è la soluzione. IMHO ci sono diversi punti da aggiustare specie l'algoritmo di calcolo sottomatrice che cmq va messo in un metodo esterno e meglio se con Generics Keywords.

Spero ti possa aiutare, sempre se ho capito bene il tutto...sono un asino in matematica!:

codice:
namespace ConsoleApplicationDeterminanteMatrix{
    class Program
    {
        private static void printMyArray<T>( T[,] arr) {
            int rowLength = arr.GetLength(0);
            int colLength = arr.GetLength(1);


            for (int i = 0; i < rowLength; i++)
            {
                for (int j = 0; j < colLength; j++)
                {
                    Console.Write(string.Format("{0} ", arr[i, j]));
                }
                Console.Write(Environment.NewLine + Environment.NewLine);
            }
        }
         public static void Main(string[] args)
        {
            double[,] matrix =  {   {2,4,6,8},
                                    {1,3,5,7},
                                    {4,6,8,10},
                                    {3,5,7,9} };




            Console.WriteLine("Matrice di partenza matrix: ");
            printMyArray(matrix);
            Console.WriteLine("===========================================");
            // numero di righe e di colonne                                
            int[] nRC = {4,4};
            


            double det = Determinant(matrix, nRC[0], nRC[1], 0);
            Console.Write("Determinante: " + det); 
            Console.ReadLine(); 
        }


        // suppongo che la matrice sia quadrata
        // calcolo il determinante passando: matrice, numero di righe, numero di colonne, la colonna della sottomatrice da escludere
        public static double Determinant(double[,] matrix, int nR, int nC, int colonnaEsclusa)
        {
            double det = 0;


            if (nR == 1) // caso matrice 1x1
                det = matrix[0,0];


            if (nR == 2) // caso matrice 2x2
                det = (matrix[0,0] * matrix[1,1]) - (matrix[0,1] * matrix[1,0]);


            else // casi matrice 3x3 e maggiori
            {
                // dichiaro la sottomatrice con una riga e una colonna in meno
               double[,] tempMatrix = new double[nR - 1, nC - 1];


                // assegno i valori alla sottomatrice escludendo sempre la prima riga e una colonna
              
                for(int r = 1; r < nR; r++)
                {
                    int deltaColumn = 0 ;
                    for (int c = 0; c < matrix.GetUpperBound(1); c++)
                    {
                        if(c == colonnaEsclusa)
                            deltaColumn++;
                        tempMatrix[r-1, c] = matrix[r, c + deltaColumn];
                    }
                }
               /*    */
                Console.WriteLine("Matrice di ottenuta tempMatrix: ");
                printMyArray(tempMatrix);
                Console.WriteLine("===========================================");
             
                // moltiplico gli elementi della prima riga per i determinanti delle loro sottomatrici 
                for(int c = 0; c < nC; c++) // scorro tutta la prima riga
                    det = det + Math.Pow(-1, c) * matrix[0,c] * Determinant(tempMatrix, nR - 1, nC - 1, colonnaEsclusa + 1);
                    
            }


            return det;


        }
         
    } 
}