Вибір розміру кроку за допомогою ODE в matlab


12

Привіт, спасибі, що надали час на розгляд мого питання. Це оновлена ​​версія мого питання, яку я опублікував раніше на сайті physics.stackexchange.com

На даний момент я вивчаю 2D спінор екситону Бозе-Ейнштейна конденсату і мені цікаво основний стан цієї системи. Математичний метод потрапляння в основний стан називається методом уявного часу .

Метод дуже простий, коли час у квантовій механіці замінюється уявним одним Ця заміна призводить до того, що частинки високої енергії в моїй системі розпадаються швидше, ніж низько енергетичні. Повторно нормалізуючи кількість частинок на кожному етапі обчислення, ми закінчуємо системою частинок з найменшою енергією, ака. основний стан.

t=iτ

Розглянуті рівняння нелінійні, називаються нелінійними рівняннями Шредінгера , іноді рівняннями Гросса-Пітаєвського . Для вирішення проблеми я використовую Matlabs ode45, який розвиває систему вперед і в підсумку доходить до основного стану.

  • Примітка! Нелінійне рівняння Шредінгера включає лаплаціан та деякі інші диференціальні доданки в просторі. Всі вони вирішуються за допомогою швидкого перетворення Фур'є. Врешті-решт, у нас є лише ODE часу. *

t0tf[t0,,tf][t0,t0+Δ/2,t0+Δ],y,t0+ΔΔ

Моя спроба: я усвідомлюю, що в цій схемі великі часові кроки призведуть до розпаду великої кількості частинок перед повторним нормалізацією до початкової кількості частинок, тоді як невеликі часові кроки призведуть до розпаду меншої кількості частинок перед повторним нормалізацією. Моя початкова думка полягає в тому, що невеликі часові кроки повинні дати більш точне рішення, але, здається, буде навпаки.

Я не є експертом з чисельності, тому вибір 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). Це додає частинку частинок назад до виходу і, таким чином, створює загальну стабільність кількості частинок у системі, а не відкладаючи їх.

Я поставлю також нове питання щодо розмірності проблеми та деякі відмінності в роботі з пікосекундами або наносекундами як часовими кроками в ОДЕ.

Дякую вам всім. :)


3
Принципова проблема полягає в тому, що ви насильно використовуєте адаптивний метод, як ode45()зробити кроки, спрямовані на рівномірність. Чому саме ви уникаєте покоління "гігантського вектора"? Якщо вам абсолютно потрібні одинакові точки, ode45()продовжуйте, як зазвичай, та використовуйте інтерполяцію.
JM

y

Якщо пам'ять служить, має бути варіант, ode45()який дозволить вам зберегти кроки, більші за певний поріг; ви можете розглянути це.
JM

1
Відповідь полягає лише у використанні локальної оцінки помилок. У ODE45 є один вбудований, тому найпростіше це використовувати, але ви також можете кодувати свій власний.
Девід Кетчесон

1
0.11/timeαΔt(NtN0)Δt

Відповіді:


4

Оскільки ви не опублікували код MATLAB, я не впевнений, як ви називаєте ode45. Я здогадуюсь, що ви змінюєте вектор tspan (другий аргумент) під час кожного дзвінка на ode45. Перше, що слід зрозуміти, це те, що вектор tspan (майже) не впливає на часовий крок, використовуваний ode45. Вектор tspan просто дозволяє передати ode45 часовий проміжок інтеграції і в який час ви хочете виводити. Час часу, який використовується алгоритмом Рунга-Кутти в ode45, регулюється внутрішньо для досягнення заданої точності. Два параметри, які керують цією точністю, - це RelTol і AbsTol в структурі параметрів, переданих ode ode45. Вони мають розумні за замовчуванням, і оскільки ви не згадали про них, я припускаю, що ви їх не змінили.

Я сказав "майже" ніякого впливу на нормальний крок часу45. Якщо ви запитуєте вихід на часових інтервалах, дуже малий відносно часу, який би інакше відійшов етап ode45, то для задоволення вашого вихідного запиту доведеться скоротити крок часу. Я вважаю, що це те, що JM передбачає, що відбувається. Навіщо вам потрібне рішення в стільки разів? Зазвичай достатньо просто запитувати вихід у достатній час, щоб створити плавний графік.

Щодо зміни рішення, яке ви бачите, можливо, значення RelTol та AbsTol за замовчуванням не підходять для вашої проблеми. Я пропоную замінити цикл на ode45 одним викликом, вимагати виведення в розумну кількість разів і експериментувати з меншими значеннями RelTol і AbsTol, поки не отримаєте конвергентне рішення.


Дякую за відповідь. Причина, чому мені було потрібно рішення в стільки вихідних разів, полягає в тому, що якщо хвильова функція не нормалізується регулярно, то все занепадає, і моя система порожня. Ось чому я помістив ode45 в цикл з маленькими векторами tspan, щоб я міг повторно нормалізуватися після кожного вектора tspan.

2

Оскільки нелінійне рівняння Шредінгера є, ну, нелінійним, воно може мати велику кількість стаціонарних станів, деякі з яких можуть бути стабільними. У фізичній реальності, починаючи з одного конкретного стану, система детерміновано перетвориться в один кінцевий стан. Якщо числова схема дає різні результати для різних дискрецій (часових кроків), то це є основним недоліком вашої дискретизації. Перевір свій код.

ψ0

dψdt=F(ψ),
F(ψ0)=0.
G(ψ)=ΩE(ψ)
E()F(ψ)=0E(ψ)E(ψ)=|ψ|4

Так. Я будую графік густини мого вихідного рішення, і коли він довго не змінюється, в основному перестав розвиватися, я припускаю, що я досяг стаціонарного стану. Але я не впевнений, що дивлячись на щільність енергії може допомогти, оскільки хвильова функція є спінором із (+2, +1, -1, -2) спіновими компонентами. Я не думаю, що інтеграція кожного компонента скаже мені енергію конденсату, але коли я дістаюсь до основного стану, щільність енергії повинна бути нерухомою і, таким чином, постійною у часі, це є підказкою для правильного рішення.

1

Проблема вирішена:

Нормалізація повинна бути частиною функції, що оцінюється в ODE. Порушення ОДЕ в багато етапів і нормалізація між ними викликає, здавалося б, числову нестабільність і дає різні результати залежно від часових інтервалів, на які розбивається ОДЕ. (Докладнішу інформацію див. У редагуванні 2, про який йде мова.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.