version 1.125, 2005/02/09 08:32:32 |
version 1.126, 2005/02/09 14:30:47 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.124 2005/02/09 07:58:43 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.125 2005/02/09 08:32:32 noro Exp $ */ |
|
|
#include "nd.h" |
#include "nd.h" |
|
|
Line 5098 void nd_det(int mod,MAT f,P *rp) |
|
Line 5098 void nd_det(int mod,MAT f,P *rp) |
|
pointer **m; |
pointer **m; |
Q mone; |
Q mone; |
P **w; |
P **w; |
P mp; |
P mp,r; |
NDV **dm; |
NDV **dm; |
NDV *t,*mi,*mj; |
NDV *t,*mi,*mj; |
NDV d,s,mij,mjj; |
NDV d,s,mij,mjj; |
Line 5107 void nd_det(int mod,MAT f,P *rp) |
|
Line 5107 void nd_det(int mod,MAT f,P *rp) |
|
UINT *bound; |
UINT *bound; |
PGeoBucket bucket; |
PGeoBucket bucket; |
struct order_spec *ord; |
struct order_spec *ord; |
|
Q dq,dt,ds; |
|
N gn,qn,dn0,nm,dn; |
|
|
create_order_spec(0,0,&ord); |
create_order_spec(0,0,&ord); |
nd_init_ord(ord); |
nd_init_ord(ord); |
Line 5130 void nd_det(int mod,MAT f,P *rp) |
|
Line 5132 void nd_det(int mod,MAT f,P *rp) |
|
} |
} |
return; |
return; |
} |
} |
|
|
|
if ( !mod ) { |
|
w = (P **)almat_pointer(n,n); |
|
dq = ONE; |
|
for ( i = 0; i < n; i++ ) { |
|
dn0 = ONEN; |
|
for ( j = 0; j < n; j++ ) { |
|
if ( !m[i][j] ) continue; |
|
lgp(m[i][j],&nm,&dn); |
|
gcdn(dn0,dn,&gn); divsn(dn0,gn,&qn); muln(qn,dn,&dn0); |
|
} |
|
if ( !UNIN(dn0) ) { |
|
NTOQ(dn0,1,ds); |
|
for ( j = 0; j < n; j++ ) |
|
mulp(CO,(P)m[i][j],(P)ds,&w[i][j]); |
|
mulq(dq,ds,&dt); dq = dt; |
|
} else |
|
for ( j = 0; j < n; j++ ) |
|
w[i][j] = (P)m[i][j]; |
|
} |
|
m = (pointer **)w; |
|
} |
|
|
for ( i = 0, max = 0; i < n; i++ ) |
for ( i = 0, max = 0; i < n; i++ ) |
for ( j = 0; j < n; j++ ) |
for ( j = 0; j < n; j++ ) |
Line 5212 void nd_det(int mod,MAT f,P *rp) |
|
Line 5236 void nd_det(int mod,MAT f,P *rp) |
|
ndv_mul_c(mod,d,mod-1); |
ndv_mul_c(mod,d,mod-1); |
else |
else |
ndv_mul_c_q(d,mone); |
ndv_mul_c_q(d,mone); |
*rp = ndvtop(mod,CO,fv,d); |
r = ndvtop(mod,CO,fv,d); |
|
if ( !mod && !UNIQ(dq) ) |
|
divsp(CO,r,(P)dq,rp); |
|
else |
|
*rp = r; |
} |
} |
|
|
ND ndv_mul_nmv_trunc(int mod,NMV m0,NDV p,UINT *d) |
ND ndv_mul_nmv_trunc(int mod,NMV m0,NDV p,UINT *d) |