我无法解决“轴1超出维度0数组的界限”的问题

2024-10-01 00:30:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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()

我一直收到错误

^{pr2}$

我完全是Python的初学者,所以我不会理解大多数术语,所以请耐心等待。我如何解决这个问题?我试着画出这两个方程的解

dx2dt2=(4+x)*(dydt)^2-5*x+9.81*cos(y)
dy2dt2=(-9.81*sin(y)-2*(dxdt)*(dydt))/(l+x)

但我有很多麻烦。有人能解释一下我应该如何重写代码来解决这个问题吗?在

谢谢你!在


Tags: 代码fromimportnumpytimeasnpdiff
1条回答
网友
1楼 · 发布于 2024-10-01 00:30:18

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

但你的问题更严重。y数组的每个条目必须完全描述您的系统,这意味着计算dx2dt2和{}所需的每个值都必须在这个向量中。所以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。。。在

相关问题 更多 >