Changeset 1eb7af in git
- Timestamp:
- Jun 22, 1999, 4:50:49 PM (24 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a800fe4b3e9d37a38c5a10cc0ae9dfa0c15a4ee6')
- Children:
- 4ad2bb592a6ffe7f195320a5d4bec4f9ef0c57dd
- Parents:
- a5bf8808e70b84793a93e968ce4ab2cd1fb26fd9
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/mondromy.lib
ra5bf88 r1eb7af 1 1 /////////////////////////////////////////////////////////////////////////////// 2 2 3 version="$Id: mondromy.lib,v 1. 1 1999-06-22 10:42:24 obachmanExp $";3 version="$Id: mondromy.lib,v 1.2 1999-06-22 14:50:49 mschulze Exp $"; 4 4 info=" 5 5 LIBRARY: mondromy.lib PROCEDURES TO COMPUTE THE MONODROMY OF A SINGULARITY … … 8 8 invunit(u,n); series inverse of polynomial u up to order n 9 9 detadj(U); determinant and adjoint matrix of square matrix U 10 jacoblift(f); lifts f^kappa in jacob(f) with minimal kappa 10 11 monodromy(f[,opt]); monodromy of isolated hypersurface singularity f 12 H''basis(f); basis of Brieskorn lattice H'' 11 13 "; 12 14 … … 64 66 } 65 67 } 68 66 69 /////////////////////////////////////////////////////////////////////////////// 67 70 … … 115 118 if(size(V)>0) 116 119 { 117 dbprint(printlevel-voice+2,"//computing codimension...");118 120 dbprint(printlevel-voice+2,"//vector space dimension: "+string(codim)); 119 dbprint(printlevel-voice+2,"//number of generators: "+string(size(V))); 121 dbprint(printlevel-voice+2, 122 "//number of subspace generators: "+string(size(V))); 120 123 int t=timer; 121 124 codim=codim-ncols(interred(module(V[1..size(V)]))); 122 dbprint(printlevel-voice+2,"//...codimension computed ["+string(timer-t)+ 123 " secs]"); 125 dbprint(printlevel-voice+2,"//codimension: "+string(codim)); 124 126 } 125 127 return(codim); … … 132 134 if(size(V)>0) 133 135 { 134 dbprint(printlevel-voice+2,"//computing quotient vector space...");135 136 dbprint(printlevel-voice+2,"//vector space dimension: "+string(nrows(Q))); 136 dbprint(printlevel-voice+2,"//number of generators: "+string(size(V))); 137 dbprint(printlevel-voice+2, 138 "//number of subspace generators: "+string(size(V))); 137 139 int t=timer; 138 140 Q=interred(reduce(std(Q),std(module(V[1..size(V)])))); 139 dbprint(printlevel-voice+2,"//...quotient vector space computed ["140 +string(timer-t)+" secs]");141 141 } 142 142 return(list(Q[1..size(Q)])); … … 145 145 146 146 proc invunit(poly u,int n) 147 "USAGE: invunit(u,n); u poly nomial, n integer147 "USAGE: invunit(u,n); u poly, n int 148 148 ASSUME: The polynomial u is a series unit. 149 149 RETURN: The procedure returns the series inverse of u up to order n … … 243 243 /////////////////////////////////////////////////////////////////////////////// 244 244 245 static proc getkappaxiu(poly f) 245 proc jacoblift(poly f) 246 "USAGE: jacoblift(f); f poly 247 ASSUME: The polynomial f in a series ring (local ordering) defines 248 an isolated hypersurface singularity. 249 RETURN: The procedure returns a list with entries kappa, xi, u of type 250 int, vector, poly such that kappa is minimal with f^kappa in jacob(f), 251 u is a unit, and u*f^kappa=(matrix(jacob(f))*xi)[1,1]. 252 DISPLAY: printlevel>=1; shows comments. 253 EXAMPLE: example jacoblift; shows an example. 254 " 246 255 { 247 256 dbprint(printlevel-voice+2,"//computing kappa..."); … … 270 279 dbprint(printlevel-voice+2,"//...u computed ["+string(timer-t)+" secs]"); 271 280 272 return(kappa,xi,u); 281 return(list(kappa,xi,u)); 282 } 283 example 284 { "EXAMPLE:"; echo=2; 285 ring R=0,(x,y),ds; 286 poly f=x2y2+x6+y6; 287 jacoblift(f); 273 288 } 274 289 /////////////////////////////////////////////////////////////////////////////// … … 340 355 341 356 deltaN=1; 357 dbprint(printlevel-voice+2,"//computing codimension of"); 358 dbprint(printlevel-voice+2,"//df^dOmega^(n-1)+f^K*Omega^(n+1) in " 359 +"Omega^(n+1) mod m^N*Omega^(n+1)..."); 360 int t=timer; 342 361 while(codimV(V1+V2,N)<K*mu) 343 362 { 363 dbprint(printlevel-voice+2,"//...codimension computed ["+string(timer-t) 364 +" secs]"); 365 344 366 deltaP1=getdeltaP1(f,K,N,deltaN); 345 367 V1=pcvladdl(V1,pcvp2cv(P1,N,N+deltaN))+pcvp2cv(deltaP1,0,N+deltaN); … … 354 376 N=N+deltaN; 355 377 dbprint(printlevel-voice+2,"//N="+string(N)); 356 } 378 379 dbprint(printlevel-voice+2,"//computing codimension of"); 380 dbprint(printlevel-voice+2,"//df^dOmega^(n-1)+f^K*Omega^(n+1) in " 381 +"Omega^(n+1) mod m^N*Omega^(n+1)..."); 382 t=timer; 383 } 384 dbprint(printlevel-voice+2,"//...codimension computed ["+string(timer-t) 385 +" secs]"); 357 386 358 387 return(K,N,P1,P2,Pe,V1,V2,Ve); … … 397 426 398 427 dbprint(printlevel-voice+2, 399 "//lifting nabla(e) to vector spacebasis of H''/t^KH''...");428 "//lifting nabla(e) to C-basis of H''/t^KH''..."); 400 429 list V=Ve+V1+V2; 401 430 module W=module(V[1..size(V)]); … … 407 436 +" secs]"); 408 437 409 dbprint(printlevel-voice+2,"//computing lift of nabla(e) to e...");438 dbprint(printlevel-voice+2,"//computing e-lift of nabla(e)..."); 410 439 t=timer; 411 440 int i1,i2,j,k; … … 421 450 } 422 451 } 423 dbprint(printlevel-voice+2,"//... lift of nabla(e) to ecomputed ["452 dbprint(printlevel-voice+2,"//...e-lift of nabla(e) computed [" 424 453 +string(timer-t)+" secs]"); 425 454 … … 542 571 pcvinit(); 543 572 544 dbprint(printlevel-voice+2,"//computing kappa, xi and u..."); 545 def kappa,xi,u=getkappaxiu(f); 573 dbprint(printlevel-voice+2,"//computing kappa, xi and u with "+ 574 "u*f^kappa=(matrix(jacob(f))*xi)[1,1]..."); 575 list jl=jacoblift(f); 576 def kappa,xi,u=jl[1..3]; 546 577 dbprint(printlevel-voice+2,"//...kappa, xi and u computed"); 547 578 dbprint(printlevel-voice+2,"//kappa="+string(kappa)); 548 579 if(kappa==1) 549 580 { 550 dbprint(printlevel-voice+2,"//singularity quasihomogeneous"); 581 dbprint(printlevel-voice+2, 582 "//f quasihomogenous with respect to suitable coordinates"); 551 583 } 552 584 else 553 585 { 554 dbprint(printlevel-voice+2,"//singularity not quasihomogeneous"); 586 dbprint(printlevel-voice+2, 587 "//f not quasihomogenous for any choice of coordinates"); 555 588 } 556 589 dbprint(printlevel-voice+2,"//xi="); … … 565 598 dbprint(printlevel-voice+2,"//...K and N increased"); 566 599 567 dbprint(printlevel-voice+2, 568 "//computing basis e of Brieskorn lattice H''..."); 600 dbprint(printlevel-voice+2,"//computing C{f}-basis e of Brieskorn lattice " 601 +"H''=Omega^(n+1)/df^dOmega^(n-1)..."); 602 int t=timer; 569 603 e=pcvcv2p(quotV(V1+V2,N),0,N); 570 dbprint(printlevel-voice+2,"//...e computed ");604 dbprint(printlevel-voice+2,"//...e computed ["+string(timer-t)+" secs]"); 571 605 572 606 dbprint(printlevel-voice+2,"//e="); … … 593 627 int i; 594 628 dbprint(printlevel-voice+2,"//comparing with previous lattice..."); 595 intt=timer;629 t=timer; 596 630 for(i=mu-1;i>=1&&size(reduce(U,std(prevU)))>0;i--) 597 631 { … … 627 661 { 628 662 dbprint(printlevel-voice+2, 629 "//computing basis of t*nabla-stable lattice...");663 "//computing C{f}-basis of t*nabla-stable lattice..."); 630 664 t=timer; 631 665 U=minbase(U); 632 666 dbprint(printlevel-voice+2, 633 "//... basis of t*nabla-stable lattice computed ["+string(timer-t)667 "//...C{f}-basis of t*nabla-stable lattice computed ["+string(timer-t) 634 668 +" secs]"); 635 669 } … … 740 774 { 741 775 dbprint(printlevel-voice+2,"//computing basis e of Milnor algebra..."); 776 int t=timer; 742 777 ideal e=kbase(std(jacob(f))); 743 dbprint(printlevel-voice+2,"//...e computed ");778 dbprint(printlevel-voice+2,"//...e computed ["+string(timer-t)+" secs]"); 744 779 745 780 dbprint(printlevel-voice+2, … … 762 797 763 798 proc monodromy(poly f, list #) 764 "USAGE: monodromy(f[,opt]); f poly nomial, opt integer799 "USAGE: monodromy(f[,opt]); f poly, opt int 765 800 ASSUME: The polynomial f in a series ring (local ordering) defines 766 801 an isolated hypersurface singularity. 767 RETURN: The procedure returns a residue matrix of the meromorphic Gauss-Manin 768 connection of the singularity defined by f or an empty matrix 769 if the assumptions are not fulfilled. 770 If opt=0 (default), the matrix exp(2*pi*i*monodromy(f)) is a 771 monodromy matrix of the singularity defined by f, else the 772 characteristic polynomial of the matrix exp(2*pi*i*monodromy(f)) 773 is the characteristic polynomial of the monodromy of the singularity 774 defined by f. 775 DISPLAY: printlevel>=1; shows comments. 776 EXAMPLE: example monodromy; shows an example. 802 RETURN: The procedure returns a residue matrix M of the meromorphic 803 Gauss-Manin connection of the singularity defined by f 804 or an empty matrix if the assumptions are not fulfilled. 805 If opt=0 (default), exp(2*pi*i*M) is a monodromy matrix of f, 806 else, only the characteristic polynomial of exp(2*pi*i*M) coincides 807 with the characteristic polynomial of the monodromy of f. 777 808 THEORY: The procedure uses an algorithm by Brieskorn (See E. Brieskorn, 778 Die Monodromie der isolierten Singularitaeten von Hyperflaechen,779 809 manuscipta math. 2 (1970), 103-161) to compute a connection matrix of 780 810 the meromorphic Gauss-Manin connection up to arbitrarily high order, 781 811 and an algorithm of Gerard and Levelt (See R. Gerard, A.H.M. Levelt, 782 Invariants mesurant l'irregularite en un point singulier des systeme 783 d'equations differentielles lineaires, Ann. Inst. Fourier, 784 Grenoble 23,1 (1973), pp. 157-195) to transform it to a simple pole. 785 For a detailed description of the algorithm see M. Schulze, 786 Computation of the Monodromy of an Isolated Hypersurface Singularity. 812 Ann. Inst. Fourier, Grenoble 23,1 (1973), pp. 157-195) to transform 813 it to a simple pole. 814 DISPLAY: printlevel>=1; shows comments. 815 EXAMPLE: example monodromy; shows an example. 787 816 " 788 817 { … … 802 831 } 803 832 833 dbprint(printlevel-voice+2,"//basering="+string(basering)); 834 804 835 int i; 805 836 for(i=nvars(basering);i>=1;i--) … … 811 842 } 812 843 813 dbprint(printlevel-voice+2,"//basering="+string(basering));814 815 844 if(i<0) 816 845 { 817 846 print("//no series ring (local ordering)"); 847 848 matrix M[1][0]; 849 return(M); 818 850 } 819 851 else … … 822 854 823 855 dbprint(printlevel-voice+2,"//computing milnor number mu of f..."); 856 int t=timer; 824 857 int mu=milnor(f); 825 dbprint(printlevel-voice+2,"//...mu computed ");858 dbprint(printlevel-voice+2,"//...mu computed ["+string(timer-t)+" secs]"); 826 859 827 860 dbprint(printlevel-voice+2,"//mu="+string(mu)); … … 851 884 if(w==0) 852 885 { 853 dbprint(printlevel-voice+2,"//polynomial not quasihomogeneous"); 886 dbprint(printlevel-voice+2, 887 "//f not quasihomogeneous with respect to given coordinates"); 854 888 return(nonqhmonodromy(f,mu,opt)); 855 889 } 856 890 else 857 891 { 858 dbprint(printlevel-voice+2,"//polynomial quasihomogeneous"); 892 dbprint(printlevel-voice+2, 893 "//f quasihomogeneous with respect to given coordinates"); 859 894 return(qhmonodromy(f,w)); 860 895 } … … 870 905 } 871 906 /////////////////////////////////////////////////////////////////////////////// 907 908 proc H''basis(poly f) 909 "USAGE: H''basis(f); f poly 910 ASSUME: The polynomial f in a series ring (local ordering) defines 911 an isolated hypersurface singularity. 912 RETURN: The procedure returns a list of representatives of a C{f}-basis of the 913 Brieskorn lattice H''=Omega^(n+1)/df^dOmega^(n-1). 914 THEORY: H'' is a free C{f}-module of rank milnor(f). 915 DISPLAY: printlevel>=1; shows comments. 916 EXAMPLE: example H''basis; shows an example. 917 " 918 { 919 pcvinit(); 920 921 dbprint(printlevel-voice+2,"//basering="+string(basering)); 922 923 int i; 924 for(i=nvars(basering);i>=1;i--) 925 { 926 if(1<var(i)) 927 { 928 i=-1; 929 } 930 } 931 932 if(i<0) 933 { 934 print("//no series ring (local ordering)"); 935 936 return(list()); 937 } 938 else 939 { 940 dbprint(printlevel-voice+2,"//f="+string(f)); 941 942 dbprint(printlevel-voice+2,"//computing milnor number mu of f..."); 943 int t=timer; 944 int mu=milnor(f); 945 dbprint(printlevel-voice+2,"//...mu computed ["+string(timer-t)+" secs]"); 946 947 dbprint(printlevel-voice+2,"//mu="+string(mu)); 948 949 if(mu<=0) 950 { 951 if(mu==0) 952 { 953 print("//no singularity"); 954 } 955 else 956 { 957 print("//non isolated singularity"); 958 } 959 960 return(list()); 961 } 962 else 963 { 964 dbprint(printlevel-voice+2,"//computing kappa, xi and u with "+ 965 "u*f^kappa=(matrix(jacob(f))*xi)[1,1]..."); 966 list jl=jacoblift(f); 967 def kappa,xi,u=jl[1..3]; 968 dbprint(printlevel-voice+2,"//...kappa, xi and u computed"); 969 dbprint(printlevel-voice+2,"//kappa="+string(kappa)); 970 if(kappa==1) 971 { 972 dbprint(printlevel-voice+2, 973 "//f quasihomogenous with respect to suitable coordinates"); 974 } 975 else 976 { 977 dbprint(printlevel-voice+2, 978 "//f not quasihomogenous for any choice of coordinates"); 979 } 980 dbprint(printlevel-voice+2,"//xi="); 981 dbprint(printlevel-voice+2,xi); 982 dbprint(printlevel-voice+2,"//u="+string(u)); 983 984 int K,N,prevN; 985 list e,P1,P2,Pe,V1,V2,Ve,Vnablae; 986 987 dbprint(printlevel-voice+2,"//increasing K and N..."); 988 K,N,P1,P2,Pe,V1,V2,Ve=incK(f,mu,K,1,N,e,P1,P2,Pe,V1,V2,Ve); 989 dbprint(printlevel-voice+2,"//...K and N increased"); 990 991 dbprint(printlevel-voice+2, 992 "//computing C{f}-basis e of Brieskorn lattice " 993 +"H''=Omega^(n+1)/df^dOmega^(n-1)..."); 994 t=timer; 995 e=pcvcv2p(quotV(V1+V2,N),0,N); 996 dbprint(printlevel-voice+2,"//...e computed ["+string(timer-t)+" secs]"); 997 998 dbprint(printlevel-voice+2,"//e="); 999 dbprint(printlevel-voice+2,e); 1000 1001 return(e); 1002 } 1003 } 1004 } 1005 example 1006 { "EXAMPLE:"; echo=2; 1007 ring R=0,(x,y),ds; 1008 poly f=x2y2+x6+y6; 1009 H''basis(f); 1010 } 1011 ///////////////////////////////////////////////////////////////////////////////
Note: See TracChangeset
for help on using the changeset viewer.