我想使用基本变换将我的矩阵变换为上三角(或下三角矩阵),然后将对角元素相乘以找到给定非奇异矩阵的行列式。 我是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];
code.But这个代码是计算行列式所必需的。所以必须有一些方法来改变程序,使它运行任何非奇异矩阵。如何编辑我的程序以实现我的目的?谢谢你的帮助。
答案 0 :(得分:0)
我认为最好找到上三角矩阵然后找到行列式。您可能会发现此代码非常有用:
#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