| 2225 | } |
| 2226 | |
| 2227 | void resMatrixDense::generateMonomData( int deg, intvec* polyDegs , intvec* iVO ) |
| 2228 | { |
| 2229 | int i,j,k; |
| 2230 | |
| 2231 | // init monomData |
| 2232 | veclistblock= 512; |
| 2233 | veclistmax= veclistblock; |
| 2234 | resVectorList= (resVector *)omAlloc( veclistmax*sizeof( resVector ) ); |
| 2235 | |
| 2236 | // Init resVector()s |
| 2237 | for ( j= veclistmax - 1; j >= 0; j-- ) resVectorList[j].init(); |
| 2238 | numVectors= 0; |
| 2239 | |
| 2240 | // Generate all monoms of degree deg |
| 2241 | poly start= pOne(); |
| 2242 | generateMonoms( start, 1, deg ); |
| 2243 | pDelete( & start ); |
| 2244 | |
| 2245 | mprSTICKYPROT("\n"); |
| 2246 | |
| 2247 | // Check for reduced monoms |
| 2248 | // First generate polyDegs.rows() monoms |
| 2249 | // x(k)^(polyDegs[k]), 0 <= k < polyDegs.rows() |
| 2250 | ideal pDegDiv= idInit( polyDegs->rows(), 1 ); |
| 2251 | for ( k= 0; k < polyDegs->rows(); k++ ) |
| 2252 | { |
| 2253 | poly p= pOne(); |
| 2254 | pSetExp( p, k + 1, (*polyDegs)[k] ); |
| 2255 | pSetm( p ); |
| 2256 | (pDegDiv->m)[k]= p; |
| 2257 | } |
| 2258 | |
| 2259 | // Now check each monom if it is reduced. |
| 2260 | // A monom monom is called reduced if there exists |
| 2261 | // exactly one x(k)^(polyDegs[k]) that divides the monom. |
| 2262 | int divCount; |
| 2263 | for ( j= numVectors - 1; j >= 0; j-- ) |
| 2264 | { |
| 2265 | divCount= 0; |
| 2266 | for ( k= 0; k < IDELEMS(pDegDiv); k++ ) |
| 2267 | if ( pLmDivisibleByNoComp( (pDegDiv->m)[k], resVectorList[j].mon ) ) |
| 2268 | divCount++; |
| 2269 | resVectorList[j].isReduced= (divCount == 1); |
| 2270 | } |
| 2271 | |
| 2272 | // create the sets S(k)s |
| 2273 | // a monom x(i)^deg, deg given, is element of the set S(i) |
| 2274 | // if all x(0)^(polyDegs[0]) ... x(i-1)^(polyDegs[i-1]) DONT divide |
| 2275 | // x(i)^deg and only x(i)^(polyDegs[i]) divides x(i)^deg |
| 2276 | bool doInsert; |
| 2277 | for ( k= 0; k < iVO->rows(); k++) |
| 2278 | { |
| 2279 | //mprPROTInl(" ------------ var:",(*iVO)[k]); |
| 2280 | for ( j= numVectors - 1; j >= 0; j-- ) |
| 2281 | { |
| 2282 | //mprPROTPnl("testing monom",resVectorList[j].mon); |
| 2283 | if ( resVectorList[j].elementOfS == SFREE ) |
| 2284 | { |