> # THE SCHRODINGER KERNEL, ALIAS THE THETA FUNCTION
> # 17 April 2000
>
>
>
# NOTATION: t is in the fourth quadrant of the complex plane. # Imaginary t => heat kernel (at I*t); real t => Schrodinger kernel.
# A small imaginary part in t also serves as a necessary cutoff in the Schrodinger calculation. # H = Laplacian on the circle of circumference 2*Pi.
# x = coordinate on the circle; other coordinate fixed at y = 0.
# eigen(t,x,k) = kth term of the eigenfunction expansion.
# image(t,x,n) = nth term of the image expansion.
# kernel(t,x,f,N) = Nth partial sum of the bidirectional sequence f.
> eigen := (t,x,k) -> evalf( (1/(2*Pi))*exp(I*k*x)*exp(-I*k^2*t) );
> image := (t,x,n) -> evalf( (1/sqrt(4*Pi*I*t))*exp(I*(x-2*Pi*n)^2/(4*t)) );
>
kernel := (t,x,f,N) -> f(t,x,0) + sum( f(t,x,k)+f(t,x,-k), k=1..(N-1));
>
> # Fix the time and vary x.
> # Keep increasing N until the two curves agree closely.
> plot({ Re(kernel(1-0.1*I,x,eigen,10)), Re(kernel(1-0.1*I,x,image,10)) }, x=0..Pi);
> # Try a smaller time.
> plot({ Re(kernel(0.1-0.1*I,x,eigen,10)), Re(kernel(0.1-0.1*I,x,image,10)) }, x=0..Pi);
> # Try a smaller imaginary cutoff.
>
> plot({ Re(kernel(1-0.01*I,x,eigen,20)), Re(kernel(1-0.01*I,x,image,10)) }, x=0..Pi);
>
plot({ Re(kernel(0.1-0.01*I,x,eigen,20)), Re(kernel(0.1-0.01*I,x,image,10)) }, x=0..Pi);
> plot({ Re(kernel(1-.001*I,x,eigen,40)), Re(kernel(1-.001*I,x,image,10)) }, x=0..Pi);
> plot({ Re(kernel(0.1-.001*I,x,eigen,40)), Re(kernel(0.1-.001*I,x,image,10)) }, x=0..Pi);
> # Take a closeup.
> plot({ Re(kernel(1-.001*I,x,eigen,40)), Re(kernel(1-.001*I,x,image,10)) }, x=1..1.2);
> plot({ Re(kernel(0.1-.001*I,x,eigen,40)), Re(kernel(0.1-.001*I,x,image,10)) }, x=1..1.2);
> # Get even closer to the real axis.
> plot({ Re(kernel(1-.0001*I,x,eigen,200)), Re(kernel(1-.0001*I,x,image,50)) }, x=1..1.2);
> plot({ Re(kernel(0.1-.0001*I,x,eigen,200)), Re(kernel(0.1-.0001*I,x,image,20)) }, x=1..1.2);
> plot({ Re(kernel(1-.00001*I,x,eigen,300)), Re(kernel(1-.00001*I,x,image,100)) }, x=1..1.2);
> plot({ Re(kernel(0.1-.00001*I,x,eigen,400)), Re(kernel(0.1-.00001*I,x,image,40)) }, x=1..1.2);
>
> # Now fix x (as 0) and vary t.
>
> plot({ Re(kernel(t-0.1*I,0,eigen,10)), Re(kernel(t-0.1*I,0,image,10)) }, t=1..10);
> # Try a smaller cutoff.
>
> plot({ Re(kernel(t-0.01*I,0,eigen,10)), Re(kernel(t-0.01*I,0,image,10)) }, t=1..10);
> # Take a close-up.
>
> plot({ Re(kernel(t-0.01*I,0,eigen,50)), Re(kernel(t-0.01*I,0,image,10)) }, t=1..2);
> plot({ Re(kernel(t-0.001*I,0,eigen,50)), Re(kernel(t-0.001*I,0,image,10)) }, t=1..2);
>
# Look even closer up.
> plot({ Re(kernel(t-0.001*I,0,eigen,50)), Re(kernel(t-0.001*I,0,image,50)) }, t=1.5..1.6);
> plot({ Re(kernel(t-0.0001*I,0,eigen,100)), Re(kernel(t-0.0001*I,0,image,50)) }, t=1.5..1.6);
>
>
>
>
>
>