69,382
社区成员
发帖
与我相关
我的任务
分享
int brinv(int **a,int n) //a对应矩阵二维矩阵A,n是矩阵的维数L ,计算A的逆
{
int *is,*js,i,j,k;
int d,p;
is=malloc(n*sizeof(int));
js=malloc(n*sizeof(int));
for (k=0; k<=n-1; k++)
{
d=0;
for (i=k; i<=n-1; i++)
for (j=k; j<=n-1; j++)
{
p=a[i][j];
if (p>d) { d=p; is[k]=i; js[k]=j;}
}
if (d+1==1)
{
free(is); free(js); printf("err**not inv\n");
return(1);
}
if (is[k]!=k)
for (j=0; j<=n-1; j++)
{
p=a[k][j]; a[k][j]=a[is[k]][j]; a[is[k]][j]=p;
}
if (js[k]!=k)
for (i=0; i<=n-1; i++)
{
p=a[i][k]; a[i][k]=a[i][js[k]]; a[i][js[k]]=p;
}
a[k][k]=a[k][k];
for (j=0; j<=n-1; j++)
if (j!=k)
{ a[k][j]=a[k][j]*a[k][k];}
for (i=0; i<=n-1; i++)
if (i!=k)
for (j=0; j<=n-1; j++)
if (j!=k)
{
a[i][j]=a[i][j]^(a[i][k]*a[k][j]);
}
for (i=0; i<=n-1; i++)
if (i!=k)
{ a[i][k]=a[i][k]*a[k][k];}
}
for (k=n-1; k>=0; k--)
{ if (js[k]!=k)
for (j=0; j<=n-1; j++)
{
p=a[k][j]; a[k][j]=a[js[k]][j]; a[js[k]][j]=p;
}
if (is[k]!=k)
for (i=0; i<=n-1; i++)
{
p=a[i][k]; a[i][k]=a[i][is[k]]; a[i][is[k]]=p;
}
}
free(is); free(js);
return 0;
}