> # 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) );

[Maple Math]

> image := (t,x,n) -> evalf( (1/sqrt(4*Pi*I*t))*exp(I*(x-2*Pi*n)^2/(4*t)) );

[Maple Math]

> kernel := (t,x,f,N) -> f(t,x,0) + sum( f(t,x,k)+f(t,x,-k), k=1..(N-1));

[Maple Math]

>

> # 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);

>

>

>

>

>

>