寻找3X3矩阵C的次要矩阵

时间:2016-03-21 18:20:36

标签: c matrix

我的问题是如何获取3X3矩阵的输入并显示所有9个次要矩阵。我最大的问题是如何在删除特定的行和列时迭代所有元素,然后将剩余的元素复制到2X2矩阵中。

作业指示:

确定输入矩阵的每个元素(i,j)的次要矩阵-M(i,j)。 3X3输入矩阵中有9个元素。因此,将有9个小矩阵 在此步骤中生成。每个次要矩阵的维数是2X2。 元素(i,j)的次要矩阵 - 从原始矩阵中删除第i行和第j列。该 剩余的元素构成元素(i,j)的次要矩阵。 请注意,不需要实际删除原始输入矩阵的行和列。 只跟踪哪些元素必须从中复制到2X2次要矩阵中 基于元素索引(i,j)的原始输入矩阵。 声明一个2x2矩阵以将次矩阵存储在main函数中。使用此矩阵 对于此步骤中的9个次要矩阵中的每一个。 创建一个函数定义,它将采用3X3原始输入矩阵,元素索引 (i,j)和2X2次矩阵作为参数。该函数复制适当的元素 对于输入矩阵的给定元素索引(i,j),从3x3矩阵到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 个答案:

答案 0 :(得分:1)

我认为有很多方法可以做到这一点。以下只是一个例子。 (可能效率低下) 我只是通过保存次要矩阵的时间行和列来复制它们。

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