gpt4 book ai didi

c - 如何使用 C 中的初等变换计算非奇异矩阵 (n*n) 的行列式?

转载 作者:行者123 更新时间:2023-11-30 17:59:01 25 4
gpt4 key购买 nike

我想使用初等变换将矩阵变换为上三角矩阵(或下三角矩阵),然后将对角线元素相乘以找到给定非奇异矩阵的行列式。我是 C 编程的初学者,并编写了以下代码来计算非奇异矩阵的行列式。代码是

   #include<stdio.h>
#include<math.h>
void main()
{
int i,j,k,r;
float mat[20][20],temp,diag=1;
printf("enter the order of the square matrix\n\n");
scanf("%d",&r);
for(i=0;i<r;i++)
{
for(j=0;j<r;j++)
{
printf("enter the (%d , %d)th entry",i+1,j+1);
scanf("%f",&mat[i][j]);
}
}
printf("The matrix we have entered is\n\n ");
for(i=0;i<r;i++)
{
for(j=0;j<r;j++)
{
printf("\t%f",mat[i][j]);

}
printf("\n");
}
for(i=0;i<r-1;i++)
{
for(j=i+1;j<r;j++)
{
temp=mat[j][i]/mat[i][i];
for(k=0;k<r;k++)
{
mat[j][k]=mat[j][k]-temp*mat[i][k];
}
}
}
for(i=0;i<r;i++)
{

diag=diag*mat[i][i];

}
printf("\n\nThe value of the determinant is %f",diag);
}

这对于任何非奇异矩阵都适用,除了那些将零作为其第(1,1)个元素(即第一个对角元素)的矩阵。我可以理解这是由于我的原因而发生的

  temp=mat[j][i]/mat[i][i];

代码。但是此代码对于计算行列式是必需的。因此必须有一些方法来更改程序,使其适用于任何非奇异矩阵。我如何编辑我的程序来实现我的目的?感谢您的帮助。

最佳答案

我觉得最好先求上三角矩阵,然后再求行列式。您可能会发现此代码很有用:

#include<stdio.h>

int main(){
float matrix[10][10], ratio, det;
int i, j, k, n;
printf("Enter order of matrix: ");
scanf("%d", &n);
printf("Enter the matrix: \n");
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
scanf("%f", &matrix[i][j]);
}
}
/* Conversion of matrix to upper triangular */
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
if(j>i){
ratio = matrix[j][i]/matrix[i][i];
for(k = 0; k < n; k++){
matrix[j][k] -= ratio * matrix[i][k];
}
}
}
}
det = 1; //storage for determinant
for(i = 0; i < n; i++)
det *= matrix[i][i];
printf("The determinant of matrix is: %.2f\n\n", det);
return 0;
}

取自 here

关于c - 如何使用 C 中的初等变换计算非奇异矩阵 (n*n) 的行列式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11819433/

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