Рунге-Кутта и повторное использование точек данных


11

Я пытаюсь реализовать метод Рунге-Кутты четвертого порядка для решения ODE первого порядка в Python, т.е. . Я понимаю, как работает метод, но я пытаюсь написать эффективный алгоритм, который минимизирует количество вычислений поскольку это довольно дорого. Мне сказали, что можно повторно использовать точки данных, которые были предварительно рассчитаны, при увеличении шагов, но не вижу, как это происходит. Кто-нибудь знает, как это сделать, или это невозможно?dYdИксзнак равное(Икс,Y)е(Икс,Y)


Исследование "запоминание". Вы можете легко "обернуть" ваш, f(x,y)чтобы результаты запомнились.

2
@ S.Lott: термин «запоминание», без «р».

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

В общем случае явные методы Рунге-Кутты порядка требуют по меньшей мере N оценок функций, и избежать этого абсолютно невозможно. В прошлом N = 4 они требуют болееN NNзнак равно4 функциональных оценок.N

Если вы хотите повторно использовать прошлые оценки функций, вам нужно использовать многошаговый метод, такой как Adams-Bashforth.

В любом случае вы платите за каждую стратегию. Для одношаговых методов требуется наибольшее количество вычислений функций, но для многоступенчатых методов требуется наибольшее количество памяти.

Редактировать: Исправление. Мое утверждение верно только для явных методов. Ситуация менее ясна для неявных методов, так как количество этапов не преобразуется непосредственно в число оценок функций.


Я, наверное, должен быть немного более конкретным. См. Мясник для более подробной информации: Мясник, JC и Дж. Уайли. Численные методы для обыкновенных дифференциальных уравнений. Wiley Online Library, 2008. Отличный справочник по решениям ODE, а также предоставляет множество доказательств несуществования для методов RK (например, не существует метода Рунге-Кутта порядка 5, который использует только 4 оценки функций.)
Reid.Atcheson

1
Для полноты: ваши утверждения не верны для «общих методов Рунге-Кутты», но только для явных методов Рунге-Кутты.
Дэвид Кетчесон

Упс! Вы правы, извините за это.
Reid.Atcheson

1

Я знаю, что вы используете методы Рунге-Кутты для решения вашего ODE, но если вы хотите повторно использовать старые вычисленные значения вашего f (x, y), вы можете рассмотреть многошаговые методы, такие как Adams-Bashforth или Adams-Moulton методы. Конечно, недостаток этих методов заключается в том, что вы не можете использовать адаптивное временное переключение очень легко.


0

Пожалуйста, проверьте "встроенные" методы: цель в этом типе методов RK состоит в том, чтобы иметь два метода с различными порядками, где метод высокого порядка использует те же оценки функции, что и метод низкого порядка. Это позволяет очень эффективно оценивать ошибки. См. Стр. 165 и далее «Решение обыкновенных дифференциальных уравнений I: проблемы нонтифа» Хайрера, Норсетта и Ваннера. Типичными примерами являются методы Фельберга порядка 7 (8).

Кроме того, если вы ищете решение ODE в PYTHON, проверьте assimulo . Я играл с этим пакетом в течение нескольких недель и очень счастлив.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.