2017-01-04 26 views
-1

Ich versuche, die Determinante einer quadratischen Matrix mit Zeilenoperationen zu berechnen. Ich stieß auf diesen Code, aber ich verstehe nicht wirklich, wie es funktioniert.Berechnung der Determinante einer Matrix

Was machen subi und subj? Werden Zeilenoperationen verwendet?

Was ist die Logik hinter diesem Code?

int c, subi, i, j, subj; 

double submat[10][10],d=0; 

if (n == 2) { 
    return((mat[0][0] * mat[1][1]) - (mat[1][0] * mat[0][1])); 
} 
else { 
    for (c = 0; c < n; c++) { 
     subi = 0; 
     for (int i = 1; i < n; i++) { 
      subj = 0; 
      for (j = 0; j < n; j++) { 
       if (j == c) 
        continue; 
       submat[subi][subj] = mat[i][j]; 
       subj++; 
      } 
      subi++; 
     } 
     d = d + (pow(-1, c)*mat[0][c] * determinant(n - 1, submat)); 
    } 
} 
return d; 
+0

Sie vermissen die Funktionssignatur, die ungefähr so ​​aussieht wie 'doppelte Determinante (int n, doppelte Matte [10] [10])' –

+0

Hier ist ein Beispiel für [Determinante einer Matrix] (http: //www.geeksforgeeks. org/determinant-of-a-matrix /) erklärt ziemlich nett. submat ist eine temporäre Matrix mit der Zeile subi und der Spalte subj. – Skywrath

Antwort

0

Dies ist eine rekursive Funktion Laplace expansion mit der Determinante, deren Basisfall ist eine 2 x 2-Matrix zu berechnen.

Aber es scheint nicht für mich ein gutes Programm zu sein:

  1. was ist, wenn die Eingabe ein 1 von 1 Matrix

  2. submat durch Größe von 10 x 10 begrenzt ist

  3. submat ist eine Verschwendung von Speicher

  4. Wenn Matrix groß ist, ist es besser, LU decomposition zu verwenden.

0

Die Funktion, die wie folgt aussieht:

double determinant(int n, double mat[10][10]); 

rekursiv durch Reihen geht und nennt sich auf den Untermatrizen für diese Zeile und der ersten Spalte einen Wert für alle durch Matrizen zurück. Die Rekursion endet für 2 mal 2 Matrizen.

Verwandte Themen