Changeset 2ca72f in git
- Timestamp:
- Feb 21, 2002, 6:52:23 PM (21 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'f875bbaccd0831e36aaed09ff6adeb3eb45aeb94')
- Children:
- 8fe22ccc9de914e68da65f1ac8874c938ddd2809
- Parents:
- 15d67dbe0d26f75f69401431c375a9cc6f137faa
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/gaussman.lib
r15d67db r2ca72f 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: gaussman.lib,v 1.6 8 2002-02-16 10:59:11mschulze Exp $";2 version="$Id: gaussman.lib,v 1.69 2002-02-21 17:52:23 mschulze Exp $"; 3 3 category="Singularities"; 4 4 … … 326 326 /////////////////////////////////////////////////////////////////////////////// 327 327 328 static proc saturate( int K0)328 static proc saturate() 329 329 { 330 330 int mu=ncols(gmsbasis); … … 362 362 /////////////////////////////////////////////////////////////////////////////// 363 363 364 static proc basisrep(matrix A0,ideal r,module H,int k0,int K ,int K0)364 static proc basisrep(matrix A0,ideal r,module H,int k0,int K) 365 365 { 366 366 dbprint(printlevel-voice+2,"// compute matrix A of t"); … … 378 378 /////////////////////////////////////////////////////////////////////////////// 379 379 380 static proc eigvals(matrix A0,ideal r,module H,int k0 ,int K0)380 static proc eigvals(matrix A0,ideal r,module H,int k0) 381 381 { 382 382 dbprint(printlevel-voice+2, 383 383 "// compute eigenvalues e with multiplicities m of A"); 384 384 matrix A; 385 A,A0,r=basisrep(A0,r,H,k0,0 ,K0);385 A,A0,r=basisrep(A0,r,H,k0,0); 386 386 list l=eigenvals(A); 387 387 def e,m=l[1..2]; … … 389 389 dbprint(printlevel-voice+2,"// m="+string(m)); 390 390 391 return(e,m,A0,r ,int(max(e)-min(e)));392 } 393 /////////////////////////////////////////////////////////////////////////////// 394 395 static proc transf(matrix A,matrix A0,ideal r,module H,module H0,ideal e,intvec m,int k0,int k1,int K,int K0)391 return(e,m,A0,r); 392 } 393 /////////////////////////////////////////////////////////////////////////////// 394 395 static proc transf(matrix A,matrix A0,ideal r,module H,module H0,ideal e,intvec m,int k0,int K,int opt) 396 396 { 397 397 int mu=ncols(gmsbasis); 398 398 399 dbprint(printlevel-voice+2,"// compute minimum e0 and maximum e1 of e");400 399 number e0,e1=min(e),max(e); 401 dbprint(printlevel-voice+2,"// e0="+string(e0)); 402 dbprint(printlevel-voice+2,"// e1="+string(e1)); 403 A,A0,r=basisrep(A0,r,H,k0,K+k1,K0+k1); 400 401 int i,j,k; 402 int k1; 403 intvec d; 404 d[ncols(e)]=0; 405 if(opt) 406 { 407 dbprint(printlevel-voice+2, 408 "// compute maximal differences d of e"); 409 for(i=1;i<=ncols(e);i++) 410 { 411 d[i]=int(e[i]-e0); 412 } 413 } 414 else 415 { 416 dbprint(printlevel-voice+2, 417 "// compute maximal integer differences d of e"); 418 for(i=1;i<ncols(e);i++) 419 { 420 for(j=i+1;i<=ncols(e);i++) 421 { 422 k=int(e[i]-e[j]); 423 if(number(e[i]-e[j])==k) 424 { 425 if(k>d[i]) 426 { 427 d[i]=k; 428 } 429 if(-k>d[j]) 430 { 431 d[j]=-k; 432 } 433 } 434 } 435 } 436 } 437 dbprint(printlevel-voice+2,"// d="+string(d)); 438 439 for(i,k=1,0;i<=size(d);i++) 440 { 441 if(k<d[i]) 442 { 443 k=d[i]; 444 } 445 } 446 447 A,A0,r=basisrep(A0,r,H,k0,K+k1); 404 448 module U0=s^k0*freemodule(mu); 405 449 406 if( e1>=e0+1)407 { 408 int i ,j,i0,j0,i1,j1;450 if(k>0) 451 { 452 int i0,j0,i1,j1; 409 453 module U,V; 410 454 list l; 411 455 412 while( e1>=e0+1)456 while(k>0) 413 457 { 414 458 dbprint(printlevel-voice+2,"// transform to separate eigenvalues"); … … 423 467 U0=U0*U; 424 468 425 dbprint(printlevel-voice+2,"// transform to reduce e1 by 1"); 469 dbprint(printlevel-voice+2, 470 "// transform to reduce d by 1"); 426 471 for(i0,i=1,1;i0<=ncols(e);i0++) 427 472 { … … 432 477 for(j1=1;j1<=m[j0];j1,j=j1+1,j+1) 433 478 { 434 if( number(e[i0])<e0+1&&number(e[j0])>=e0+1)479 if(d[i0]==0&&d[j0]>0) 435 480 { 436 481 A[i,j]=A[i,j]/s; 437 482 } 438 if( number(e[i0])>=e0+1&&number(e[j0])<e0+1)483 if(d[i0]>0&&d[j0]==0) 439 484 { 440 485 A[i,j]=A[i,j]*s; … … 448 493 for(i0,i=1,1;i0<=ncols(e);i0++) 449 494 { 450 if( number(e[i0])>=e0+1)495 if(d[i0]>0) 451 496 { 452 497 for(i1=1;i1<=m[i0];i1,i=i1+1,i+1) … … 457 502 } 458 503 e[i0]=e[i0]-1; 504 d[i0]=d[i0]-1; 459 505 } 460 506 else … … 465 511 H0=transpose(H0); 466 512 467 l=spnf(e,m); 468 e,m=l[1..2]; 469 470 e1=e1-1; 471 dbprint(printlevel-voice+2,"// e1="+string(e1)); 513 l=sppnf(e,d,m); 514 e,d,m=l[1..3]; 515 516 k--; 472 517 } 473 518 … … 498 543 ideal e; 499 544 intvec m; 500 int k1; 501 502 def A0,r,H,H0,k0=saturate(n); 503 e,m,A0,r,k1=eigvals(A0,r,H,k0,n); 504 A,A0,r,H0,U0,e,m=transf(A,A0,r,H,H0,e,m,k0,k1,0,0); 545 546 def A0,r,H,H0,k0=saturate(); 547 e,m,A0,r=eigvals(A0,r,H,k0); 548 A,A0,r,H0,U0,e,m=transf(A,A0,r,H,H0,e,m,k0,0,0); 505 549 506 550 list l=jordan(A,e,m); … … 916 960 ideal e; 917 961 intvec m; 918 int k1; 919 920 def A0,r,H,H0,k0=saturate(n); 921 e,m,A0,r,k1=eigvals(A0,r,H,k0,n); 922 A,A0,r,H0,U0,e,m=transf(A,A0,r,H,H0,e,m,k0,k1,0,0); 962 963 def A0,r,H,H0,k0=saturate(); 964 e,m,A0,r=eigvals(A0,r,H,k0); 965 A,A0,r,H0,U0,e,m=transf(A,A0,r,H,H0,e,m,k0,0,1); 923 966 924 967 dbprint(printlevel-voice+2,"// compute weight filtration basis"); … … 1021 1064 ideal e; 1022 1065 intvec m; 1023 int k1; 1024 1025 def A0,r,H,H0,k0=saturate(2*n+mu-1);1026 e,m,A0,r,k1=eigvals(A0,r,H,k0,n);1027 A,A0,r,H0,U0,e,m=transf(A,A0,r,H,H0,e,m,k0,k 1,k0+k1,k0+k1);1066 1067 def A0,r,H,H0,k0=saturate(); 1068 e,m,A0,r=eigvals(A0,r,H,k0); 1069 int k1=int(max(e)-min(e)); 1070 A,A0,r,H0,U0,e,m=transf(A,A0,r,H,H0,e,m,k0,k0+k1,1); 1028 1071 1029 1072 ring S=0,s,(ds,c);
Note: See TracChangeset
for help on using the changeset viewer.