#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]