因此,我试图编写一个程序来查找n * n矩阵的行列式。这是我写的:
int a[10][10],b[10][10],o;
main()
{
int i,j;
printf("Enter Order: ");scanf("%d",&o);
printf("Enter Matrix:\n");
for(i=1;i<=o;i++)
{
for(j=1;j<=o;j++)
scanf("%d",&a[i][j]);
}
printf("The determinant is %d",det(a,o));
printf("\n");
}
int det(int t[10][10],int ord)
{
int d=0,i,j;
if(ord==2)
{
d=(t[1][1]*t[2][2])-(t[2][1]*t[1][2]);
}
else if(ord>2)
{
for(i=1;i<=ord;i++)
{
d=d+(t[1][i]*cofac(t,ord,1,i))
}
}
return d;
}
int cofac(int t[10][10],int ord,int row,int col)
{
int i=1,j=0,x,y;
for(x=1;x<=ord;x++)
{
for(y=1;y<=ord;y++)
{
if(x!=row && y!=col)
{
j++;
b[i][j]=a[x][y];
}
}
if(j==ord-1)
{
i++;j=0;
}
}
return((pow(-1,row+col))*det(b,ord-1));
}
现在由于某种原因,此方法适用于3 * 3矩阵,但对于高阶矩阵却给出了错误的答案。有人可以向我解释为什么吗?我已经尝试解决了几个小时,但是根本不了解发生了什么。
最佳答案
通过将行列式和辅因子函数合并为一个来解决该问题。这是解决方案:
#include<stdio.h>
double det(float[10][10],int);
void main()
{
int i,j,n;
float a[10][10];
printf("Enter order: ");
scanf("%d",&n);
if(n<=0)
{
printf("Please enter a positive value for order");
goto end;
}
printf("Enter matrix:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%f",&a[i][j]);
}
}
printf("The determinant is %f", det(a,n));
end:;
}
double det(float m[10][10],int ord)
{
int f=0,g=0,x,y,i,j,p=1;
float t[10][10];
double d=0;
if(ord==1)
d=m[0][0];
else if(ord==2)
d=(m[0][0]*m[1][1]-m[1][0]*m[0][1]);
else if(ord>2)
{
for(x=0;x<ord;x++)
{
f=0;g=0;
for(i=0;i<ord;i++)
{
for(j=0;j<ord;j++)
{
if(i!=0 && j!=x)
{
t[f][g]=m[i][j];g++;
}
}
if(g==ord-1)
{
g=0;f++;
}
}
d=d+m[0][x]*p*det(t,ord-1);
p=-1*p;
}
}
return d;
}
关于c - 查找行列式不起作用的程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43678877/