跪求“矩阵求逆”算法

来源:百度知道 编辑:UC知道 时间:2024/06/09 08:52:35
某个N*N的矩阵,记作A,性质如下:
(1)矩阵中大约有1/3的元素为0;
(2)假若某一行有0元素,这些元素全在最左边。

例如:
3 4 2 1 5
0 0 3 1 3
0 0 2 5 7
0 0 0 1 3
0 0 0 2 2

问题:如何快速的求出A的逆矩阵?

(高斯消去的复杂度为N^3,请问有复杂度更低的算法吗?)
简单的说,就是:A为一个阶梯矩阵。

只要矩阵可逆,用程序算的方法与该矩阵具体性质没关系。
a[]={3, 4 ,2, 1, 5 ,
0 ,0 ,3 ,1 ,3 ,
0 ,0 ,2 ,5 ,7 ,
0, 0, 0, 1, 3 ,
0 ,0 ,0 ,2 ,2 };
int n = 5;

int MatrixInvert(float a[],int n)//实矩阵求逆
{
int *is,*js,i,j,k,l,u,v;
float d,p;
is=(int*)malloc(n*sizeof(int));
js=(int*)malloc(n*sizeof(int));

for (k=0; k<=n-1; k++)
{
d=0.0;
for (i=k; i<=n-1; i++)
for (j=k; j<=n-1; j++)
{
l=i*n+j;

p=float(fabs(double(a[l])));
if (p>d)
{
d=p;
is[k]=i;
js[k]=j;
}
}
if (d+1.0==1.0)
{
free(is);
free(js);
printf("err**not inv\n");
return(0);
}
if (is[k]!=k)
for (j=0; j<=n-1; j++)
{
u=k*n+j;
v=is[k]*n+j;
p=a[u]