неверный индекс к скалярной переменной ошибка в решении системы из 5 од в python

#python #numpy #jupyter #ode #triangular

Вопрос:

Я написал следующий код для решения 5 дифференциальных уравнений на Python. Но я получаю следующую ошибку: неверный индекс скалярной переменной Я очень старался и искал, но не нашел, где это? Кто-нибудь может сказать мне, где я должен исправить?

 from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt 
def ode(x, t):
    vx = x[0]
    vy = x[1]
    x = x[2]
    y = x[3]
    a = x[4]
    dvxdt = -0.2*(np.cos(a))/(x**2 y**2)
    dvydt = -0.2*(np.sin(a))/(x**2 y**2)
    dxdt = vx
    dydt = vy
    dadt = (x*vy - y*vx)*((np.cos(a))**2)/(x**2)
    return [dvxdt, dvydt, dxdt, dydt, dadt]
x0 = [-1.7, 1, 5, 2, 0.5]
t = np.linspace(0,15,1000)
x = odeint(ode,x0,t)
vx = x[:,0]
vy = x[:,1]
x = x[:,2]
y = x[:,3]
a = x[:,4]

plt.semilogy(x,y)
plt.show()
 

Комментарии:

1. Когда вы сообщаете об ошибке в stackoverflow, полезно включить в вопрос полную обратную трассировку (т. Е. полное сообщение об ошибке). Там есть полезная информация!

Ответ №1:

Проблема в этой строке в функции ode :

     x = x[2]
 

Вы переназначили переменную x , поэтому после выполнения этого оператора x скаляр будет сохранен в исходном массиве x . Вам придется использовать другое имя для скаляра или для параметра ode массива.

У вас есть аналогичная проблема позже в сценарии:

 x = x[:,2]