我试图在python中执行Euler方法,但得到了一个';类型错误';,为什么?

我试图在python中执行Euler方法,但得到了一个';类型错误';,为什么?,python,python-3.x,typeerror,Python,Python 3.x,Typeerror,我试图用Euler方法解决python中的ODE问题,但我得到了 调用函数时出现“TypeError:“float”对象不可下标”错误。这是我的密码: ##Parameters g = 9.8 #in m/s^2 l = 0.5 #in m omega0 = np.sqrt(g/l) def euler(theta0, w0, deltat, t_end): t0 = 0 #in s ##Constructing the arrays t_arr = np.arang

我试图用Euler方法解决python中的ODE问题,但我得到了 调用函数时出现“TypeError:“float”对象不可下标”错误。这是我的密码:

##Parameters
g = 9.8 #in m/s^2
l = 0.5 #in m
omega0 = np.sqrt(g/l)

def euler(theta0, w0, deltat, t_end):
    t0 = 0 #in s

    ##Constructing the arrays
    t_arr = np.arange(t0, t_end + deltat, deltat)
    w = np.zeros(len(t_arr)) #angular velocity in rad/s
    theta = np.zeros(len(t_arr))

    ##Setting up our initial conditions
    w[0] = w0
    theta = theta0

    ##Performing the Euler method for both small and large angles
    for i in range(len(t_arr) -1):
       w[i + 1] = w[i] - ((omega0)**2)*np.sin(theta[i])*deltat
       theta[i + 1] = theta[i] + w[i]*deltat


    return theta


euler(0.07, 0, 0.05, 5)
输出:

TypeError: 'float' object is not subscriptable

我做错了什么?请帮助,我们将非常感谢您的帮助。

您本想在设置初始条件(第16行)时设置
θ[0]=θ0
,但您只是通过编写
θ=θ0
将θ重新定义为浮点,而不是之前在第12行中创建的np.zeros数组。改变这一点,它就会起作用

“notsubscriptable”类型错误不是一种特别容易理解的解释错误的方法。如果你想了解这意味着什么,请阅读。投票最多的答案是:

它基本上意味着对象实现了getitem()方法。换句话说,它描述的对象是“容器”,这意味着它们包含其他对象。这包括字符串、列表、元组和字典

两条线

    theta = np.zeros(len(t_arr))
...
    theta = theta0
彼此接近是没有意义的,并且表明它们的含义存在误解,因为两者都在变量
θ中输入了一个值。也就是说,第一个是没有任何效果的。第二行是唯一相关的行

我假设变量
theta
应该包含
numpy
数组。但是在最后一行的调用中,作为参数
theta0
的值传递的仅仅是一个浮点值,因此这与

我猜您可能想将
theta0
放入刚刚创建的数组
theta
的第一个字段中:

theta[0]=theta0


然后它可能会工作。

将完整的回溯显示为问题中格式正确的文本。
theta=theta0
。似乎
theta0
是一个浮点而不是数组<代码>np。完整的像
np。像
的可能会有帮助。Aaron可能有权这样做,你以后一定要听从Michael的建议。还可以考虑使用
pdb
,或类似的python调试器(简单到
import pdb;pdb.set_trace()
),这将允许您单步执行代码并检查变量,以自行解决此类问题。