Потому что это список. python
не выполняет арифметические c векторные операции над списками, для этого используйте numpy
для получения массивов, которые действуют как векторы.
Для реализации RK4 без numpy
см. Решение Модель Лоренца с использованием Runge Kutta 4-го порядка в Python без пакета . Это не совсем то же самое, что использование списка скалярных функций ODE, но принципы должны быть видны.
Ваш код может быть исправлен для работы без numpy, но это решение только для 2 или 3 переменные, с большим он становится подверженным ошибкам
def rk4(xold):
k1 = EOM(xold)
#this is a list of [p_dot,phi_dot]
k2=EOM(xold[0]+dt/2*k1[0],xold[1]+dt/2*k1[1],) # trailing comma generates list
k3=EOM([xold[0]+dt/2*k2[0],xold[1]+dt/2*k2[1]]) # or do it directly as list
k4=EOM([xold[i]+dt*k3[i] for i in [0,1]]) # or use list generation
return [ xold[i]+dt/6*(k1[i]+2*k2[i]+2*k3[i]+k4[i] for i in [0,1] ]))