2016-03-21 159 views
-2

我的問題是如何獲取3X3矩陣的輸入並顯示所有9個次矩陣。我最大的問題是如何遍歷所有元素,同時刪除特定的行和列,然後將其餘元素複製到2X2矩陣中。查找3X3矩陣的小矩陣C

賦值指令:

確定次要矩陣 - M(I,J),用於將輸入矩陣的每個元素(I,J)。 3X3輸入矩陣中有9個元素。因此,在這個步驟中會產生9個小矩陣 。每個次矩陣的維數是2X2。 元素(i,j)的次矩陣 - 從原始矩陣中刪除第i行和第j列。其餘元素構成元素(i,j)的次矩陣。 請注意,原始輸入矩陣的行和列不需要實際刪除。 僅根據元素索引(i,j)跟蹤哪些元素必須從 原始輸入矩陣複製到2X2次矩陣中。 聲明一個2x2矩陣以在main函數中存儲次矩陣。在此步驟中,對這9個次要矩陣中的每一個使用此矩陣 。 創建一個函數定義,它將採用3X3原始輸入矩陣,元素索引 (i,j)和2X2次要矩陣作爲參數。函數將3x3矩陣的適當元素 複製到輸入矩陣的給定元素索引(i,j)的2x2矩陣中。

代碼:

#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

爲了顯示一個輔號碼(I0,J0),則需要遍歷矩陣,跳過*如果*行I0 *或*列是J0。順便說一句好的DET功能。你將如何計算100×100矩陣行列式? –

回答

0

我認爲有很多方法可以做到這一點。以下僅是一個例子。 (可能效率低下)。
我剛剛通過保存次矩陣的時間行和列來複制它們。

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