/* * Utility & Plot for Riemann's Zeta * * Authors: Rosario Turco (IT) * Version: 2.5 (C) 2010 * * Product: Tested with PARI/GP version 2.4.2 * * Blog: http://MATHBuildingBlock.blogspot.com * * Site: www.gruppoeratostene.com * Papers: Database CNR Solar * * * * SOFTWARE WITHOUT ANY WARRANTY WHATSOEVER. * * Attention: for Gram points you must also load lambert.txt * */ debug=0; /* Complex Utility */ ModComplex(z)=local();{ return(sqrt((real(z))^2 + (imag(z))^2)); } TetaComplex(z)=local();{ return(atan(imag(z)/real(z))); } /* r*exp(I*teta) */ ModTetaComplex(z)=local();{ r = ModComplex(z); teta = TetaComplex(z); print("z= ",z, "-> ", r, "*exp(j", teta,")"); } /* Cerca gli zeri della zeta di Riemann sulla retta critica sigma=1/2. */ GetCriticalZero(n,pz=14)=local(k=0,i=1);{ pz2=pz+1; b = n+1; v=vector(n); while(i 1, for(i=2,c, trap( , return(s), a = zeta(s)/TheFirstDerivzeta(s,delta); s = s - a; ); ); ); return(s); } /* ** Newton-Raphson Method for derivative of zeta ** s=si+I*t ** * */ SecantMTSzeta(s0,delta=1.0E-20, c=200) = local(i=0); { s = s0; if( c > 1, for(i=2,c, trap( , return(s), a = TheFirstDerivzeta(s,delta)/TheSecondDerivzeta(s,delta); s = s - a; ); ); ); return(s); } /* ** It returns a vector of n Gram points */ GetGramPoints(n)=local(i=0);{ g=vector(n); for(i=1,n, g[i]=GramPoint(i-1); ); return(g); } /* ** It returns the gn Gram point ** */ GramPoint(n)=local(gn=0);{ gn=2*Pi*exp(1+lambertw((8*n+1)/(8*exp(1)))); return(gn); } /* ** ** Plotting Area ** */ /* Imag of zeta */ PlotImZeta(b1=0.0,b2=55.0)=local();{ ploth(X=b1,b2,imag(zeta(1/2+X*I)),"Recursive"); } /* Modulus of zeta */ PlotModZeta(b1=0.0,b2=55.0)=local();{ ploth(X=b1,b2,sqrt(real(zeta(1/2+X*I))^2 + imag(zeta(1/2+X*I))^2),"Recursive"); } PlotModSquareZeta(b1=0.0,b2=55.0)=local();{ ploth(X=b1,b2,real(zeta(1/2+X*I))^2 + imag(zeta(1/2+X*I))^2,"Recursive"); } /* Real and Imag of zeta */ PlotZeta(b1=0.0,b2=55.0)=local();{ ploth(X=b1,b2,[real(zeta(1/2+X*I)),imag(zeta(1/2+X*I))]); } /* Plot Real Zeta * * example: * PlotRealZeta(-5,5) or * PlotRealZeta(-18.5,10) or * PlotRealZeta(-15.5,0) */ PlotRealZeta(b1,b2)=local();{ ploth(t=b1,b2,zeta(t), ,100); } PlotHardyZeta(b1,b2)=local(t=0);{ ploth(t=b1,b2,real(RiemannSiegelZ(t))); }