2016-03-21 11 views
-2

Die Frage, die ich habe, ist, wie kann ich die Eingabe einer 3X3-Matrix nehmen und alle 9 Nebenmatrizen anzeigen. Mein größtes Problem ist, wie ich alle Elemente durchlaufen kann, während ich die spezifische Zeile und Spalte lösche und dann die restlichen Elemente in die 2X2-Matrix kopiere.Finden von Nebenmatrizen der 3X3-Matrix C

Zuweisungsanweisungen:

Bestimme die kleinere Matrix - M (i, j) für jedes Element (i, j) der Eingangsmatrix. In der 3X3-Eingabematrix befinden sich 9 Elemente. Daher werden in diesem Schritt 9 kleinere Matrizen erzeugt. Die Dimension jeder Nebenmatrix ist 2X2. Untere Matrix des Elements (i, j) - Lösche Zeile i und Spalte j aus der ursprünglichen Matrix. Die verbleibenden Elemente bilden die Nebenmatrix des Elements (i, j). Beachten Sie, dass die Zeile und die Spalte der ursprünglichen Eingabematrix nicht tatsächlich gelöscht werden müssen. Nur verfolgen, welche Elemente in die 2X2-Nebenmatrix aus der Originaleingangsmatrix basierend auf den Elementindizes (i, j) kopiert werden müssen. Deklarieren Sie eine 2x2-Matrix, um die Nebenmatrix in der Hauptfunktion zu speichern. Verwenden Sie diese Matrix für jede der 9 untergeordneten Matrizen in diesem Schritt. Erstellen Sie eine Funktionsdefinition, die die ursprüngliche 3X3-Eingabematrix, die Element-Indizes (i, j) und eine 2X2-Nebenmatrix als Parameter verwendet. Die Funktion kopiert die entsprechenden Elemente aus der 3x3-Matrix in die 2x2-Matrix für einen gegebenen Elementindex (i, j) der Eingabematrix.

Code:

#include <stdio.h> 

int DET(int matrix[3][3]); 

int main() { 
int matrix[3][3]; 
int minor[2][2]; 
int i = 0; 
int j = 0; 


printf("Enter 9 elements for a 3X3 matrix.\n"); 

for(i = 0; i < 3; ++i) { 
    for(j = 0; j < 3; ++j) { 
    printf("Enter element:"); 
    scanf("%d", &matrix[i][j]); 
    } 
} 

for (i = 0; i < 3; ++i) { 
    for (j = 0; j < 3; ++j) { 
    printf(" %d ", matrix[i][j]); 
    } 
printf("\n"); 
} 
if(DET(matrix) == 0){ 
    printf("Matrix is not invertible.\n"); 
} 
else{ 
printf("The determinant of the matrix is %d\n", DET(matrix)); 
} 

} 

int DET(int matrix[3][3]) { 

int x, y, z, u, v, w, p, q, r, d; 
    x = matrix[0][0]; 
    y = matrix[0][1]; 
    z = matrix[0][2]; 

    u = matrix[1][0]; 
    v = matrix[1][1]; 
    w = matrix[1][2]; 

    p = matrix[2][0]; 
    q = matrix[2][1]; 
    r = matrix[2][2]; 

    d=x*(v*r-w*q)-y*(u*r-w*p)+z*(u*q-v*p); 

    return d; 
} 
+1

Um eine Nebennummer (i0, j0) angezeigt werden, müssen Sie über die Matrix iterieren, das Überspringen * if * Zeile i0 * oder * Spalte j0. BTW nette DET-Funktion. Wie würden Sie eine 100x100 Matrix Determinante berechnen? –

Antwort

0

Ich denke, es gibt viele Möglichkeiten, es zu tun. Das folgende ist nur ein Beispiel. (vielleicht ineffizient).
Ich kopierte sie einfach durch Speichern der temporären Zeile und Spalte für kleinere Matrix.

void createMinor(int matrix[][3], int minor[][2], int row, int col) { 
    int minor_row, minor_col; 
    for (int i = 0; i < 3; i++) { 
     minor_row = i; 
     if (i>row) 
      minor_row--; 
     for (int j = 0; j < 3; j++) { 
      minor_col = j; 
      if (j>col) 
       minor_col--; 
      if (i != row && j != col) 
       minor[minor_row][minor_col] = matrix[i][j]; 
     } 
    } 
}