算法一计算一般行列式
//行列式求值. cpp
include < cmath >
#include < iostream >
using namespace std ;
// a [ n ][ n ] 存放方阵 A 的元素。返回时被破坏
//函数返回行列式值
double sdet ( double a [], int n )
{ int i , j , k , is , js , l , u , V ;
double f , det , q , d ;
f =1.0; det =1.0;
for ( k =0; k <= n -2; k ++){ q =0.0;
for ( i = k ; i <= n -1; i ++)
for ( j = k ; j <= n -1; j ++)
{1= i * n + j ; d = fabs ( a [1]);
if ( d > q ){ q = d ; is = i ; js = j ;}
}
if ( q +1.0==1.0)
{det =0.0; return ( det );}
if ( is != k )
{f=-f;
for (j=k ; j <= n -1; j ++)
{u = k * n + j ; v = is * n + j;
d = a [ u ]; a [ u ]= a [ v ]; a [ v ]= d ;
n }
}
if ( js !=k )
{ f =- f ;
for ( i = k ; i <= n -1; i ++)
{ u = i * n + js ; v = i * n + k ;
d = a [ u ]; a [ u ]= a [ v ]; a [ v ]= d ;
}
}
1= k * n + k ;
det = det* a [1];
for ( j = k +1; j <= n -1; j++)
{ u = i * n + j ;
a [ u ]= a [ u ]- d * a [ k * n + j ];
}
}
}
det = f * det* a [n*n-1];
return ( det );
算法二
//矩阵求秩, cpp
include < cmath >
include < iostream >
using namespace std ;
// a [ m ][ n ]
存放mxn 阶矩阵 A 的元素。返回时将被破坏
//函数返回 A 的秩
int rank ( double a [], int m , int n )
( int i , j , k , nn , is , js ,1,1l, u , V ;
double q,d;
if ( m >= n ) nn = n ;
k =0;
for (1=0; l <= nn -1;1++)
{ q =0.0;
for ( i =1; i <= m -1; i ++)
for (=1; j <= n -1; j ++)
{11= i n + j ; d = fabs ( a [11]);
if ( d > q ){ q = d ; is = i ; js = j ;
}
if ( q +1.0==1.0) return ( k );
k = k +1;
if ( is!=1)
( for ( j =1; j <= n -1; j ++)
{ u = l * n + j ; v = is * n + j ;
d = a [ u ]; a [ u ]= a [ v ]; a [ v ]= d ;
}
}
if (js !=1)
{ for ( i = l ; i <= m -1; i ++)
{ u = i * n + js ; v = i n + l ;
d = a [ u ]; a [ u ]= a [ v ]; a [ v ]= d ;
}
}
11=1* n +1;
for (i=1+1; i <= n -1; j ++)
{ d = a [ i * n +11/a[11];
for ( j =1+1; j <= n -1; j ++)( u = i n + j ;
a [ u ]= a [ uJ - d * a [1* n + j ];
}
}
}
return ( k );
}