Runge-Kutta та повторне використання точок даних


11

Я намагаюся реалізувати метод Runge-Kutta четвертого порядку для вирішення ODE першого порядку в Python, тобто . Я розумію, як працює метод, але я намагаюся написати ефективний алгоритм, який мінімізує кількість обчислень , оскільки це досить дорого. Мені сказали, що можна повторно використовувати точки даних, які раніше були розраховані під час збільшення кроків, але не бачу як. Хтось знає, як це зробити чи це неможливо?f(x,y)dydx=f(x,y)f(x,y)


Дослідження "запам'ятовування". Ви можете легко "обгортати" свої, f(x,y)щоб результати запам'ятовувалися.

2
@ S.Lott: Термін "запам'ятовування", без "r".

1
@DietrichEpp: Повністю правильно. У Mac OS X є нова, агресивна перевірка орфографії, яка зовсім не має технічної кмітливості.

Це імітація системи 2-го порядку методом 4-го порядку?

Ось величезний перелік альтернативних рішень: google.com/… Будь-яке з них, мабуть, стане в нагоді.

Відповіді:


8

Якщо ви збираєтеся з yp_1 = f(x_1, y_1)до yp_2 = f(x_1+h, y_2)ви збираєтеся потребувати проміжних пунктах:

K1 = f(x_1+h/2, y_1+h/2*yp_1)
K2 = f(x_1+h/2, y_1+h/2*K1)
K3 = f(x_1+h, y_1+h*K2)

x_2 = x_1 + h
y_2 = y_1 + h/6*(yp_1+2*K1+2*K2+K3)
yp_2 = f(x_2, y_2)

Взагалі жоден з проміжних моментів не є корисним на наступному кроці. Тому що K1<> K2і K3<> yp_2.


4

Взагалі явні методи Runge-Kutta порядку вимагають принаймні N оцінок функцій, і немає абсолютно ніякого способу цього уникнути. За минулі N = 4 вони вимагають більше, ніж N оцінок функцій.N NN=4N

Якщо ви хочете повторно використовувати попередні оцінки функцій, вам потрібно скористатися багатоступінчастим методом, наприклад, Адамс-Башфорт.

У будь-якому випадку ви платите за кожну стратегію. Одноступеневі методи вимагають найбільшої кількості оцінок функцій, але багатоступінкові методи мають найбільшу потребу в пам'яті.

Редагувати: Виправлення. Моє твердження справедливо лише для явних методів. Ситуація є менш зрозумілою для неявних методів, оскільки кількість етапів не переходить безпосередньо до кількості оцінок функції.


Я, мабуть, повинен бути трохи більш конкретним. Детальнішу інформацію див. У М'яснику: Butcher, JC та J. Wiley. Числові методи для звичайних диференціальних рівнянь. Інтернет-бібліотека Wiley, 2008 р. Відмінна посилання на рішення ODE, а також надає безліч доказів відсутності методів RK (наприклад, не існує методу порядку 5 Runge-Kutta, який використовує лише 4 оцінки функції)
Reid.Atcheson

1
Для повноти: ваші твердження не стосуються "загальних методів Runge-Kutta", а лише для явних методів Runge-Kutta.
Девід Кетчесон

Ого! Ти маєш рацію, вибач за це.
Рейд.Атчесон,

1

Я знаю, що ви використовуєте методи Runge-Kutta для вирішення свого ODE, але якщо ви хочете повторно використовувати старі обчислені значення вашого f (x, y), ви можете розглянути багатоступеневі методи, наприклад, Адамс-Башфорт або Адамс-Моултон методи. Звичайно, недоліком цих методів є те, що не можна дуже легко використовувати адаптивний крок часу.


0

Будь ласка, перевірте "вбудовані" методи: метою цього типу методів RK є створення двох методів з різними порядками, де метод високого порядку використовує ті ж оцінки функцій, що і метод низького порядку. Це дозволяє дуже ефективно оцінити помилки. Див. С.165 та далі "Розв’язання звичайних диференціальних рівнянь I: нестатичні задачі" Хайрера, Норсетта та Ваннера. Типовими прикладами є методи Фельберга порядку 7 (8).

Крім того, якщо ви шукаєте рішення ODE в PYTHON, ознайомтеся з асимуло . Я граю з цим пакетом пару тижнів і дуже задоволений.

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