У меня есть два прерывистых 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
:
Я звоню 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
:
Я ожидал, что линия khat_s
будет выглядеть так же, как линия khat
при достижении k_c
. То есть часть синей линии над пунктирной линией сместилась вправо, чтобы встретить точку, где оранжевая линия встретила пунктирную линию. Вместо этого пунктирная линия становится плоской в этой точке.