2016-03-21 13 views
-2

Sahip olduğum soru, 3X3 matrisinin girişini nasıl alabilirim ve tüm 9 küçük matrisleri nasıl görüntüleyebilirim. En büyük sorunum, belirli satır ve sütunu silerken, tüm öğeleri nasıl yineleyebilirim ve sonra kalan öğeleri 2X2 matrisine kopyalayabilirim.3X3 matrisinin küçük matrislerini bulma C

Atama yönergeleri: -, M giriş matrisin her bir elemanı (i, j) için, (i, j)

küçük Matrix belirler. 3X3 giriş matrisinde 9 eleman vardır. Bu nedenle, bu adımda üretilen 9 küçük matris olacaktır. Her küçük matrisin boyutu 2X2'dir. Minör matris öğesi (i, j) - Satır i ve sütun j'yi orijinal matristen sil. kalan elemanlar minör Matris elemanını oluşturur (i, j). Orijinal giriş matrisinin satır ve sütununun gerçekten silinmemesine dikkat edin. Sadece öğe öğelerinin (i, j) temel alındığı orijinal giriş matrisinden 2X2 minör matrisine hangi elemanların kopyalanması gerektiğini takip edin. Küçük matrisi ana işlevde saklamak için bir 2x2 matrisini bildirin. Bu adımda 9 küçük matrisin her biri için matrisini kullanın. 3X3 orijinal giriş matrisini, eleman indekslerini (i, j) ve 2X2 minör matrisi parametreler olarak alacak bir fonksiyon tanımı oluşturun. Bu işlev, 3x3 matrisinden uygun elemanlar 'u giriş matrisinin belirli bir öğe indeksi (i, j) için 2x2 matrisine kopyalar.

Kodu:

#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) kullanarak, * atlayarak, matris yineleme gerekir. BTW güzel DET işlevi. 100x100 matris determinantını nasıl hesaplarsınız? –

cevap

0

bunu yapmak için birçok yol vardır düşünüyorum. Aşağıdaki sadece bir örnektir. (belki verimsiz).
Yalnızca küçük matris için geçici satır ve sütun kaydederek bunları kopyaladım. * Satır I0 * ya da * kolon J0 ise küçük bir sayı görüntülemek için

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]; 
     } 
    } 
} 
İlgili konular