Решение ODE со случайной величиной с помощью пользовательского PDF - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть следующий ODE:

ODE

, где p - это вероятность, а y - случайная величина с pdf:

see link

epsilon - это небольшое предельное значение (обычно 0,0001).

Я ищу численное решение этой системы вPython, от t = 0 до 500.

Есть ли способ реализовать это с помощью numpy/scipy?

1 Ответ

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

Существует раздражающее отсутствие качественных пакетов Python для интеграции SDE.У вас есть какая-то необычная установка, в которой ваша случайная переменная имеет явную зависимость от вашей подынтегральной функции (по крайней мере, кажется, что y зависит от p).Из-за этого, вероятно, будет трудно найти существующую реализацию, отвечающую вашим потребностям.

К счастью, самый простой способ интеграции SDE, Euler-Maruyama , очень прост в реализации., как в функции eulmar ниже:

from matplotlib import pyplot as plt
import numpy as np

def eulmar(func, randfunc, x0, tinit, tfinal, dt):
    times = np.arange(tinit, tfinal + dt, dt)
    x = np.zeros(times.size, dtype=float)
    x[0] = x0

    for i,t in enumerate(times[1:]):
        x[i+1] = x[i] + func(x[i], t) + randfunc(x[i], t)

    return times, x

Затем вы можете использовать eulmar для интеграции вашего SDE следующим образом:

def func(x, t):
    return 1 - 2*x

def randfunc(x, t):
    return np.random.rand()

times,x = eulmar(func, randfunc, 0, 0, 500, 5)
plt.plot(times, x)

enter image description here

Вы должны будете предоставить свои randfunc.Как и выше, это должна быть функция, которая принимает x и t в качестве аргументов и возвращает одну выборку из вашей случайной величины y.Если у вас возникли проблемы с поиском способа генерирования выборок y, поскольку вы знаете PDF, вы всегда можете использовать выборку отклонения (хотя она, как правило, довольно неэффективна).

Примечания

  • Это не особенно эффективная реализация Эйлера-Маруямы.Например, случайные выборки обычно генерируются одновременно (например, np.random.rand(500)).Однако вы не можете предварительно сгенерировать случайные выборки, поскольку y зависит от p.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...