CurrentModule = Antique
The Pöschl-Teller potential is one of the few potentials for which the quantum mechanical Schrödinger equation has an analytical solution. It has a finite number of bound states, which can be inferred easily from its potential strength parameter λ. It is defined for one-dimensional systems.
This model is described with the time-independent Schrödinger equation
and the Hamiltonian
After introducing the dimensionless variables
the Schrödinger equation reduces to
with
Parameters are specified within the following struct.
Antique.PoschlTeller
Antique.V(::PoschlTeller, ::Any)
Antique.nₘₐₓ(::PoschlTeller)
Antique.E(::PoschlTeller)
Antique.ψ(::PoschlTeller, ::Any)
Antique.P(::PoschlTeller, ::Any)
[Install Antique.jl](@ref Install) for the first use and run using Antique
before each use. The energy E()
, wavefunction ψ()
, potential V()
and nₘₐₓ()
will be exported. In this system, the model is generated by PoschlTeller
and the parameters λ
, m
, ℏ
, x₀
.
using Antique
PT = PoschlTeller(λ=4, m=1.0, ℏ=1.0, x₀=1.0)
; # hide
Parameters:
PT.λ
PT.m
PT.ℏ
PT.x₀
Number of bound states:
nₘₐₓ(PT)
Eigenvalues:
E(PT, n=0)
E(PT, n=1)
E(PT, n=2)
E(PT, n=3)
Potential energy curve:
using CairoMakie
f = Figure()
ax = Axis(f[1,1], xlabel=L"$x$", ylabel=L"$V(x)$")
lines!(ax, -6..6, x -> V(PT, x))
f
Wave functions:
using CairoMakie
# setting
f = Figure()
ax = Axis(f[1,1], xlabel=L"$x$", ylabel=L"$\psi(x)$")
# plot
w0 = lines!(ax, -3..3, x -> ψ(PT, x, n=0))
w1 = lines!(ax, -3..3, x -> ψ(PT, x, n=1))
w2 = lines!(ax, -3..3, x -> ψ(PT, x, n=2))
w3 = lines!(ax, -3..3, x -> ψ(PT, x, n=3))
# legend
axislegend(ax, [w0, w1, w2, w3], [L"n=0", L"n=1", L"n=2", L"n=3"], position=:lb)
f
Potential energy curve, Energy levels, Wave functions:
using CairoMakie
# settings
f = Figure()
ax = Axis(f[1,1], xlabel=L"$x$", ylabel=L"$V(x),~E_n,~\psi_n(x) \times 5 + E_n$", aspect=1, limits=(-4,4,-10.5,1))
# hidespines!(ax)
# hidedecorations!(ax)
for n in 0:3
# classical turning point
xE = acosh(sqrt(PT.λ*(PT.λ+1)/abs(E(PT,n=n))/2))
# energy
hlines!(ax, E(PT, n=n), color=:black, linewidth=1, linestyle=:dash)
lines!(ax, [-xE,xE], fill(E(PT,n=n),2), color=:black, linewidth=2)
# wave function
lines!(ax, -4..4, x -> E(PT,n=n) + ψ(PT,x,n=n), linewidth=2)
end
#potential
lines!(ax, -4..4, x -> V(PT,x), color=:black, linewidth=2)
f
save("assets/fig/PoschlTeller.png", f) # hide
; # hide
Unit testing and Integration testing were done using numerical integration (QuadGK.jl). The test script is here.
using Markdown
using Antique
Markdown.parse(Antique.load("../../test/result/PoschlTeller.log"))