Changeset d02d9c in git
- Timestamp:
- Mar 6, 2003, 8:57:26 PM (21 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 8b0b91bf90977a8e39fcf4165e87da8519abbaa6
- Parents:
- 96504053d86d42ee1a2a0df017d65d07711469d7
- Location:
- Singular
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/tgb.cc
r965040 rd02d9c 1987 1987 int best=erg.to_reduce_u+1; 1988 1988 for (i=erg.to_reduce_u;i>=erg.to_reduce_l;i--){ 1989 int qc= guess_quality(los[i],c);1989 int qc=los[i].guess_quality(c); 1990 1990 if (qc<quality_a){ 1991 1991 best=i; … … 2013 2013 int best=erg.to_reduce_u+1; 2014 2014 for (i=erg.to_reduce_u;i>=erg.to_reduce_l;i--){ 2015 int qc= guess_quality(los[i],c);2015 int qc=los[i].guess_quality(c); 2016 2016 if (qc<quality_a){ 2017 2017 best=i; … … 2033 2033 assume(erg.to_reduce_u==erg.to_reduce_l); 2034 2034 int quality_a=quality_of_pos_in_strat_S(erg.reduce_by,c); 2035 int qc= guess_quality(los[erg.to_reduce_u],c);2035 int qc=los[erg.to_reduce_u].guess_quality(c); 2036 2036 if(qc<quality_a){ 2037 2037 BOOLEAN exp=FALSE; … … 2069 2069 assume(erg.reduce_by==erg.to_reduce_u+1); 2070 2070 int best=erg.reduce_by; 2071 int quality_a= guess_quality(los[erg.reduce_by],c);2071 int quality_a=los[erg.reduce_by].guess_quality(c); 2072 2072 int i; 2073 2073 for (i=erg.to_reduce_u;i>=erg.to_reduce_l;i--){ 2074 int qc= guess_quality(los[i],c);2074 int qc=los[i].guess_quality(c); 2075 2075 if (qc<quality_a){ 2076 2076 best=i; … … 2094 2094 //with same leading term 2095 2095 int il=erg.reduce_by; 2096 int quality_a = guess_quality(los[erg.reduce_by],c);2096 int quality_a =los[erg.reduce_by].guess_quality(c); 2097 2097 int qc; 2098 2098 while((il>0) && pLmEqual(los[il-1].p,los[il].p)){ 2099 2099 il--; 2100 qc= guess_quality(los[il],c);2100 qc=los[il].guess_quality(c); 2101 2101 if (qc<quality_a){ 2102 2102 quality_a=qc; … … 2411 2411 2412 2412 } 2413 2414 void red_object::reduction_step(int reduction_id, poly reductor_full, int full_len, poly reductor_part, reduction_accumulator* join_to, calc_dat* c) 2415 { 2416 //we have to add support later for building new sums at this points, this involves a change in the interface 2417 if(this->sum==NULL) 2418 kBucketPolyRed(this->bucket,reductor_full, 2419 full_len, 2420 c->strat->kNoether); 2421 else 2422 { 2423 assume(sum->ac!=NULL); 2424 if(sum->ac->last_reduction_id!=reduction_id){ 2425 2426 2427 2428 2429 2430 number n1=kBucketPolyRed(sum->ac->bucket,reductor_full, full_len, c->strat->kNoether); 2431 number n2=nMult(n1,sum->ac->multiplied); 2432 nDelete(&sum->ac->multiplied); 2433 nDelete(&n1); 2434 sum->ac->multiplied=n2; 2435 } 2436 //reduce and adjust multiplied 2437 sum->ac->last_reduction_id=reduction_id; 2438 2439 } 2440 2441 2442 } 2443 2444 2445 void red_object::adjust_coefs(number c_r, number c_ac_r){ 2446 assume(this->sum!=NULL); 2447 number n1=nMult(sum->c_my, c_ac_r); 2448 number n2=nMult(sum->c_ac,c_r); 2449 nDelete(&sum->c_my); 2450 nDelete(&sum->c_ac); 2451 2452 int ct = ksCheckCoeff(&n1, &n2); 2453 sum->c_my=n1; 2454 sum->c_ac=nNeg(n2); 2455 nDelete(&n2); 2456 2457 2458 } 2459 int red_object::guess_quality(calc_dat* c){ 2460 //works at the moment only for lenvar 1, because in different 2461 //case, you have to look on coefs 2462 int s=0; 2463 if (c->is_char0) 2464 s=kSBucketLength(bucket); 2465 else 2466 s=bucket_guess(bucket); 2467 if (sum!=NULL){ 2468 if (c->is_char0) 2469 s+=kSBucketLength(sum->ac->bucket); 2470 else 2471 s+=bucket_guess(sum->ac->bucket); 2472 } 2473 return s; 2474 } -
Singular/tgb.h
r965040 rd02d9c 27 27 //#define REDTAIL_PROT 28 28 //#define QUICK_SPOLY_TEST 29 struct sorted_pair_node{ 30 //criterium, which is stable 0. small lcm 1. small i 2. small j 31 int i; 32 int j; 33 int deg; 34 int expected_length; 35 poly lcm_of_lm; 36 }; 37 29 38 30 39 /** … … 45 54 if((--counter)==0) 46 55 { 47 nDelete(&multiplied);48 kBucketDeleteAndDestroy(&bucket);49 56 delete this; //self destruction 50 57 } 51 58 } 59 int last_reduction_id; 60 reduction_accumulator(){ 61 last_reduction_id=-1; 62 bucket=kBucketCreate(currRing); 63 } 64 ~reduction_accumulator(){ 65 nDelete(&multiplied); 66 kBucketDeleteAndDestroy(&bucket); 67 } 68 52 69 53 70 }; … … 62 79 int b; 63 80 }; 64 class red_object{65 public:66 kBucket_pt bucket;67 poly p;68 formal_sum_descriptor* sum;69 unsigned long sev;70 void flatten();71 void validate();72 };73 struct sorted_pair_node{74 //criterium, which is stable 0. small lcm 1. small i 2. small j75 int i;76 int j;77 int deg;78 int expected_length;79 poly lcm_of_lm;80 };81 82 83 enum calc_state84 {85 UNCALCULATED,86 HASTREP,87 UNIMPORTANT,88 SOONTREP89 };90 81 struct calc_dat 91 82 { … … 116 107 BOOLEAN is_char0; 117 108 }; 109 class red_object{ 110 public: 111 kBucket_pt bucket; 112 poly p; 113 formal_sum_descriptor* sum; 114 unsigned long sev; 115 void flatten(); 116 void validate(); 117 void red_object::reduction_step(int reduction_id, poly reductor_full, int full_len, poly reductor_part, reduction_accumulator* join_to, calc_dat* c); 118 void adjust_coefs(number c_r, number c_ac_r); 119 int guess_quality(calc_dat* c); 120 }; 121 122 123 enum calc_state 124 { 125 UNCALCULATED, 126 HASTREP, 127 UNIMPORTANT, 128 SOONTREP 129 }; 130 118 131 static int add_to_reductors(calc_dat* c, poly h, int len); 119 132 static int bucket_guess(kBucket* bucket);
Note: See TracChangeset
for help on using the changeset viewer.