gpt4 book ai didi

c - 求 3X3 矩阵 C 的次矩阵

转载 作者:行者123 更新时间:2023-11-30 20:23:27 26 4
gpt4 key购买 nike

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

分配说明:

确定输入矩阵的每个元素 (i,j) 的次矩阵 – M (i,j)。3X3 输入矩阵中有 9 个元素。因此,将有 9 个小矩阵这一步生成的。每个次矩阵的维数是2X2。元素次矩阵 (i,j) – 从原始矩阵中删除第 i 行和第 j 列。这其余元素形成元素 (i,j) 的次矩阵。请注意,原始输入矩阵的行和列不需要实际删除。只跟踪哪些元素必须从 2X2 次要矩阵复制到基于元素索引 (i, j) 的原始输入矩阵。在主函数中声明一个 2x2 矩阵来存储次矩阵。使用这个矩阵对于此步骤中的 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;
}

最佳答案

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

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

关于c - 求 3X3 矩阵 C 的次矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36138768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com