f:=x->(3/x^3*(sin(x)-x*cos(x)))^2;Luc Tartar's functionfseries:=convert(series((1-f(x))/x,x=0,400),polynom):For numerical stability, we convert f into a power series for evaluation near the origin.fsmall:=y->subs(x=y,fseries):LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2OVEhRicvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GJy8lJXNpemVHUSMxMkYnLyUlYm9sZEdRJmZhbHNlRicvJSdpdGFsaWNHUSV0cnVlRicvJSp1bmRlcmxpbmVHRjcvJSpzdWJzY3JpcHRHRjcvJSxzdXBlcnNjcmlwdEdGNy8lK2ZvcmVncm91bmRHUShbMCwwLDBdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGOi8lKXJlYWRvbmx5R0Y3LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSkyRH5JbnB1dEYnLyUqbWF0aGNvbG9yR0ZDLyUvbWF0aGJhY2tncm91bmRHRkYvJStmb250ZmFtaWx5R0YxLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy8lKW1hdGhzaXplR0Y0shseries:=convert(series(x/sinh(x),x=0,100),polynom):shsmall:=y->subs(x=y,shseries):Since sinh(x)=0 at 0, we convert 1/sinhx into a power series near the origin (again for numerical stability).LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2OVEhRicvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GJy8lJXNpemVHUSMxMkYnLyUlYm9sZEdRJmZhbHNlRicvJSdpdGFsaWNHUSV0cnVlRicvJSp1bmRlcmxpbmVHRjcvJSpzdWJzY3JpcHRHRjcvJSxzdXBlcnNjcmlwdEdGNy8lK2ZvcmVncm91bmRHUShbMCwwLDBdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGOi8lKXJlYWRvbmx5R0Y3LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSkyRH5JbnB1dEYnLyUqbWF0aGNvbG9yR0ZDLyUvbWF0aGJhY2tncm91bmRHRkYvJStmb250ZmFtaWx5R0YxLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy8lKW1hdGhzaXplR0Y0chseries:=convert(series(x/(2*cosh(x/2)^2),x=0,100),polynom):chsmall:=y->subs(x=y,chseries):L1a:=(y,r,n)->evalf(Int(fsmall(x*sqrt(y))*sqrt(y)*(shsmall(x)+r/n*chsmall(x)),x=0..min(1,1/sqrt(y))));
L1a does the integral near the origin using series.L1b:=(y,r,n)->evalf(Int((1-f(x*sqrt(y)))*(1/sinh(x)+r/(n*2*cosh(x/2)^2)),x=min(1,1/sqrt(y))..infinity));
L1b computes the integral away from the origin using the actual functions. Note that we don't want to use the series far from the origin, where they don't converge.L1:=(y,r,n)->L1a(y,r,n)+L1b(y,r,n);
Here we combine the two parts of the integral.GlobalBound:=(y,r,n)->evalf(r/n+gamma+log(4*Pi)-12*Pi/(5*n*sqrt(y))-L1(y,r,n));
We combine all the different parts of the formula into a single function which computes the global bound (given a value of y).LocalCorrection:=(y,p,inertia)->evalf(sum(inertia*log(p)/(1+p^(m*inertia))*f(m*inertia*log(p)*sqrt(y)),m=1..4*Digits));
This computes the local correction due to a prime with norm p^inertia.TotalBound:=(y,r,n,p,inertia,num)->GlobalBound(y,r,n)+num*4/n*LocalCorrection(y,p,inertia);
Given a value of y, this computes a bound for the discriminant with a local correction. The variable num is the number of primes of norm p^inertia that we have.The procedure "Finder" finds an approximate local maximum for "TotalBound". It is somewhat crede, but works.Finder:=proc(r,n,p,inertia,num)
Digits:=7:a:=1/4:step:=1/8:
deg:=n:
s:=TotalBound(a,r,deg,p,inertia,num):
for k from 1 to 100 do
t:=TotalBound(a+step,r,deg,p,inertia,num):
u:=TotalBound(a+2*step,r,deg,p,inertia,num):
if evalf(log(1/abs(s-t))/log(10))>Digits-4 then Digits:=min(14,Digits+3);end if;
if s>t or s=t then a:=a-step:step:=step/2:Digits:=min(14,Digits+3):s:=TotalBound(a,r,deg,p,inertia,num):
elif t<u then a:=a+step:s:=t:
elif t=u then Digits:=min(14,Digits+3):
else step:=step/2;end if:end do:(exp(deg*s),evalf(a))
end proc;The following code creates TeX code for tables of discriminant bounds. I then run these through an emacs macro to truncate extra digits. Truncating the digits in Maple would round up, rather than just truncating, which could give bounds that are too large.for Kdeg from 14 to 14 by 2 do
printf("degree=%g lower half\n",Kdeg);
for pr in {2,3,5,7} do
for nu from 1 to 3 do
printf("$\\{ ");for qq from 1 to nu do printf("%g",pr);if qq<nu then printf(",");end if;end do;printf("\\}$");
for k from 0 to 6 by 2 do
printf("&$%1.10e}$",Finder(k,Kdeg,pr,1,nu));
end do:
printf("\\cr\n");
end do:
end do:
print("Done with Degree ",Kdeg);
end do:LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2OVEhRicvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GJy8lJXNpemVHUSMxMkYnLyUlYm9sZEdRJmZhbHNlRicvJSdpdGFsaWNHUSV0cnVlRicvJSp1bmRlcmxpbmVHRjcvJSpzdWJzY3JpcHRHRjcvJSxzdXBlcnNjcmlwdEdGNy8lK2ZvcmVncm91bmRHUShbMCwwLDBdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGOi8lKXJlYWRvbmx5R0Y3LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSkyRH5JbnB1dEYnLyUqbWF0aGNvbG9yR0ZDLyUvbWF0aGJhY2tncm91bmRHRkYvJStmb250ZmFtaWx5R0YxLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy8lKW1hdGhzaXplR0Y0