Changeset d02d9c in git


Ignore:
Timestamp:
Mar 6, 2003, 8:57:26 PM (21 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
8b0b91bf90977a8e39fcf4165e87da8519abbaa6
Parents:
96504053d86d42ee1a2a0df017d65d07711469d7
Message:
*bricken: work in progress


git-svn-id: file:///usr/local/Singular/svn/trunk@6578 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
Singular
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • Singular/tgb.cc

    r965040 rd02d9c  
    19871987      int best=erg.to_reduce_u+1;
    19881988      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);
    19901990        if (qc<quality_a){
    19911991          best=i;
     
    20132013        int best=erg.to_reduce_u+1;
    20142014        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);
    20162016          if (qc<quality_a){
    20172017            best=i;
     
    20332033        assume(erg.to_reduce_u==erg.to_reduce_l);
    20342034        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);
    20362036        if(qc<quality_a){
    20372037          BOOLEAN exp=FALSE;
     
    20692069      assume(erg.reduce_by==erg.to_reduce_u+1);
    20702070      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);
    20722072      int i;
    20732073        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);
    20752075          if (qc<quality_a){
    20762076            best=i;
     
    20942094      //with same leading term
    20952095      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);
    20972097      int qc;
    20982098      while((il>0) && pLmEqual(los[il-1].p,los[il].p)){
    20992099        il--;
    2100         qc=guess_quality(los[il],c);
     2100        qc=los[il].guess_quality(c);
    21012101        if (qc<quality_a){
    21022102          quality_a=qc;
     
    24112411
    24122412}
     2413
     2414void 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
     2445void 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}
     2459int 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  
    2727//#define REDTAIL_PROT
    2828//#define QUICK_SPOLY_TEST
     29struct 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
    2938
    3039/**
     
    4554    if((--counter)==0)
    4655      {
    47         nDelete(&multiplied);
    48         kBucketDeleteAndDestroy(&bucket);
    4956        delete this; //self destruction
    5057      }
    5158  }
     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
    5269 
    5370};
     
    6279  int b;
    6380};
    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 j
    75   int i;
    76   int j;
    77   int deg;
    78   int expected_length;
    79   poly lcm_of_lm;
    80 };
    81 
    82 
    83 enum calc_state
    84   {
    85     UNCALCULATED,
    86     HASTREP,
    87     UNIMPORTANT,
    88     SOONTREP
    89   };
    9081struct calc_dat
    9182{
     
    116107  BOOLEAN is_char0;
    117108};
     109class 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
     123enum calc_state
     124  {
     125    UNCALCULATED,
     126    HASTREP,
     127    UNIMPORTANT,
     128    SOONTREP
     129  };
     130
    118131static int add_to_reductors(calc_dat* c, poly h, int len);
    119132static int bucket_guess(kBucket* bucket);
Note: See TracChangeset for help on using the changeset viewer.