Changeset 6a0cc83 in git


Ignore:
Timestamp:
Oct 5, 2004, 6:43:06 PM (20 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
ecd2adc73320b43f7a1c71b146a67eebd2be1d7b
Parents:
4dac0e7b03a9dfa5b46417ef355c40c878b79770
Message:
*bricken: cache for gauss


git-svn-id: file:///usr/local/Singular/svn/trunk@7519 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/tgb.cc

    r4dac0e r6a0cc83  
    24282428    return mp[row]->exp;
    24292429  }
     2430  else
     2431
    24302432 
    24312433  return columns;//error code
     
    24802482  assume(mat->mp[row]==NULL);
    24812483  mat->mp[row]=m;
     2484#ifdef TGB_DEBUG
     2485  mac_poly r=m;
     2486  while(r){
     2487    assume(r->exp<mat->columns);
     2488    r=r->next;
     2489  }
     2490#endif
    24822491}
    24832492poly free_row_to_poly(tgb_sparse_matrix* mat, int row, poly* monoms, int monom_index){
     
    25002509void simple_gauss(tgb_sparse_matrix* mat){
    25012510  int col, row;
     2511  int* row_cache=(int*) omalloc(mat->get_rows()*sizeof(int));
    25022512  col=0;
    25032513  row=0;
    25042514  int i;
    25052515  int pn=mat->get_rows();
     2516  int matcol=mat->get_columns();
    25062517  assume(pn>0);
    25072518  //first clear zeroes
     
    25112522    {
    25122523      mat->perm_rows(i,pn-1);
     2524      row_cache[pn-1]=matcol;
    25132525      pn--;
    25142526      if(i!=pn){i--;}
    25152527    }
     2528    else
     2529      row_cache[i]=mat->min_col_not_zero_in_row(i);
    25162530  }
    25172531  while(row<pn-1){
     
    25222536    //select column
    25232537   
    2524     col=mat->min_col_not_zero_in_row(row);
    2525     assume(col!=mat->get_columns());
     2538    //col=mat->min_col_not_zero_in_row(row);
     2539    assume(row_cache[row]==mat->min_col_not_zero_in_row(row));
     2540    col=row_cache[row];
     2541
     2542   
     2543    assume(col!=matcol);
    25262544    int found_in_row;
    25272545   
     
    25292547    assume(pn<=mat->get_rows());
    25302548    for(i=row+1;i<pn;i++){
    2531       int first=mat->min_col_not_zero_in_row(i);
     2549      int first;//=mat->min_col_not_zero_in_row(i);
     2550      assume(row_cache[i]==mat->min_col_not_zero_in_row(i));
     2551      first=row_cache[i];
     2552      assume(first!=matcol);
    25322553      if(first<col)
    25332554      {
     
    25382559    //select pivot
    25392560    int act_l=mat->non_zero_entries(found_in_row);
    2540     for(i=row+1;i<pn;i++){
     2561    for(i=found_in_row+1;i<pn;i++){
    25412562      assume(mat->min_col_not_zero_in_row(i)>=col);
    2542       if((!(mat->is_zero_entry(i,col)))&&(mat->non_zero_entries(i)<act_l))
     2563      int first;
     2564      assume(row_cache[i]==mat->min_col_not_zero_in_row(i));
     2565      first=row_cache[i];
     2566      assume(first!=matcol);
     2567      //      if((!(mat->is_zero_entry(i,col)))&&(mat->non_zero_entries(i)<act_l))
     2568      int nz;
     2569      if((row_cache[i]==col)&&((nz=mat->non_zero_entries(i))<act_l))
    25432570      {
    25442571        found_in_row=i;
    2545         act_l=mat->non_zero_entries(i);//should be optimized here
    2546       }
    2547 
    2548     }
     2572        act_l=nz;
     2573      }
     2574
     2575    }
     2576#ifdef TGB_DEBUG
     2577  {
     2578  int last=-1;
     2579  for(i=0;i<pn;i++)
     2580  {
     2581    int act=mat->min_col_not_zero_in_row(i);
     2582    assume(act>last);
     2583   
     2584  }
     2585  for(i=pn;i<mat->get_rows();i++)
     2586  {
     2587    assume(mat->zero_row(i));
     2588   
     2589  }
     2590 
     2591
     2592  }
     2593#endif
    25492594    mat->perm_rows(row,found_in_row);
    2550 
    2551    
     2595    int h=row_cache[row];
     2596    row_cache[row]=row_cache[found_in_row];
     2597    row_cache[found_in_row]=h;
     2598#ifdef TGB_DEBUG
     2599  {
     2600  int last=-1;
     2601  for(i=0;i<pn;i++)
     2602  {
     2603    int act=mat->min_col_not_zero_in_row(i);
     2604    assume(act>last);
     2605   
     2606  }
     2607  for(i=pn;i<mat->get_rows();i++)
     2608  {
     2609    assume(mat->zero_row(i));
     2610   
     2611  }
     2612 
     2613
     2614  }
     2615#endif 
    25522616    //reduction
    25532617    for(i=row+1;i<pn;i++){
    25542618      assume(mat->min_col_not_zero_in_row(i)>=col);
    2555       if(!(mat->is_zero_entry(i,col)))
     2619      int first;
     2620      assume(row_cache[i]==mat->min_col_not_zero_in_row(i));
     2621      first=row_cache[i];
     2622      assume(first!=matcol);
     2623      if(row_cache[i]==col)
    25562624      {
    25572625       
     
    25662634        mat->add_lambda_times_row(i,row,n1);
    25672635        assume(mat->is_zero_entry(i,col));
     2636        row_cache[i]=mat->min_col_not_zero_in_row(i);
    25682637
    25692638      }
    25702639      assume(mat->min_col_not_zero_in_row(i)>col);
    25712640    }
     2641#ifdef TGB_DEBUG
     2642  {
     2643  int last=-1;
     2644  for(i=0;i<pn;i++)
     2645  {
     2646    int act=mat->min_col_not_zero_in_row(i);
     2647    assume(act>last);
     2648   
     2649  }
     2650  for(i=pn;i<mat->get_rows();i++)
     2651  {
     2652    assume(mat->zero_row(i));
     2653   
     2654  }
     2655 
     2656
     2657  }
     2658#endif
    25722659    for(i=row+1;i<pn;i++)
    25732660    {
    2574       if(mat->zero_row(i))
     2661      assume(mat->min_col_not_zero_in_row(i)==row_cache[i]);
     2662      // if(mat->zero_row(i))
     2663      assume(matcol==mat->get_columns());
     2664      if(row_cache[i]==matcol)
    25752665      {
     2666        assume(mat->zero_row(i));
    25762667        mat->perm_rows(i,pn-1);
     2668        row_cache[i]=row_cache[pn-1];
     2669        row_cache[pn-1]=matcol;
    25772670        pn--;
    25782671        if(i!=pn){i--;}
    25792672      }
    25802673    }
     2674#ifdef TGB_DEBUG
     2675  {
     2676  int last=-1;
     2677  for(i=0;i<pn;i++)
     2678  {
     2679    int act=mat->min_col_not_zero_in_row(i);
     2680    assume(act>last);
     2681   
     2682  }
     2683  for(i=pn;i<mat->get_rows();i++)
     2684  {
     2685    assume(mat->zero_row(i));
     2686   
     2687  }
     2688 
     2689
     2690  }
     2691#endif
    25812692    row++;
    25822693  }
     2694#ifdef TGB_DEBUG
     2695  {
     2696  int last=-1;
     2697  for(i=0;i<pn;i++)
     2698  {
     2699    int act=mat->min_col_not_zero_in_row(i);
     2700    assume(act>last);
     2701   
     2702  }
     2703  for(i=pn;i<mat->get_rows();i++)
     2704  {
     2705    assume(mat->zero_row(i));
     2706   
     2707  }
     2708 
     2709
     2710  }
     2711#endif
     2712  omfree(row_cache);
    25832713}
    25842714void simple_gauss2(tgb_matrix* mat){
Note: See TracChangeset for help on using the changeset viewer.