Changeset 95fdbe in git for Singular/LIB/hnoether.lib
- Timestamp:
- Oct 4, 2001, 1:04:17 AM (22 years ago)
- Branches:
- (u'spielwiese', 'e7cc1ebecb61be8b9ca6c18016352af89940b21a')
- Children:
- e58c4abd91b68d128331a23f3f9dd76dff924048
- Parents:
- c0cb9d61220926aa7e37baa3087f166a15a23ce5
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/hnoether.lib
rc0cb9d r95fdbe 1 // last change, ML: 31.08.00 1 // last change, ML: 31.08.00, GMG: 03.10.01 2 2 /////////////////////////////////////////////////////////////////////////////// 3 3 // This library is for Singular 1-3-7 or newer 4 4 5 version="$Id: hnoether.lib,v 1.3 0 2001-08-27 14:47:51 SingularExp $";5 version="$Id: hnoether.lib,v 1.31 2001-10-03 23:04:17 greuel Exp $"; 6 6 category="Singularities"; 7 7 info=" … … 39 39 allsquarefree(f,l); the maximal squarefree divisor of the poly f 40 40 further_hn_proc(); show further procedures useful for interactive use 41 [int HNDebugOn =1; shows intermediate computations] 41 42 42 43 KEYWORDS: Hamburger-Noether expansion; Puiseux expansion; curve singularities … … 212 213 +string(M-sigma*Q)+"*y^"+string(sigma); 213 214 "delta =",d,"Q =",Q,"tau,sigma =",tau,sigma; 215 pause(); 214 216 } 215 217 //------------------- Durchfuehrung der Transformation T2 -------------------- … … 563 565 if (ringwechsel) { poly f=m(f); } 564 566 if (defined(HNDebugOn)) 565 {"received polynomial: ",f,", where x =",namex,", y =",namey; }567 {"received polynomial: ",f,", where x =",namex,", y =",namey; pause();} 566 568 567 569 int M,N,Q,R,l,e,hilf,eps,getauscht,Abbruch,zeile,exponent,Ausgabe; … … 678 680 nm = getnm(f); // N,M haben sich evtl. veraendert 679 681 N = nm[1]; M = nm[2]; // Berechne Schnittpunkte Newtonpoly mit Achsen 680 if (defined(HNDebugOn)) {"I continue with the polynomial",f; }682 if (defined(HNDebugOn)) {"I continue with the polynomial",f; pause();} 681 683 } 682 684 else { … … 703 705 nm = getnm(f); // N,M haben sich veraendert 704 706 N = nm[1]; M = nm[2]; // Berechne Schnittpunkte Newtonpoly mit Achsen 705 if (defined(HNDebugOn)) {"I continue with the polynomial",f; }707 if (defined(HNDebugOn)) {"I continue with the polynomial",f; pause();} 706 708 } 707 709 … … 722 724 else {"x , y were not exchanged";} 723 725 "M resp. N are now",M,N; 726 pause(); 724 727 } 725 728 } // end(if Abbruch==0) … … 749 752 delta = koeff(f,M/ e,N - N/ e) / (-1*e*c); 750 753 if (defined(HNDebugOn)) {"quasihomogeneous leading form:", 751 leit(f,N,M)," = ",c,"* (y -",delta,"* x^"+string(M/ e)+")^",e," ?";} 754 leit(f,N,M)," = ",c,"* (y -",delta,"* x^"+string(M/ e)+")^",e," ?"; 755 pause();} 752 756 if (leit(f,N,M) != c*(y^(N/ e) - delta*x^(M/ e))^e) { 753 757 dbprint(printlevel+1," The given polynomial is reducible !"); … … 758 762 delta = koeff(f,M/ e,N - N/ e) / (-1*e*c); 759 763 if (defined(HNDebugOn)) {"quasihomogeneous leading form:", 760 leit(f,N,M)," = ",c,"* (y -",delta,"* x^"+string(M/ e)+")^",e," ?";} 764 leit(f,N,M)," = ",c,"* (y -",delta,"* x^"+string(M/ e)+")^",e," ?"; 765 pause();} 761 766 if (leit(f,N,M) != c*(y^(N/ e) - delta*x^(M/ e))^e) { 762 767 dbprint(printlevel+1," The given polynomial is reducible !"); … … 767 772 eps = e; 768 773 for (l = 0; eps%p == 0; l=l+1) { eps=eps/ p;} 769 if (defined(HNDebugOn)) {e," -> ",eps,"*",p,"^",l; }774 if (defined(HNDebugOn)) {e," -> ",eps,"*",p,"^",l;pause();} 770 775 delta = koeff(f,(M/ e)*p^l,(N/ e)*p^l*(eps-1)) / (-1*eps*c); 771 776 … … 789 794 if (defined(HNDebugOn)) {"quasihomogeneous leading form:", 790 795 leit(f,N,M)," = ",c,"* (y^"+string(N/ e),"-",delta,"* x^" 791 +string(M/ e)+")^",e," ?"; }796 +string(M/ e)+")^",e," ?";pause();} 792 797 if (leit(f,N,M) != c*(y^(N/ e) - delta*x^(M/ e))^e) { 793 798 dbprint(printlevel+1," The given polynomial is reducible !"); … … 800 805 { "a("+string(zeile)+","+string(Q)+") =",delta; } 801 806 a(zeile)[Q]=delta; 802 if (defined(HNDebugOn)) {"transformed polynomial: ",f; }}807 if (defined(HNDebugOn)) {"transformed polynomial: ",f;pause();}} 803 808 804 809 nm=getnm(f); N=nm[1]; M=nm[2]; // Neuberechnung des Newtonpolygons … … 812 817 // Anpassung der Sp.zahl der HNE-Matrix 813 818 f = T_Transform(f,Q,N); 814 if (defined(HNDebugOn)) {"transformed polynomial: ",f; }819 if (defined(HNDebugOn)) {"transformed polynomial: ",f;pause();} 815 820 zeile=zeile+1; 816 821 //------------ Bereitstellung von Speicherplatz fuer eine neue Zeile: -------- … … 830 835 } 831 836 else {if (M<N) {"Something has gone wrong: M<N";}} 832 if(defined(HNDebugOn)) {"new M,N:",M,N; }837 if(defined(HNDebugOn)) {"new M,N:",M,N;pause();} 833 838 834 839 //----------------- Abbruchbedingungen fuer die Schleife: -------------------- … … 2109 2114 if (Q<Exaktheit) { 2110 2115 f=T1_Transform(f,delta,Q); 2111 if (defined(HNDebugOn)) { "transformed polynomial:",f; }2116 if (defined(HNDebugOn)) { "transformed polynomial:",f; pause();} 2112 2117 if (subst(f,y,0)==0) { 2113 2118 if ((voice==2) && (printlevel > -1)) { "The HNE is finite!"; } … … 2230 2235 maxspalte=0; 2231 2236 HNEaktu=HNEs[hnezaehler]; 2232 if (defined(HNDebugOn)) {"To process:";HNEaktu; }2237 if (defined(HNDebugOn)) {"To process:";HNEaktu;pause();} 2233 2238 if (size(HNEaktu)!=size(HNEaktu[1])+2) { 2234 2239 "The ideals and the hqs in HNEs[",hnezaehler,"] don't match!!"; … … 2276 2281 eps = e; 2277 2282 for (l = 0; eps%p == 0; l=l+1) { eps=eps/ p;} 2278 if (defined(HNDebugOn)) {e," -> ",eps,"*",p,"^",l; }2283 if (defined(HNDebugOn)) {e," -> ",eps,"*",p,"^",l;pause();} 2279 2284 delta = koeff(f,(M/ e)*p^l,(N/ e)*p^l*(eps-1)) / (-1*eps*c); 2280 2285 … … 2285 2290 "trivial factorization not implemented for", 2286 2291 "parameters---I've to use 'factorize'"; 2287 }2292 pause();} 2288 2293 } 2289 2294 } 2290 2295 } 2291 2296 if (defined(HNDebugOn)) {"quasihomogeneous leading form:",f," = ",c, 2292 "* (y^"+string(N/ e),"-",delta,"* x^"+string(M/ e)+")^",e," ?";} 2297 "* (y^"+string(N/ e),"-",delta,"* x^"+string(M/ e)+")^",e," ?"; 2298 pause();} 2293 2299 if (f != c*(var(2)^(N/ e) - delta*var(1)^(M/ e))^e) {return(0);} 2294 2300 else {return(delta);} … … 2567 2573 2568 2574 if (defined(HNDebugOn)) 2569 {"received polynomial: ",f,", with x =",namex,", y =",namey; }2575 {"received polynomial: ",f,", with x =",namex,", y =",namey;pause();} 2570 2576 2571 2577 //----------------------- Variablendefinitionen ------------------------------ … … 2646 2652 }} 2647 2653 kill zweitring; 2648 if (defined(HNDebugOn)) {"I continue with the polynomial",f; }2654 if (defined(HNDebugOn)) {"I continue with the polynomial",f;pause(); } 2649 2655 } 2650 2656 else { … … 2705 2711 if (str=="f") { f=allsquarefree(f,test_sqr); } 2706 2712 } 2707 if (defined(HNDebugOn)) {"I continue with the polynomial",f; }2713 if (defined(HNDebugOn)) {"I continue with the polynomial",f;pause(); } 2708 2714 2709 2715 } … … 2759 2765 // ------- Berechne HNE von allen Zweigen, fuer die x transversal ist: ------- 2760 2766 if (defined(HNDebugOn)) 2761 {"1st step: Treat Newton polygon until height",grenze1; }2767 {"1st step: Treat Newton polygon until height",grenze1;pause();} 2762 2768 if (grenze1>0) { 2763 2769 hilflist=HN(f,grenze1,1,essential); … … 2766 2772 Ergebnis=extractHNEs(hilflist[1],0); 2767 2773 if (hilflist[2]!=-1) { 2768 if (defined(HNDebugOn)) {" ring change in HN(",1,") detected"; }2774 if (defined(HNDebugOn)) {" ring change in HN(",1,") detected";pause();} 2769 2775 poly transfproc=hilflist[2]; 2770 2776 map hole=HNE_noparam,transfproc,x,y; … … 2780 2786 // --------------- Berechne HNE von allen verbliebenen Zweigen: -------------- 2781 2787 if (defined(HNDebugOn)) 2782 {"2nd step: Treat Newton polygon until height",grenze2; }2788 {"2nd step: Treat Newton polygon until height",grenze2;pause();} 2783 2789 if (grenze2>0) { 2784 2790 map xytausch=basering,y,x; … … 2791 2797 if (not defined(Ergebnis)) { 2792 2798 //-- HN wurde schon mal ausgefuehrt; Ringwechsel beim zweiten Aufruf von HN -- 2793 if (defined(HNDebugOn)) {" ring change in HN(",1,") detected"; }2799 if (defined(HNDebugOn)) {" ring change in HN(",1,") detected";pause();} 2794 2800 poly transfproc=hilflist[2]; 2795 2801 map hole=HNE_noparam,transfproc,x,y; … … 2897 2903 { 2898 2904 //---------- Variablendefinitionen fuer den unverzweigten Teil: -------------- 2899 if (defined(HNDebugOn)) {"procedure HN",Aufruf_Ebene; }2905 if (defined(HNDebugOn)) {"procedure HN",Aufruf_Ebene;pause();} 2900 2906 int Abbruch,ende,i,j,e,M,N,Q,R,zeiger,zeile,zeilevorher; 2901 2907 intvec hqs; … … 2923 2929 {"Didn't find an edge in the Newton polygon!";} 2924 2930 if (zeiger==size(Newton)-1) { 2925 if (defined(HNDebugOn)) {"only one relevant side in Newton polygon";} 2931 if (defined(HNDebugOn)) {"only one relevant side in Newton polygon"; 2932 pause();} 2926 2933 M=Newton[zeiger+1][1]-Newton[zeiger][1]; 2927 2934 N=Newton[zeiger][2]-Newton[zeiger+1][2]; … … 2936 2943 /x^Newton[zeiger][1],M,N); 2937 2944 if (delta==0) { 2938 if (defined(HNDebugOn)) {" The given polynomial is reducible !"; }2945 if (defined(HNDebugOn)) {" The given polynomial is reducible !";pause();} 2939 2946 Abbruch=1; 2940 2947 } … … 2946 2953 if (N>1) { f = T1_Transform(f,delta,M/ e); } 2947 2954 else { ende=1; } 2948 if (defined(HNDebugOn)) {"a("+string(zeile)+","+string(Q)+") =",delta;} 2955 if (defined(HNDebugOn)) {"a("+string(zeile)+","+string(Q)+") =",delta; 2956 pause(); } 2949 2957 azeilen[zeile+1][Q]=delta; 2950 2958 } … … 2955 2963 //------- vollziehe Euklid.Alg. nach, um die HN-Matrix zu berechnen: --------- 2956 2964 while (R!=0) { 2957 if (defined(HNDebugOn)) { "h("+string(zeile)+") =",Q; }2965 if (defined(HNDebugOn)) { "h("+string(zeile)+") =",Q;pause(); } 2958 2966 hqs[zeile+1]=Q; // denn zeile beginnt mit dem Wert 0 2959 2967 //------------------ markiere das Zeilenende der HNE: ------------------------ … … 2964 2972 M=N; N=R; R=M%N; Q=M / N; 2965 2973 } 2966 if (defined(HNDebugOn)) {"a("+string(zeile)+","+string(Q)+") =",delta;} 2974 if (defined(HNDebugOn)) {"a("+string(zeile)+","+string(Q)+") =",delta; 2975 pause();} 2967 2976 azeilen[zeile+1][Q]=delta; 2968 2977 } 2969 if (defined(HNDebugOn)) {"transformed polynomial: ",f; }2978 if (defined(HNDebugOn)) {"transformed polynomial: ",f;pause();} 2970 2979 grenze=e; 2971 2980 //----------------------- teste Abbruchbedingungen: -------------------------- … … 3020 3029 "Branching part reached---Newton polygon :",Newton; 3021 3030 "relevant part until height",grenze,", from",Newton[zeiger],"on"; 3022 }3031 pause();} 3023 3032 azeilen=list(hqs)+azeilen; // hat jetzt Struktur von HNEs: hqs in der 1.Zeile 3024 3033 3025 3034 //======= Schleife fuer jede zu betrachtende Seite des Newtonpolygons: ======= 3026 3035 for(i=zeiger; i<size(Newton); i++) { 3027 if (defined(HNDebugOn)) { "we consider side",Newton[i],Newton[i+1]; 3036 if (defined(HNDebugOn)) { "we consider side",Newton[i],Newton[i+1];pause();} 3028 3037 M=Newton[i+1][1]-Newton[i][1]; 3029 3038 N=Newton[i][2]-Newton[i+1][2]; … … 3068 3077 teiler=faktoren[1][j]; 3069 3078 if (teiler/y != 0) { // sonst war's eine Einheit --> wegwerfen! 3070 if (defined(HNDebugOn)) {"factor of leading form found:",teiler;} 3079 if (defined(HNDebugOn)) {"factor of leading form found:",teiler; 3080 pause();} 3071 3081 if (teiler/y2 == 0) { // --> Faktor hat die Form cy+d 3072 3082 deltais[zaehler]=-subst(teiler,y,0)/koeff(teiler,0,1); //=-d/c … … 3077 3087 dbprint(printlevel+1, 3078 3088 " Change of basering (field extension) necessary!"); 3079 if (defined(HNDebugOn)) { teiler,"is not properly factored!"; } 3089 if (defined(HNDebugOn)) { teiler,"is not properly factored!"; 3090 pause(); } 3080 3091 if (needext==0) { poly zerlege=teiler; } 3081 3092 needext=1; … … 3086 3097 else { deltais=ideal(delta); eis=e;} 3087 3098 if (defined(HNDebugOn)) {"roots of char. poly:";deltais; 3088 "with multiplicities:",eis; }3099 "with multiplicities:",eis;pause();} 3089 3100 if (needext==1) { 3090 3101 //--------------------- fuehre den Ringwechsel aus: -------------------------- … … 3183 3194 "a("+string(zeile)+","+string(Q)+") =",deltais[j]; 3184 3195 "transformed polynomial: ",transformiert; 3185 }3196 pause();} 3186 3197 if (subst(transformiert,y,0)==0) { 3187 3198 dbprint(printlevel+1,"finite HNE found"); … … 3208 3219 erg=T2_Transform(f,number(deltais[j]),M,N,referencepoly(Newton)); 3209 3220 transformiert=erg[1];delta=erg[2]; 3210 if (defined(HNDebugOn)) {"transformed polynomial: ",transformiert;} 3221 if (defined(HNDebugOn)) {"transformed polynomial: ",transformiert; 3222 pause();} 3211 3223 if (subst(transformiert,y,0)==0) { 3212 3224 dbprint(printlevel+1,"finite HNE found"); … … 3225 3237 M1=M;N1=N;R1=R;Q1=M1/ N1; 3226 3238 while (R1!=0) { 3227 if (defined(HNDebugOn)) { "h("+string(zeile+zl-2)+") =",Q1; }3239 if (defined(HNDebugOn)) { "h("+string(zeile+zl-2)+") =",Q1;pause(); } 3228 3240 HNEakut[1][zeile+zl-1]=Q1; 3229 3241 HNEakut[zeile+zl][Q1+1]=x; … … 3237 3249 if (defined(HNDebugOn)) { 3238 3250 "a("+string(zeile+zl-2)+","+string(Q1)+") =",delta; 3239 }3251 pause();} 3240 3252 HNEakut[zeile+zl][Q1] =delta; 3241 3253 HNEakut[zeile+zl][Q1+1]=x; … … 3265 3277 else { 3266 3278 if (defined(HNDebugOn)) 3267 {" ring change in HN(",Aufruf_Ebene+1,") detected"; }3279 {" ring change in HN(",Aufruf_Ebene+1,") detected";pause();} 3268 3280 list aneu=HNerg[1]; 3269 3281 poly transfproc=HNerg[2]; … … 3313 3325 M1=M;N1=N;R1=R;Q1=M1/ N1; 3314 3326 while (R1!=0) { 3315 if (defined(HNDebugOn)) { "h("+string(zeile+zl-2)+") =",Q1; }3327 if (defined(HNDebugOn)) { "h("+string(zeile+zl-2)+") =",Q1;pause(); } 3316 3328 HNEakut[1][zeile+zl-1]=Q1; 3317 3329 HNEakut[zeile+zl][Q1+1]=x; // Markierung des Zeilenendes der HNE … … 3323 3335 if (defined(HNDebugOn)) { 3324 3336 "a("+string(zeile+zl-2)+","+string(Q1)+") =",delta; 3325 }3337 pause();} 3326 3338 HNEakut[zeile+zl][Q1]=delta; 3327 3339
Note: See TracChangeset
for help on using the changeset viewer.