Решение ODE первого порядка, которое содержит другое ODE (odeint / solve_ivp в Python) - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь настроить быстрый числовой решатель в Python для дифференциальной задачи вида:

Equations shown clearly as an image

, где r - некоторая постоянная.

Я хочу интегрировать А в течение некоторого периода времени, представляющего интерес. Однако это усложняется тем фактом, что уравнение dA / dt включает в себя другую переменную B, которая сама описывается ODE dB / dt. На самом деле B - это вектор, но я упростил выражение, чтобы попытаться более четко обозначить свои проблемы.

В настоящее время у меня есть решение, использующее ручной метод Эйлера: то есть вычисление дБ / dt (затем используйте B = B_previous + dB/dt * dt) и шаг вперед вручную с использованием фиксированного размера шага по времени dt. Однако это медленно и ненадежно. Я полагаю, что было бы намного лучше использовать встроенные решатели ODE в Numpy, но я не уверен, что это возможно, учитывая сложный характер проблемы, которую я пытаюсь решить?

Возможно ли это с помощью Numpy odeint или solve_ivp, пожалуйста? И если да, может кто-нибудь предложить какие-либо указатели, пожалуйста! Благодарю.

1 Ответ

0 голосов
/ 04 ноября 2018

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

https://scipy -cookbook.readthedocs.io / товар / CoupledSpringMassSystem.html

Имейте в виду, что не все уравнения могут быть решены с помощью ODEINT. Если ваш ODE является «жестким» ODE, вам придется точно выбрать свой алгоритм. Определение жесткого ODE не полностью определено, но обычно оно возникает, если в вашем ODE есть большие или нецелые степени зависимой переменной.

Первый шаг в решении связанного ODE - использование стандартных методов. Если они не работают, посмотрите на что-то еще.

...