龙格库塔 4 实施

问题描述

我正在尝试实施 4 阶 Runge-Kutta 方法。 我得到一个类型错误:在 k1、k2、k3、k4 的计算中,'不能将序列乘以'numpy.float64' 类型的非整数。有人知道解决方法吗?

def rk4(f,Y0,t0,tf,n):
    t = np.linspace(t0,n+1)
    Y = np.array([Y0]*(n+1))
    h = t[1]-t[0]
    for i in range(n):
        k1 = h * f(Y[i],t[i])
        k2 = h * f(Y[i]+0.5*k1,t[i]+0.5*h)
        k3 = h * f(Y[i]+0.5*k2,t[i]+0.5*h)
        k4 = h * f(Y[i]+k3,t[i]+h)
        Y[i+1]  = Y[i] + (k1+2*(k2+k3)+k4)/6.0

    return Y,t

解决方法

您没有从函数 f 返回一个 numpy 数组。列表只能与整数“相乘”,并通过列表的副本产生重复,而不是您期望的向量乘法。

您可以通过将返回值包装在 numpy 数组中或提供包装器来直接在该函数中解决此问题

def rk4(f,Y0,t0,tf,n):
    func = lambda Y,t: np.array(f(Y,t))
    ...
    for i in range(n):
        k1 = h * func(Y[i],t[i])
        ...

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...