我无法解决问题 "axis -1 is out of bounds for array of dimension 0"
I can't solve issue "axis -1 is out of bounds for array of dimension 0"
我正在尝试模拟 spring 钟摆的运动,这是我的代码:
import numpy as np
from scipy.integrate import odeint
from numpy import sin, cos, pi, array
import matplotlib.pyplot as plt
#Specify initial conditions
init = array([pi/18, 0]) # initial values
def deriv(z, t):
x,y=z
dy=np.diff(y,1)
dy2=np.diff(y,2)
dx=np.diff(x,1)
dx2=np.diff(x,2)
dt=np.diff(t,1)
dt2=np.diff(t,1)
dx2dt2=(4+x)*(dydt)^2-5*x+9.81*cos(y)
dy2dt2=(-9.81*sin(y)-2*(dxdt)*(dydt))/(l+x)
return np.array([dx2dt2,dy2dt2])
time = np.linspace(0.0,10.0,1000)
y = odeint(deriv,init,time)
plt.xlabel("time")
plt.ylabel("y")
plt.plot(time, y)
plt.show()
我一直收到错误
Traceback (most recent call last):
File "/Users/cnoxon/Desktop/GRRR.py", line 24, in <module>
y = odeint(deriv,init,time)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/scipy/integrate/odepack.py", line 233, in odeint
int(bool(tfirst)))
File "/Users/cnoxon/Desktop/GRRR.py", line 13, in deriv
dy=np.diff(y,1)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/numpy/lib/function_base.py", line 1163, in diff
axis = normalize_axis_index(axis, nd)
numpy.core._internal.AxisError: axis -1 is out of bounds for array of dimension 0
我是 Python 的初学者,所以我不会理解大部分术语,所以请多多包涵。我该如何解决这个问题?我正在尝试绘制两个方程的解
dx2dt2=(4+x)*(dydt)^2-5*x+9.81*cos(y)
dy2dt2=(-9.81*sin(y)-2*(dxdt)*(dydt))/(l+x)
但我遇到了很多麻烦。有人可以向我解释我应该如何重写我的代码来解决这个问题吗?
谢谢!
出现问题是因为x
和y
是整数,不是数组,所以不能做np.diff(y,1)
.
但你的问题更深。 y
数组的每个条目都必须完整描述您的系统,这意味着计算 dx2dt2
和 dy2dt2
所需的每个值都必须在此向量中。所以 y
必须是 [x, y, dxdt, dydt]
的列表。 (改编init
对应这个)
然后,你的 deriv
函数只需要给出这样一个向量的导数,即:[dxdt, dydt, dx2dt2, dy2dt2]
。你的deriv
功能变得非常简单!
def deriv(z, t):
x, y, dxdt, dydt = z
dx2dt2=(4+x)*(dydt)^2-5*x+9.81*cos(y)
dy2dt2=(-9.81*sin(y)-2*(dxdt)*(dydt))/(l+x)
return np.array([dxdt, dydt, dx2dt2, dy2dt2])
还有另外两个小错误:在 python 中使用 **
而不是 ^
,我认为你将 1
更改为 l
...
我正在尝试模拟 spring 钟摆的运动,这是我的代码:
import numpy as np
from scipy.integrate import odeint
from numpy import sin, cos, pi, array
import matplotlib.pyplot as plt
#Specify initial conditions
init = array([pi/18, 0]) # initial values
def deriv(z, t):
x,y=z
dy=np.diff(y,1)
dy2=np.diff(y,2)
dx=np.diff(x,1)
dx2=np.diff(x,2)
dt=np.diff(t,1)
dt2=np.diff(t,1)
dx2dt2=(4+x)*(dydt)^2-5*x+9.81*cos(y)
dy2dt2=(-9.81*sin(y)-2*(dxdt)*(dydt))/(l+x)
return np.array([dx2dt2,dy2dt2])
time = np.linspace(0.0,10.0,1000)
y = odeint(deriv,init,time)
plt.xlabel("time")
plt.ylabel("y")
plt.plot(time, y)
plt.show()
我一直收到错误
Traceback (most recent call last):
File "/Users/cnoxon/Desktop/GRRR.py", line 24, in <module>
y = odeint(deriv,init,time)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/scipy/integrate/odepack.py", line 233, in odeint
int(bool(tfirst)))
File "/Users/cnoxon/Desktop/GRRR.py", line 13, in deriv
dy=np.diff(y,1)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/numpy/lib/function_base.py", line 1163, in diff
axis = normalize_axis_index(axis, nd)
numpy.core._internal.AxisError: axis -1 is out of bounds for array of dimension 0
我是 Python 的初学者,所以我不会理解大部分术语,所以请多多包涵。我该如何解决这个问题?我正在尝试绘制两个方程的解
dx2dt2=(4+x)*(dydt)^2-5*x+9.81*cos(y)
dy2dt2=(-9.81*sin(y)-2*(dxdt)*(dydt))/(l+x)
但我遇到了很多麻烦。有人可以向我解释我应该如何重写我的代码来解决这个问题吗?
谢谢!
出现问题是因为x
和y
是整数,不是数组,所以不能做np.diff(y,1)
.
但你的问题更深。 y
数组的每个条目都必须完整描述您的系统,这意味着计算 dx2dt2
和 dy2dt2
所需的每个值都必须在此向量中。所以 y
必须是 [x, y, dxdt, dydt]
的列表。 (改编init
对应这个)
然后,你的 deriv
函数只需要给出这样一个向量的导数,即:[dxdt, dydt, dx2dt2, dy2dt2]
。你的deriv
功能变得非常简单!
def deriv(z, t):
x, y, dxdt, dydt = z
dx2dt2=(4+x)*(dydt)^2-5*x+9.81*cos(y)
dy2dt2=(-9.81*sin(y)-2*(dxdt)*(dydt))/(l+x)
return np.array([dxdt, dydt, dx2dt2, dy2dt2])
还有另外两个小错误:在 python 中使用 **
而不是 ^
,我认为你将 1
更改为 l
...