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

11

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

joshlk
источник
Исследование "запоминание". Вы можете легко "обернуть" ваш, 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.

ja72
источник
4

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

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

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

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

Reid.Atcheson
источник
Я, наверное, должен быть немного более конкретным. См. Мясник для более подробной информации: Мясник, 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 . Я играл с этим пакетом в течение нескольких недель и очень счастлив.

GertVdE
источник