Я пытаюсь реализовать метод Рунге-Кутты четвертого порядка для решения ODE первого порядка в Python, т.е. . Я понимаю, как работает метод, но я пытаюсь написать эффективный алгоритм, который минимизирует количество вычислений поскольку это довольно дорого. Мне сказали, что можно повторно использовать точки данных, которые были предварительно рассчитаны, при увеличении шагов, но не вижу, как это происходит. Кто-нибудь знает, как это сделать, или это невозможно?
ode
python
explicit-methods
joshlk
источник
источник
f(x,y)
чтобы результаты запомнились.Ответы:
Если вы собираетесь из
yp_1 = f(x_1, y_1)
кyp_2 = f(x_1+h, y_2)
вы собираетесь нуждаться в промежуточных пунктах:В общем, ни одна из промежуточных точек не является полезной на следующем этапе. Потому что
K1
<>K2
иK3
<>yp_2
.источник
В общем случае явные методы Рунге-Кутты порядка требуют по меньшей мере N оценок функций, и избежать этого абсолютно невозможно. В прошлом N = 4 они требуют болееN N N= 4 функциональных оценок.N
Если вы хотите повторно использовать прошлые оценки функций, вам нужно использовать многошаговый метод, такой как Adams-Bashforth.
В любом случае вы платите за каждую стратегию. Для одношаговых методов требуется наибольшее количество вычислений функций, но для многоступенчатых методов требуется наибольшее количество памяти.
Редактировать: Исправление. Мое утверждение верно только для явных методов. Ситуация менее ясна для неявных методов, так как количество этапов не преобразуется непосредственно в число оценок функций.
источник
Я знаю, что вы используете методы Рунге-Кутты для решения вашего ODE, но если вы хотите повторно использовать старые вычисленные значения вашего f (x, y), вы можете рассмотреть многошаговые методы, такие как Adams-Bashforth или Adams-Moulton методы. Конечно, недостаток этих методов заключается в том, что вы не можете использовать адаптивное временное переключение очень легко.
источник
Пожалуйста, проверьте "встроенные" методы: цель в этом типе методов RK состоит в том, чтобы иметь два метода с различными порядками, где метод высокого порядка использует те же оценки функции, что и метод низкого порядка. Это позволяет очень эффективно оценивать ошибки. См. Стр. 165 и далее «Решение обыкновенных дифференциальных уравнений I: проблемы нонтифа» Хайрера, Норсетта и Ваннера. Типичными примерами являются методы Фельберга порядка 7 (8).
Кроме того, если вы ищете решение ODE в PYTHON, проверьте assimulo . Я играл с этим пакетом в течение нескольких недель и очень счастлив.
источник