Changeset 0dbfec in git for Singular/LIB/standard.lib
- Timestamp:
- Sep 27, 2005, 6:52:57 PM (19 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 4e6fa5fccba2b237de4e290af1b8886d787757dc
- Parents:
- 82d1a72c907e4d9593d13fb4216f23d0e65fad42
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/standard.lib
r82d1a7 r0dbfec 1 1 ////////////////////////////////////////////////////////////////////////////// 2 version="$Id: standard.lib,v 1.7 2 2005-07-25 14:46:50 brickenExp $";2 version="$Id: standard.lib,v 1.73 2005-09-27 16:52:57 Singular Exp $"; 3 3 category="Miscellaneous"; 4 4 info=" … … 138 138 ////////////////////////////////////////////////////////////////////////// 139 139 140 ////////////////////////////////////////////////////////////////////////// 140 141 proc groebner(def i, list #) 141 142 "SYNTAX: @code{groebner (} ideal_expression @code{)} @* … … 293 294 294 295 // construct ring in which first std computation is done 295 string varstr_P = varstr(P);296 string parstr_P = parstr(P); 297 int is_homog = (homog(i) && (npars_P <= 1));296 // CL: 21/09/05 for Singular 3-0 with ringlists.... 297 298 list BRlist = ringlist(P); 298 299 int add_vars = 0; 299 string ri = "ring Phelp ="; 300 int nvarP = nvars(P); 301 int k; 302 ideal Qideal = ideal(P); 303 string ri; 300 304 301 305 if (npars_P > 0) 302 306 { 303 for( intk=ncols(i); k>0; k--) { i[k]=cleardenom(i[k]); }307 for(k=ncols(i); k>0; k--) { i[k]=cleardenom(i[k]); } 304 308 } 305 309 // more than one parameters are converted to ring variables 306 310 if (npars_P > 1) 307 311 { 308 ri = ri + string(char(P)) + ",(" + varstr_P + "," + parstr_P; 312 for (k=1; k<=npars_P; k++) 313 { 314 BRlist[2][nvarP+k] = BRlist[1][2][k]; 315 } 316 BRlist[1]=BRlist[1][1]; 309 317 add_vars = npars_P; 310 318 } 311 else 312 { 313 ri = ri + "(" + charstr(P) + "),(" + varstr_P; 314 } 319 320 321 // for Hilbert driven approach, Qring structure is removed (defining ideal 322 // will be added to the ideal under consideration in the process). 323 if (size(BRlist[4])>0) 324 { 325 int was_qring = 1; 326 BRlist[4] = ideal(0); 327 } 315 328 316 329 // a homogenizing variable is added, if necessary 330 int is_homog = (homog(i) && (npars_P <= 1)); 317 331 if (! is_homog) 318 332 { 319 ri = ri + ",@t";320 333 add_vars = add_vars + 1; 321 } 334 BRlist[2][nvarP+add_vars] = "@t@"; 335 } 336 // save ordering for later use 337 list ord_P = BRlist[3]; // should be ring independent 338 322 339 // ordering is set to (dp, C) 323 ri = ri + "),(dp,C);"; 340 intvec weight_dp = 1; 341 for (k=2; k<=nvarP+add_vars; k++) { weight_dp = weight_dp,1; } 342 BRlist[3] = list(); 343 BRlist[3][1]=list("dp",weight_dp); 344 BRlist[3][2]=list("C",intvec(0)); 324 345 325 346 // change the ring 326 execute(ri); 347 def Phelp = ring(BRlist); 348 kill BRlist; 349 setring Phelp; 327 350 328 351 // get ideal from previous ring 329 352 if (is_homog) 330 353 { 331 ideal qh = imap(P, i) ;354 ideal qh = imap(P, i), imap(P,Qideal); 332 355 } 333 356 else 334 357 { 335 358 // and homogenize 336 ideal qh =homog(imap(P,i),@t);359 ideal qh = homog(imap(P,i),@t@), homog(imap(P,Qideal),@t@); 337 360 } 338 361 … … 340 363 if (p_opt) 341 364 { 342 "std in " + ri[13, size(ri) - 13]; 365 ri = string(Phelp); 366 "std in " + ri; 343 367 } 344 368 intvec hi=hilb(std(qh),1); … … 359 383 // additional variables were introduced 360 384 // need another intermediate ring 361 ri = "ring Phelp1 = (" + charstr(Phelp) 362 + "),(" + varstr(Phelp) + "),(" + ordstr_P; 363 364 // for lp wit at most one parameter, we do not need a block ordering 365 if ( ! (IsSimple_P && (add_vars <2) && find(ordstr_P, "l"))) 366 { 367 // need block ordering 368 ri = ri + ", dp(" + string(add_vars) + ")"; 369 } 370 ri = ri + ");"; 385 list BRlist = ringlist(Phelp); 386 BRlist[3] = list(); 387 for (k=1; k<=size(ord_P); k++) 388 { 389 BRlist[3][k] = ord_P[k]; 390 } 391 392 if ( IsSimple_P && (add_vars==1) && (size(ord_P)==2) && (ord_P[1][1]=="lp") ) 393 { 394 // for lp with at most one parameter, we do not need a block ordering 395 intvec OW = BRlist[3][1][2]; 396 OW = OW,1; 397 BRlist[3][1][2] = OW; 398 } 399 else 400 { 401 if ( IsSimple_P && (add_vars==1) && (size(ord_P)==2) && (ord_P[2][1]=="lp") ) 402 { 403 // for lp with at most one parameter, we do not need a block ordering 404 intvec OW = BRlist[3][2][2]; 405 OW = OW,1; 406 BRlist[3][2][2] = OW; 407 } 408 else 409 { 410 intvec OW = 1; 411 for (k=2; k<=add_vars; k++) { OW = OW,1; } 412 BRlist[3][size(ord_P)+1] = list("dp",OW); 413 } 414 } 371 415 372 416 // change to intermediate ring 373 execute(ri); 417 def Phelp1 = ring(BRlist); 418 setring Phelp1; 419 374 420 ideal qh = imap(Phelp, qh); 375 421 kill Phelp; 376 422 if (p_opt) 377 423 { 378 "std with hilb in " + ri[14,size(ri)-14]; 424 ri = string(Phelp1); 425 "std with hilb in " + ri; 379 426 } 380 427 // compute std with Hilbert series … … 387 434 "dehomogenization"; 388 435 } 389 qh = subst(qh, @t , 1);436 qh = subst(qh, @t@, 1); 390 437 } 391 438 … … 433 480 defined(groebner_error); 434 481 } 435 //////////////////////////////////////////////////////////////////////////436 482 437 483 proc res(list #)
Note: See TracChangeset
for help on using the changeset viewer.