Привіт, спасибі, що надали час на розгляд мого питання. Це оновлена версія мого питання, яку я опублікував раніше на сайті physics.stackexchange.com
На даний момент я вивчаю 2D спінор екситону Бозе-Ейнштейна конденсату і мені цікаво основний стан цієї системи. Математичний метод потрапляння в основний стан називається методом уявного часу .
Метод дуже простий, коли час у квантовій механіці замінюється уявним одним Ця заміна призводить до того, що частинки високої енергії в моїй системі розпадаються швидше, ніж низько енергетичні. Повторно нормалізуючи кількість частинок на кожному етапі обчислення, ми закінчуємо системою частинок з найменшою енергією, ака. основний стан.
Розглянуті рівняння нелінійні, називаються нелінійними рівняннями Шредінгера , іноді рівняннями Гросса-Пітаєвського . Для вирішення проблеми я використовую Matlabs ode45, який розвиває систему вперед і в підсумку доходить до основного стану.
- Примітка! Нелінійне рівняння Шредінгера включає лаплаціан та деякі інші диференціальні доданки в просторі. Всі вони вирішуються за допомогою швидкого перетворення Фур'є. Врешті-решт, у нас є лише ODE часу. *
Моя спроба: я усвідомлюю, що в цій схемі великі часові кроки призведуть до розпаду великої кількості частинок перед повторним нормалізацією до початкової кількості частинок, тоді як невеликі часові кроки призведуть до розпаду меншої кількості частинок перед повторним нормалізацією. Моя початкова думка полягає в тому, що невеликі часові кроки повинні дати більш точне рішення, але, здається, буде навпаки.
Я не є експертом з чисельності, тому вибір ode45 був просто довільним. ode113 дає мені те саме. :(
Хтось має думки з цього приводу. Повідомте мене, чи потрібні додаткові деталі.
Дякую.
Оновлення 1: Я досліджував уявний метод часу та ODE. Здавалося б, якщо крок часу недостатньо малий, вся справа стає нестабільною. Це змушує мене замислитися, чи мої нелінійні рівняння жорсткі, що робить речі набагато складнішими від того, що я розумію. Я буду інформувати вас.
Оновлення 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). Це додає частинку частинок назад до виходу і, таким чином, створює загальну стабільність кількості частинок у системі, а не відкладаючи їх.
Я поставлю також нове питання щодо розмірності проблеми та деякі відмінності в роботі з пікосекундами або наносекундами як часовими кроками в ОДЕ.
Дякую вам всім. :)
ode45()
який дозволить вам зберегти кроки, більші за певний поріг; ви можете розглянути це.
ode45()
зробити кроки, спрямовані на рівномірність. Чому саме ви уникаєте покоління "гігантського вектора"? Якщо вам абсолютно потрібні одинакові точки,ode45()
продовжуйте, як зазвичай, та використовуйте інтерполяцію.