То, что вы реализуете в RK45Classic
, - это классический метод Рунге-Кутты 4-го порядка Хеун-Кутты, в котором нет ни методов, встроенных Ка sh -Карпом, Фельбергом или Дорманд-Принсом.
A Первой мерой было бы попытаться выяснить, почему происходит эта ошибка, поэтому перед запуском l oop put
print(t.size, t[0], t[-1], y.shape)
Это должно показать вам, что что-то в конструкции t
пошло не так.
Кажущаяся ошибка:
t=np.linspace(0,T_f<Nt)
, исправляющая опечатку, которая должна устранить эту ошибку. Фактически он создает подразделение [0,1]
с размером по умолчанию, примерно 50. Альтернативно, почему бы не использовать
t = np.arange(0, T_f+0.1*h, h)
Nt = len(t)-1
, так как он более точно соответствует вашим входным данным и служит той же цели.
Вы все еще можете получить подобную ошибку, поскольку в массивах t
и y
нет элемента с индексом Nt
, l oop должен перебрать range(3,len(t)-1)
, и если вы хотите поставить Nt
там его выражение должно давать одно и то же значение, так что y[i+1]
всегда обращается к допустимому элементу массива.
Кроме того, сама итерация Адамса-Башфорда 4-го порядка выглядит нормально.