Changeset a4892f in git
- Timestamp:
- Sep 11, 2004, 12:39:51 PM (20 years ago)
- Branches:
- (u'spielwiese', '4a9821a93ffdc22a6696668bd4f6b8c9de3e6c5f')
- Children:
- 57647a5ed187e2899f88bbad86882f753826b4d8
- Parents:
- dd83f35666a62442a05a60796bcdfb7dbd4b7b6e
- Location:
- Singular
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/tgb.cc
rdd83f3 ra4892f 1813 1813 } 1814 1814 //try to fill, return FALSE iff queue is empty 1815 static void simplify(monom_poly h, calc_dat* c){1815 static void simplify(monom_poly& h, calc_dat* c){ 1816 1816 mp_array_list* F=c->F; 1817 1817 poly_array_list* F_minus=c->F_minus; … … 1873 1873 for(z=0;z<rows;z++) 1874 1874 { 1875 if(free_numbers) 1876 { 1877 int z2; 1878 for(z2=0;z2<columns;z2++) 1875 if(n[z]) 1876 { 1877 if(free_numbers) 1879 1878 { 1880 nDelete(&(n[z][z2])); 1881 } 1882 } 1883 omfree(n[z]); 1879 int z2; 1880 for(z2=0;z2<columns;z2++) 1881 { 1882 nDelete(&(n[z][z2])); 1883 } 1884 } 1885 omfree(n[z]); 1886 } 1884 1887 } 1885 1888 omfree(n); … … 1912 1915 n[j]=h; 1913 1916 } 1914 BOOLEANtgb_matrix::min_col_not_zero_in_row(int row){1917 int tgb_matrix::min_col_not_zero_in_row(int row){ 1915 1918 int i; 1916 1919 for(i=0;i<columns;i++) 1920 { 1921 if(!(nIsZero(n[row][i]))) 1922 return i; 1923 } 1924 return columns;//error code 1925 } 1926 int tgb_matrix::next_col_not_zero(int row,int pre){ 1927 int i; 1928 for(i=pre+1;i<columns;i++) 1917 1929 { 1918 1930 if(!(nIsZero(n[row][i]))) … … 1964 1976 } 1965 1977 } 1978 } 1979 void tgb_matrix::free_row(int row, BOOLEAN free_non_zeros){ 1980 int i; 1981 for(i=0;i<columns;i++) 1982 if((free_non_zeros)||(nIsZero(n[row][i]))) 1983 nDelete(&(n[row][i])); 1984 omfree(n[row]); 1985 n[row]=NULL; 1966 1986 } 1967 1987 void simple_gauss(tgb_matrix* mat){ … … 2070 2090 } 2071 2091 return t; 2092 } 2093 2094 //returns m_index and destroys mat 2095 static int retranslate(poly* m,tgb_matrix* mat,poly* done, calc_dat* c){ 2096 int i; 2097 int m_index=0; 2098 for(i=0;i<mat->get_rows();i++) 2099 { 2100 if(mat->zero_row(i)) 2101 { 2102 mat->free_row(i); 2103 continue; 2104 } 2105 2106 m[m_index]=pInit(); 2107 int v=mat->min_col_not_zero_in_row(i); 2108 //v=done_index-1-pos; => pos=done_index-1-v=mat->get_columns()-1-v 2109 int pos=mat->get_columns()-1-v; 2110 int* ev=(int*) omalloc((c->r->N+1)*sizeof(int)); 2111 pGetExpV(done[pos],ev); 2112 pSetExpV(m[m_index],ev); 2113 omfree(ev); 2114 2115 poly p=m[m_index]; 2116 pSetCoeff(p,mat->get(i,v)); 2117 while((v=mat->next_col_not_zero(i,v))!=mat->get_columns()) 2118 { 2119 poly pn=pInit(); 2120 2121 //v=done_index-1-pos; => pos=done_index-1-v=mat->get_columns()-1-v 2122 pos=mat->get_columns()-1-v; 2123 ev=(int*) omalloc((c->r->N+1)*sizeof(int)); 2124 pGetExpV(done[pos],ev); 2125 pSetExpV(pn,ev); 2126 omfree(ev); 2127 pSetCoeff(pn,mat->get(i,v)); 2128 p->next=pn; 2129 p=pn; 2130 } 2131 p->next=NULL; 2132 mat->free_row(i, FALSE); 2133 m_index++; 2134 } 2135 2136 delete mat; 2137 return m_index; 2138 2072 2139 } 2073 2140 static void go_on_F4 (calc_dat* c){ … … 2335 2402 2336 2403 //next Step Gauss 2337 2338 //next Step addElements to basis 2339 2404 simple_gauss(mat); 2405 //next Step retranslate 2406 2407 assume(mat->get_rows()<=p_index); 2408 //new meaning of m 2409 m_size=mat->get_rows(); 2410 m=(poly*) omalloc(m_size*sizeof(poly)); 2411 m_index=retranslate(m,mat,done,c); 2412 mat=NULL; 2413 //next Step addElements to basis 2414 2340 2415 // pre_comp(p,i,c); 2341 2416 if(i==0){ … … 2535 2610 while(c->pair_top>=0) 2536 2611 { 2537 go_on(c); 2612 if(F4_mode) 2613 go_on_F4(c); 2614 else 2615 go_on(c); 2538 2616 } 2539 2617 while(c->to_destroy) -
Singular/tgb.h
rdd83f3 ra4892f 113 113 number get(int i, int j); 114 114 BOOLEAN is_zero_entry(int i, int j); 115 BOOLEAN min_col_not_zero_in_row(int row); 115 void free_row(int row, BOOLEAN free_non_zeros=TRUE); 116 int min_col_not_zero_in_row(int row); 117 int next_col_not_zero(int row,int pre); 116 118 BOOLEAN zero_row(int row); 117 119 void mult_row(int row,number factor);
Note: See TracChangeset
for help on using the changeset viewer.