| version 1.7, 2000/09/07 23:59:55 |
version 1.9, 2001/09/05 08:09:10 |
|
|
| * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
| * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
| * |
* |
| * $OpenXM: OpenXM_contrib2/asir2000/lib/gr,v 1.6 2000/08/22 05:04:22 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/lib/gr,v 1.8 2001/04/09 02:42:29 noro Exp $ |
| */ |
*/ |
| extern INIT_COUNT,ITOR_FAIL$ |
extern INIT_COUNT,ITOR_FAIL$ |
| extern REMOTE_MATRIX,REMOTE_NF,REMOTE_VARS$ |
extern REMOTE_MATRIX,REMOTE_NF,REMOTE_VARS$ |
| Line 935 def dp_terms(D,V) |
|
| Line 935 def dp_terms(D,V) |
|
| |
|
| def gb_comp(A,B) |
def gb_comp(A,B) |
| { |
{ |
| for ( T = A; T != []; T = cdr(T) ) { |
LA = length(A); |
| for ( S = B, M = car(T), N = -M; S != []; S = cdr(S) ) |
LB = length(B); |
| if ( car(S) == M || car(S) == N ) |
if ( LA != LB ) |
| break; |
return 0; |
| if ( S == [] ) |
A1 = qsort(newvect(LA,A)); |
| |
B1 = qsort(newvect(LB,B)); |
| |
for ( I = 0; I < LA; I++ ) |
| |
if ( A1[I] != B1[I] && A1[I] != -B1[I] ) |
| break; |
break; |
| } |
return I == LA ? 1 : 0; |
| return T == [] ? 1 : 0; |
|
| } |
} |
| |
|
| def zero_dim(G,V,O) { |
def zero_dim(G,V,O) { |
| Line 1433 def register_input(List) |
|
| Line 1435 def register_input(List) |
|
| Len = length(List); |
Len = length(List); |
| NFArray = newvect(Len+100,List); |
NFArray = newvect(Len+100,List); |
| } |
} |
| |
|
| |
/* |
| |
tracetogen(): preliminary version |
| |
|
| |
dp_gr_main() returns [GB,GBIndex,Trace]. |
| |
GB : groebner basis |
| |
GBIndex : IndexList (corresponding to Trace) |
| |
Trace : [InputList,Trace0,Trace1,...] |
| |
TraceI : [Index,TraceList] |
| |
TraceList : [[Coef,Index,Monomial,Denominator],...] |
| |
Poly <- 0 |
| |
Poly <- (Coef*Poly+Monomial*PolyList[Index])/Denominator |
| |
*/ |
| |
|
| |
def tracetogen(GBIndex,Trace) |
| |
{ |
| |
InputList = Trace[0]; |
| |
Trace = cdr(Trace); |
| |
|
| |
/* number of initial basis */ |
| |
Nini = length(InputList); |
| |
|
| |
/* number of generated basis */ |
| |
Ngen = length(Trace); |
| |
|
| |
N = Nini + Ngen; |
| |
|
| |
/* stores traces */ |
| |
Tr = vector(N); |
| |
|
| |
/* stores coeffs */ |
| |
Coef = vector(N); |
| |
|
| |
for ( I = 0; I < Nini; I++ ) { |
| |
Tr[I] = [1,I,1,1]; |
| |
C = vector(Nini); |
| |
C[I] = 1; |
| |
Coef[I] = C; |
| |
} |
| |
for ( ; I < N; I++ ) |
| |
Tr[I] = Trace[I-Nini][1]; |
| |
|
| |
for ( T = GBIndex; T != []; T = cdr(T) ) |
| |
compute_coef_by_trace(car(T),Tr,Coef); |
| |
return Coef; |
| |
} |
| |
|
| |
def compute_coef_by_trace(I,Tr,Coef) |
| |
{ |
| |
if ( Coef[I] ) |
| |
return; |
| |
|
| |
/* XXX */ |
| |
Nini = size(Coef[0])[0]; |
| |
|
| |
/* initialize coef vector */ |
| |
CI = vector(Nini); |
| |
|
| |
for ( T = Tr[I]; T != []; T = cdr(T) ) { |
| |
/* Trace = [Coef,Index,Monomial,Denominator] */ |
| |
Trace = car(T); |
| |
C = Trace[0]; |
| |
Ind = Trace[1]; |
| |
Mon = Trace[2]; |
| |
Den = Trace[3]; |
| |
if ( !Coef[Ind] ) |
| |
compute_coef_by_trace(Ind,Tr,Coef); |
| |
|
| |
/* XXX */ |
| |
CT = newvect(Nini); |
| |
for ( J = 0; J < Nini; J++ ) |
| |
CT[J] = (C*CI[J]+Mon*Coef[Ind][J])/Den; |
| |
CI = CT; |
| |
} |
| |
Coef[I] = CI; |
| |
} |
| |
end$ |
| end$ |
end$ |