Привет и спасибо, что нашли время взглянуть на мой вопрос. Это обновленная версия моего вопроса, который я ранее разместил на сайте физика.stackexchange.com.
В настоящее время я изучаю двумерный экситонный спинор Бозе-Эйнштейна, и мне интересно узнать основное состояние этой системы. Математический метод перехода в основное состояние называется методом мнимого времени .
Метод очень прост, когда время в квантовой механике заменяется мнимым Это замещение приводит к тому, что частицы высокой энергии в моей системе распадаются быстрее, чем частицы низкой энергии. Повторно нормализуя число частиц на каждом этапе расчета, мы получаем систему частиц с наименьшей энергией, иначе говоря. основное состояние.
Рассматриваемое уравнение (я) является нелинейным, называемым нелинейным уравнением Шредингера , иногда уравнением Гросса-Питаевского . Для решения проблемы я использую Matlabs ode45, который развивает систему вперед во времени и в конечном итоге достигает основного состояния.
- Заметка! Нелинейное уравнение Шредингера включает в себя лапласиан и некоторые другие дифференциальные члены в пространстве. Все это решается с помощью быстрого преобразования Фурье. В итоге у нас есть только время ODE. *
Моя проблема и вопрос: расчеты идут от до . Ode45 помещается в цикл for, поэтому он не вычисляет гигантский вектор одновременно. Первый раунд начинается с ode45 (odefun, ), а затем продолжается в следующий раз с . Здесь шаг по времени - моя проблема. Различный выбор временных шагов дает мне разные решения основного состояния, и я не знаю, как определить, какой временной шаг дает мне «наиболее» правильное основное состояние!t f [ t 0 , … , t f ] [ t 0 , t 0 + Δ / 2 , t 0 + Δ ] , y , … t 0 + Δ Δ
Моя попытка: я понимаю, что в этой схеме большие временные шаги приведут к распаду большого количества частиц, прежде чем они будут нормализованы до исходного числа частиц, в то время как небольшие временные шаги приведут к распаду меньшего количества частиц, прежде чем они будут повторно нормализованы. Сначала я думал, что маленькие временные шаги должны дать более точное решение, но, похоже, все наоборот.
Я не специалист по количественным показателям, поэтому выбор ode45 был просто произвольным. ode113 дает мне то же самое. :(
У кого-нибудь есть мысли по этому поводу. Дайте мне знать, если понадобятся какие-либо дополнительные детали.
Спасибо.
Обновление 1: я исследовал метод воображаемого времени и ОДУ. Казалось бы, если временной шаг не достаточно мал, все становится нестабильным. Это заставляет меня задаться вопросом, являются ли мои нелинейные уравнения жесткими, что усложняет ситуацию из того, что я понимаю. Я буду держать вас в курсе.
Обновление 2: ИСПРАВЛЕНО: Проблема действительно заключалась в нормализации за пределами ODE. Если нормализация сохраняется внутри odefun, то ODE возвращает один и тот же результат для разных вариантов «внешних» временных шагов. Мой коллега показал мне более старые коды, и я просто добавил одну строку в моем odefun.
function y_out = odefun(t,y_in,...variables...)
...
[ Nonlinear equations evaluated ]
...
y_out = y_out + 0.1*y_in*(N0-Ntemp) ;
end
Последняя строка вычисляет разницу в текущем количестве частиц (Ntemp) и количестве частиц, которое должна удерживать система (N0). Он добавляет часть частиц обратно к выходу и, таким образом, создает общую стабильность числа частиц в системе вместо того, чтобы все они распадались.
Я также поставлю новый вопрос, касающийся размерности проблемы и некоторых различий в работе с пикосекундами или наносекундами как временными шагами в ODE.
Спасибо вам всем. :)
ode45()
, которая позволит вам сохранить шаги больше определенного порога; Вы могли бы хотеть изучить это.
ode45()
совершаете одинаковые шаги. Почему именно вы избегаете генерации «гигантского вектора»? Если вам абсолютно необходимы одинаковые точки,ode45()
выполните обычную процедуру, а затем используйте интерполяцию.