用c语言求一个大于三阶的矩阵的伴随矩阵并输出伴随矩阵的内容
时间: 2023-06-12 21:01:53 浏览: 104
矩阵求逆_c语言矩阵求逆_矩阵求逆_
5星 · 资源好评率100%
好的,下面是用C语言求大于三阶的矩阵的伴随矩阵并输出伴随矩阵的内容的步骤:
步骤一:输入大于三阶的矩阵元素
首先,你需要输入一个大于三阶的矩阵的元素,可以用数组来存储。比如说,对于一个4阶矩阵,可以这样定义一个数组来存储它的元素:
int matrix[4][4];
然后,你需要用循环语句来逐个输入这个矩阵的元素:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("请输入矩阵第%d行第%d列的元素:", i+1, j+1);
scanf("%d", &matrix[i][j]);
}
}
步骤二:求矩阵的伴随矩阵
有了矩阵的元素,下一步就是求它的伴随矩阵。求伴随矩阵的公式如下:
A*(i,j)=(-1)^(i+j)*M(i,j)
其中,A*(i,j)表示A矩阵的伴随矩阵中第i行第j列的元素,M(i,j)表示矩阵A中去掉第i行第j列后形成的3阶行列式。我们可以用递归来实现这个公式:
int det(int a[4][4], int n) {
int sum = 0, b[4][4];
if (n == 2)
return a[0][0]*a[1][1]-a[1][0]*a[0][1];
else {
for (int c = 0; c < n; c++) {
int i = 0, j = 0;
for (int m = 1; m < n; m++) {
for (int k = 0; k < n; k++) {
if (k == c)
continue;
b[i][j] = a[m][k];
j++;
if (j == n-1) {
i++;
j = 0;
}
}
}
sum += a[0][c]*pow(-1, c)*det(b, n-1);
}
return sum;
}
}
void adj(int a[4][4], int n, int b[4][4]) {
int d[4][4], k, l;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
k = i == 0 ? 1 : 0;
l = j == 0 ? 1 : 0;
d[k][l] = a[i][j];
k++;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int e[3][3], g = 0, h = 0;
for (int m = 0; m < n-1; m++) {
for (int k = 0; k < n-1; k++) {
e[g][h] = d[m+i-1][k+j-1];
h++;
if (h == n-1) {
g++;
h = 0;
}
}
}
b[j][i] = pow(-1, i+j) * det(e, n-1);
}
}
}
int main() {
int a[4][4], b[4][4];
adj(a, 4, b);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", b[i][j]);
}
printf("\n");
}
return 0;
}
步骤三:输出伴随矩阵的内容
最后,你只需要用循环语句逐个输出伴随矩阵的元素即可:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", b[i][j]);
}
printf("\n");
}
注意,这里应该是输出b[j][i]而不是b[i][j],因为我们在求伴随矩阵的时候,是将A矩阵的行变成了列,列变成了行。
阅读全文