def METHOD_NAME(self):
    # Runge-Kutta 4th order (RK4)
    # Count number of iterations using step size or
    # step height h
    n = int((self.x - self.x0) / self.h)
    # Iterate for number of iterations
    y = self.y0
    result = np.zeros((24, n + 1))
    result[:, 0] = self.y0
    # 4th-order Runge-Kutta
    for i in range(1, n + 1):
        if i % 10000 == 0 and self.print_progress:
            print(f"Iteration: {i} \n Time: {self.x0}")
        "Apply Runge Kutta Formulas to find next value of y"
        k1 = self.h * self.func(self.x0, y, i)
        k2 = self.h * self.func(self.x0 + 0.5 * self.h, y + 0.5 * k1, i)
        k3 = self.h * self.func(self.x0 + 0.5 * self.h, y + 0.5 * k2, i)
        k4 = self.h * self.func(self.x0 + self.h, y + k3, i)
        # Update next value of y
        y = y + (1.0 / 6.0) * (k1 + 2 * k2 + 2 * k3 + k4)
        result[:, i] = np.copy(y)
        # Update next value of x
        self.x0 = self.x0 + self.h
    return result