Ответ Кайла Каноса выглядит очень полным, но я решил добавить свой собственный опыт. Двухшаговый метод Фурье (SSFM) чрезвычайно прост в использовании; Вы можете создать его в нескольких строках Mathematica, и он чрезвычайно устойчив в численном отношении. Он включает в себя передачу только унитарных операторов в ваш набор данных, поэтому он автоматически сохраняет вероятность / мощность (последнее, если вы решаете с помощью уравнений Максвелла, что и лежит в моем опыте). Для одномерного уравнения Шредингера ( Е. Только вариации и ) оно очень быстро, даже как код Mathematica. И если вам нужно ускорить его, вам действительно нужен только хороший FFT-код на вашем целевом языке (мой опыт работы с C ++).xt
То, что вы будете делать, - это замаскированная версия метода распространения луча для оптического распространения через волновод с различным сечением (аналогично переменным во времени потенциалам), поэтому было бы полезно взглянуть и на это.
То, как я смотрю на SSFM / BPM, выглядит следующим образом. Его основой является формула произведения Троттера теории Ли:
limm→∞(exp(Dtm)exp(Vtm))m=exp((D+V)t)(1)
который иногда называют операторным уравнением расщепления в этом контексте. Ваш набор данных представляет собой дискретную сетку или комплексных значений, представляющих в данный момент времени . Итак, вы представляете себе это (вам не нужно этого делать ; я все еще говорю концептуально) колоссальная сетка, записанная как вектор элементного столбца (для сетки у нас ), и тогда ваше уравнение Шредингера имеет вид:x−yx−y−zψ(x,y,z)tNΨ1024×1024N=10242=1048576
dtΨ=KΨ=(D+V(t))Ψ(2)
где - это косоэрмитова матрица , элемент , и будет отображаться с увеличением времени элементом одного группа параметров . (Я засосал фактор в на RHS, чтобы я мог более легко говорить в терминах теории Ли). Учитывая размер , естественная среда обитания операторов является полностью колоссальной группой Ли, поэтому PHEW! да я все еще говорю в чисто теоретических терминах! Теперь, что делаетK=D+VN×Nu(N)Ψexp(Kt)iℏK=D+VNU(N)D+Vвыглядит как? Пока еще воображая, его можно представить как разностную версию , где - некоторый удобный «средний» потенциал для рассматриваемой задачи.iℏ∇2/(2m)−iℏ−1V0+iℏ−1(V0−V(x,y,z,t0))V0
Мы позволяем:
DV==iℏ2m∇2−iℏ−1V0iℏ−1(V0−V(x,y,z,t))(3)
Почему я разделил их так, станет ясно ниже.
Дело в том, что заключается в том, что он может быть аналитически разработан для плоской волны: это простой оператор умножения в координатах импульса. Итак, чтобы определить , вот первые три шага цикла SSFM / BPM:DΨ↦exp(ΔtD)Ψ
- Передайте БПФ в набор данных чтобы преобразовать его в набор весов суперпозиции плоских волн: теперь координаты сетки были изменены с на ;ΨΨ~x,y,zkx,ky,kz
- Передайте , просто умножив каждую точку на сетке на ;Ψ~↦exp(ΔtD)Ψ~exp(iΔt(V0−k2x+k2y+k2z)/ℏ)
Импортируйте обратное БПФ, чтобы отобразить нашу сетку обратно вexp(ΔtD)Ψ
. Теперь мы вернулись в позицию позиции. Конечно, это лучшая область для передачи оператора : здесь - простой оператор умножения. Итак, вот ваш последний шаг вашего алгоритмического цикла:VV
Передайте оператор , просто умножив каждую точку на сетке на фазовый факторΨ↦exp(ΔtV)Ψexp(iΔt(V0−V(x,y,z,t))/ℏ)
.... и затем вы начинаете свой следующий шаг и цикл снова и снова. Ясно, что очень легко поместить изменяющиеся во времени потенциалы в код.ΔtV(x,y,z,t)
Итак, вы видите, что вы просто выбираете достаточно маленьким, чтобы сработала формула Троттера (1): вы просто аппроксимируете действие оператора и вы перемещаетесь назад и вперед с помощью БПФ между координатами положения и импульса, то есть доменами, где и - простые операторы умножения.Δtexp(D+VΔt)≈exp(DΔt)exp(VΔt)VD
Обратите внимание, что вы когда-либо передаете, даже в дискретном мире, только унитарные операторы: БПФ и чисто фазовые факторы.
Вы должны быть осторожны с одной точкой: когда ваш становится маленьким, вы также должны убедиться, что пространственный интервал сетки также уменьшается. В противном случае предположим, что пространственный интервал сетки равен . Тогда физический смысл одного дискретного шага состоит в том, что дифракционные эффекты распространяются со скоростью ; при моделировании уравнений Максвелла и волноводов необходимо убедиться, что эта скорость намного меньше, чем . Я полагаю, что ограничения применяются к уравнению Шредингера: у меня нет прямого опыта, но это звучит забавно, и, возможно, вы могли бы опубликовать свои результаты когда-нибудь!ΔtΔxΔx/Δtc
Второй момент «опыта» с такими вещами - я почти готов поспорить, что именно так вы и будете следовать своим идеям. У нас часто бывают идеи, что мы хотим делать простые и быстрые и грязные симуляции, но это никогда не получается таким образом! Я бы начал с SSFM, как я описал выше, так как его очень легко запустить, и вы быстро увидите, являются ли его результаты физическими. Позже вы можете использовать свой, скажем, код Mathematica SSFM, чтобы проверить результаты более сложного кода, который, возможно, в конечном итоге выстроится, скажем, в коде Крэнка Николсона в соответствии с ответом Кайла Каноса .
Границы ошибок
Реализация формулы Дынкина теоремы Бейкера-Кэмпбелла-Хаусдорфа:
exp(DΔt)exp(V)Δt)=exp((D+V)Δt+12[D,V]Δt2+⋯)
сходящиеся для некоторого показывают, что метод точен на второй порядок и может показать, что:
Δt>0
exp(DΔt)exp(V)Δt)exp(−12[D,V]Δt2)=exp((D+V)Δt+O(Δt3))
Поэтому теоретически можно использовать термин чтобы оценить ошибку и установить вашу соответственно. Это не так просто, как кажется, и на практике оценки приводят к грубым оценкам ошибки. Проблема в том, что:exp(V)Δt)exp(−12[D,V]Δt2)Δt
Δt22[D,V]=−iΔt22m(∂2xV(x,t)+2∂xV(x,t)∂x)
и нет легко преобразованных в координаты, где является простым оператором умножения. Таким образом, вы должны быть довольны и используйте это для оценки вашей ошибки, разработав для вашего в настоящее время развивается решение и используется для установки[D,V]exp(−12[D,V]Δt2)≈e−iφΔt2(id−(12[D,V]−iφ(t))Δt2)(id−(12[D,V]−iφ(t))Δt2)ψψ(x,t)Δtна лету после каждого цикла алгоритма. Конечно, вы можете сделать эти идеи основой для адаптивного контроллера размера шага для вашей симуляции. Здесь - глобальная фаза, извлеченная из набора данных для минимизации нормы ; Вы, конечно, часто можете отказаться от такой глобальной фазы: в зависимости от того, что вы делаете с результатами моделирования, нам часто не мешает постоянная глобальная фаза .φ(12[D,V]−iφ(t))Δt2exp(∫φdt)
Соответствующая статья об ошибках в SSFM / BPM:
Ларс Тилен. «Метод распространения луча: анализ его применимости», Оптическая и квантовая электроника 15 (1983), стр . 433-439 .
Ларс Тилен размышляет над ошибками в нелиевских теоретических терминах (группы Ли - моя склонность, поэтому мне нравится искать их толкования), но его идеи по сути такие же, как и выше.