Як ви підвищуєте точність методу кінцевих різниць для знаходження власної системи сингулярного лінійного ODE


11

Я намагаюся вирішити рівняння типу:

(2x2f(x))ψ(x)=λψ(x)

Якщо має простий полюс при 0 , для найменших N власних значень та власних векторів. Граничними умовами є: ψ ( 0 ) = 0 і ψ ( R ) = 0 , і я дивлюся лише на функцію над ( 0 , R ] .f(x)0Nψ(0)=0ψ(R)=0(0,R]

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

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

зауважте: моя схема кінцевих різниць - симетрична тридіагональ, де 3 діагоналі:

(12Δ2,1Δ2f(x),12Δ2)

Δ


1Δ2f(x)

Відповіді:


6

Якщо ви хочете підвищити точність схеми кінцевих різниць, ви завжди можете спробувати збільшити ступінь трафарету. Однак на рівновіддалених точках це може призвести до числових нестабільності. Щоб уникнути цих проблем і все-таки отримати високу точність, я б запропонував використовувати Спектральні методи .

Якщо у вашій проблемі є фіксовані полюси, ви можете спробувати обійти їх, розділивши свій домен і вирішивши дві пов'язані проблеми.

chebguif(x)

chebguiu(x)u(x)x=λu[1,1]

Використовуючи <code> chebgui </code> для обчислення власних значень та власних модулів простого диференціального рівняння другого порядку.

Оновлення

Якщо ви хочете вирішити цю проблему, не надто поглинаючись в Chebfun, всі деталі повинні бути описані в главі 9 книги Ніка Трефетена " Спектральні методи в Матлабі ".


Я відредагував свій оригінальний пост, щоб зрозуміти, що я насправді не дивлюсь на полюс, а просто дуже поруч. Дякую за інформацію, мені доведеться перевірити chebfun.
Ендрю Спотт

3
Проголосували без коментарів? На користь усім, ви могли б вказати, як можна відповісти на цю відповідь?
Педро

0

Один із способів швидко покращити речі (хоча, ймовірно, не набагато краще) - розглянути схожість між методами кінцевих різниць найменшого порядку, якими ви користуєтесь, та методом кінцевих елементів найменшого порядку. Якщо ви обчислите тридіагональну матрицю, отриману за допомогою функцій лінійних кінцевих елементів у 1d, то дискретизація другої похідної буде виглядати точно так само (до коефіцієнта але ви отримаєте інший термін для чого відривається . я не знаю , як виглядає в вашому випадку, але де зараз використовується , то замість цього буде що - щось на зразок деΔxf(x)ψ(x)f(x)f(xi)xi1xi+1f(x)φi(x)φi(x)- це функція капелюха, яка досягає максимальної точки . Якщо досить простий, то ви зможете точно обчислити цей інтеграл, і він забезпечить більш точну матрицю, яку ви повинні знайти власне значення.xif(x)

Звичайно, якщо ви вже робите кінцеві елементи, ви можете також інвестувати у використання елементів вищого порядку, які не так вже й складні в 1d.

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