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;
}
}
}