Одним из краеугольных камней квантовой механики является дуализм волна-частица.

На уровне микроскопа все ведет себя крайне нелогично. И вещи буквально появляются и исчезают в мгновение ока.

А материя больше похожа на волны, колеблющиеся взад и вперед.

Управляющие уравнения этих волн ведут себя в соответствии с уравнениями Шредингера, обнаруженными австрийским физиком Эрвином Шредингером.



В этом примере мы будем иметь дело с одним из простейших случаев. Но даже тогда это требует нетривиальной математической обработки.

Частица, заключенная в одномерный ящик.

Он может находиться где угодно внутри коробки, но не снаружи.

Крошечная карманная вселенная, если хотите.

Его поведение регулируется дифференциальным уравнением 2-го порядка, как показано ниже.

Где h_bar - постоянная планки, а m - масса частицы.

Общее решение

Дифференциальные уравнения 2-го порядка допускают общие решения вида:

Использование формулы Эйлера для комплексных чисел

Мы можем переписать решение в следующем виде:

Граничные условия

Поскольку частица ограничена существованием внутри бокса, она обязана быть неспособной существовать на границах бокса.

На нуле и на L

Следовательно,

for x = 0, 
C sin(k(0)) + D cos(k(0)) = 0, 
> D = 0 

for x = L, 
C sin(kL) + D cos(kL) = 0 
C sin(kL) + 0         = 0
Csin(kL) = 0
kL = nπ , where n = 1, 2, 3,......
=> k = nπ/L

C - нормировочная постоянная,

√(2/L) 

Волновая функция

Отсюда мы приходим к волновой функции, приведенной ниже.

Он определяет вероятность нахождения этой частицы в колодце.

Код Юлии



Я случайно наткнулся на фрагменты кода Python, представленные в приведенной выше ссылке.

И решил переписать код на Юлии.



Поскольку никакой специальной библиотеки не требуется, нам просто нужна библиотека для построения графиков Plots.

using Plots
plotly()
Plots.PlotlyBackend()
#Declare plotly backend
#At the time of publication, default "GR" backend is glitchy

Создайте волновую функцию и подайте ей соответствующие входные данные.

#Wave function
function Ψ(x,n,L)
    √(2.0/L)*sin(Float16(n*π*x)/L)
end
#n = energy level (n = 1,2,3, ....  ∞ )
#L = box width in angstrom
L = 20
n =  3
x = 0:0.1:L
y = Ψ.(x,n,L)

Создание графиков для визуализации позиционной вероятности частицы.

Волновая функция обеспечивает амплитуду вероятности обнаружения частицы.

Нам нужно возвести его в квадрат, чтобы получить распределение вероятностей.

p1=plot(x,y, w=3, label=”probability amplitude: Ψ(x,$n,$L)”, 
xlabel=”x”, ylabel=”Ψ”, ylim=(-1,1))
p2=plot(x,y.^2, w=3, label=”probability distribution: Ψ²(x,$n,$L)”, xlabel=”x”, ylabel=”Ψ²”, line=:red)
plot(p1, p2, layout=(1,2), legend=:bottomright, legendfontsize=7)

И, как видно из красного графика ниже, внутри потенциальной ямы есть 3 места, в которых частица, скорее всего, будет находиться.

И, наконец, в качестве проверки здравомыслия, чтобы убедиться, что наши результаты верны, давайте объединим выражение, предоставленное psi_square, чтобы убедиться, что мы правы.

Мы будем проинтегрировать под выражением, чтобы увидеть, получим ли мы значение 1.

Поскольку частица ограничена существованием внутри блока, вероятность того, что она находится внутри блока, должна составлять 100%.

И мы используем следующий алгоритм интеграции Гаусса Конрода



using QuadGK

g(x) = (√(2.0/L)*sin(Float64(n*π*x)/L))^2
integral, err = quadgk(x -> g(x), 0, 20, rtol=1e-5)
# rtol here refers to the error tolerance. 
# Often in numerical methods, we cannot obtain an exact solution, and we terminate the solver once it get close enough. 
.
.
.
< (1.0, 0.0) > 

И, как и ожидалось, получаем значение один.

Поскольку выражение достаточно просто для решения, относительная ошибка равна нулю.

Весь код сведен ниже для удобства читателя.