Что я делаю не так с прерывистыми ODE и `integrate.odeint`? - PullRequest
0 голосов
/ 22 мая 2019

У меня есть два прерывистых ODE, и odeint работает как положено для одного, но не для другого.

c_func = interp1d(k, c)
c_s_func = interp1d(k,np.concatenate((c_l_75[k<k_c],c[k>=k_c])))

def kdot(k_val,t):
    return f(k_val)-c_func(k_val)
def kdot_s(k_val,t):
    return f(k_val)-c_s_func(k_val)

Функции c_func и c_s_func являются линейными интерполяциями численно вычисленных точек, а функция f является прерывной в точке k_c. Участки kdot и kdot_s:

kdots

Я звоню odeint следующим образом:

t = np.linspace(0,75,101)
k0 = .2
khat = odeint(kdot, k0, t)
khat_s = odeint(kdot_s, k0, t)

, но решение для khat_s становится совершенно плоским, когда оно достигает разрыва, как k_c:

solved odes

Я ожидал, что линия khat_s будет выглядеть так же, как линия khat при достижении k_c. То есть часть синей линии над пунктирной линией сместилась вправо, чтобы встретить точку, где оранжевая линия встретила пунктирную линию. Вместо этого пунктирная линия становится плоской в ​​этой точке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...