Я хотел бы использовать solve_ivp для моделирования системы, которая развивает следующую дифференциальную функцию:
dy (т) = A D (т) + B y (т)
Что касается меня, то это целое число от 0, я сделал
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
def fun(t, y, D, A, B):
dD1 = A*D[int(t)] - B*y
return dD1#[dD1, dD2]
D = np.zeros((1024))
D[10:34] = 12
tspan = np.linspace(0, np.size(D)-1, np.size(D))
sol = solve_ivp(lambda t, y: fun(t, y, D, A=0.8, B=0.025),
[tspan[0], tspan[-1]],
[0], method='RK45', t_eval=tspan)
plt.figure()
plt.plot(sol.t, sol.y[0,])
Это дает мне ожидаемый результат с пиком y при t = 34.
Однако, если я смещу интервал, в котором D имеет ненулевые значения, просто заменив
D[10:34] = 12
с
D[420:444] = 12
Я ожидаю, что я могу получить y той же формы, но только смещенную, в то время как результат дает мне все 0 ...
Кроме того, иногда я встречаю предупреждающее сообщение:
RuntimeWarning: деление на ноль, встречающееся в double_scalars
max (1, SAFETY * error_norm ** (-1 / (order + 1))))