繁体   English   中英

我无法解决“轴-1超出维度0数组的范围”的问题

[英]I can't solve issue “axis -1 is out of bounds for array of dimension 0”

我正在尝试模拟弹簧摆的运动,这是我的代码:

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)

但我遇到很多麻烦。 有人可以告诉我如何重写代码以解决此问题吗?

谢谢!

发生问题是因为xy是整数,而不是数组,所以您不能执行np.diff(y,1)

但是您的问题更深。 y数组的每个条目都必须完整描述您的系统,这意味着计算dx2dt2dy2dt2所需的每个值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 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM