Python2.7中的RK4求解器

时间:2018-10-06 18:03:53

标签: python

我已经在python中为RK4求解器编写了代码,某处出错  因为解析解决方案与代码中的答案不匹配,我无法找到痛苦。

import numpy as np

def RK4(f, y0, t0, tf, h):
    N=int(tf-t0)/h
    m=len(y0)
    k1=np.array(np.zeros(m))
    k2=np.array(np.zeros(m))
    k3=np.array(np.zeros(m))
    k4=np.array(np.zeros(m))
    time=np.array(np.zeros(N))
    time[0]=t0
    y=np.array(np.zeros((m,N)))
    for i in range(N):
        for j in range(0):
            y[i,0]=y0[i]
    for j in range(N-1):   #column
        #time[0]=t0
        #time[j+1]=time[j]+h
        #if j==N-1:
        #time[j+1]=time[j]
        for i in range(m):   #row
            k1[i]=h*f(time[j],y[:,j])[i]
        for i in range(m):
            k2[i]=h*f(time[j]+h/2,y[:,j]+k1/2)[i]
        for i in range(m):
            k3[i]=h*f(time[j]+h/2,y[:,j]+k2/2)[i]
        for i in range(m):
            k4[i]=h*f(time[j]+h,y[:,j]+k3)[i]
        for i in range(m):
            y[i,j+1]=y[i,j]+(k1[i]+2*(k2[i]+k3[i])+k4[i])/6
        time[j+1]=time[j]+h
    return y, time    
代码中的

f 是一个函数。 y0 是该函数的起始值。 t0 是开始时间, tf 是最后时间。 h 是集成时间步。 任何帮助表示赞赏。 谢谢。

0 个答案:

没有答案