Пример #1
0
def euler(t, g, y0, h):
    f = tensor(g(t), "j", "d")
    o = tensor(ones(N), "j", "u")
    T = tensor(tri(N), "ij", "dd")

    y = y0 + f * h * T * o

    t = append(t, t[-1]+h)
    y.arr = append(array([y0]),y.arr)
    return handle_3d(t, y.arr)
Пример #2
0
def RK5(t, g, y0, h):
    def k(x):
        a = (23*g(x) +125*g(x+h/3.) - 81*g(x+2*h/3) + 125*g(x+4.*h/5.)) / 192.  
        return a
    f = tensor(k(t), "j", "d")
    o = tensor(ones(N), "j", "u")
    T = tensor(tri(N), "ij", "dd")

    y = y0 + f * h * T * o

    t = append(t,t[-1]+h)
    y.arr = append(array([y0]),y.arr)
    return handle_3d(t, y.arr)
Пример #3
0
def RK2(t, g, y0, h):
    def k(x):
        a = (g(x) + g(x+h)) / 2.  
        return a
    f = tensor(k(t), "j", "d")

    o = tensor(ones(N), "j", "u")
    T = tensor(tri(N), "ij", "dd")

    y = y0 + f * h * T * o

    t = append(t, t[-1]+h)
    y.arr = append(array([y0]),y.arr)
    return handle_3d(t, y.arr)
Пример #4
0
def RK4(t, g, y0, h):
    def k(x, y):
        k1 = g(x, y)
        k2 = g(x+0.5*h, y+0.5*k1)
        k3 = g(x+0.5*h, y+0.5*k2)
        k4 = g(x+h, y+0.5*k3)
        a = (k1 + 2*k2 + 2*k3 + k4)/6.  
        return a

    f = tensor(k(t), "j", "d")
    o = tensor(ones(N), "j", "u")

    y = y0 + f.convolve(o, idx="j") * h

    t = append(t, t[-1]+h)
    y.arr = append(array([y0]),y.arr)
    return handle_3d(t, y.arr)