def f(t,y):
    return y - t**2 + 1

def euler(n, h):
    y = 0.5
    t = 0

    for i in range(0,n):
        y = y + h*f(t,y)
        t = t + h
    return y

def heun(n, h):
    y = 0.5
    t = 0

    for i in range(0,n):
        k1 = h*f(t,y)
        k2 = h*f(t + h,y + k1)
        t = t + h
        y = y + 0.5*(k1 + k2)
    return y

def rk4(n, h):
    y = 0.5
    t = 0

    for i in range(0,n):
        k1 = h*f(t,y)
        k2 = h*f(t + 0.5*h,y + 0.5*k1)
        k3 = h*f(t + 0.5*h,y + 0.5*k2)
        k4 = h*f(t + h,y + k3)
        t = t + h
        y = y + 1.0/6*(k1 + 2*k2 + 2*k3 + k4)
    return y
