r"""
        Solve the IVP by integrating the ODE given some initial condition.

        Parameters
        ----------
        t0 : float
            Initial condition for the independent variable.
        y0 : array_like (float, shape=(n,))
            Initial condition for the dependent variables.
        h : float, optional(default=1.0)
            Step-size for computing the solution. Can be positive or negative
            depending on the desired direction of integration.
        T : int, optional(default=None)
            Terminal value for the independent variable. One of either `T`
            or `g` must be specified.
        g : callable ``g(t, y, f_args)``, optional(default=None)
            Provides a stopping condition for the integration. If specified
            user must also specify a stopping tolerance, `tol`.
        tol : float, optional (default=None)
            Stopping tolerance for the integration. Only required if `g` is
            also specifed.
        integrator : str, optional(default='dopri5')
            Must be one of 'vode', 'lsoda', 'dopri5', or 'dop853'
        step : bool, optional(default=False)
            Allows access to internal steps for those solvers that use adaptive
            step size routines. Currently only 'vode', 'zvode', and 'lsoda'
            support `step=True`.
        relax : bool, optional(default=False)
            Currently only 'vode', 'zvode', and 'lsoda' support `relax=True`.
        **kwargs : dict, optional(default=None)
            Dictionary of integrator specific keyword arguments. See the
            Notes section of the docstring for `scipy.integrate.ode` for a
            complete description of solver specific keyword arguments.

        Returns
        -------
        solution: ndarray (float)
            Simulated solution trajectory.

def solve(self, t0, y0, h=1.0, T=None, g=None, tol=None,
              integrator='dopri5', step=False, relax=False, **kwargs):
        r"""
        Solve the IVP by integrating the ODE given some initial condition.

        Parameters
        ----------
        t0 : float
            Initial condition for the independent variable.
        y0 : array_like (float, shape=(n,))
            Initial condition for the dependent variables.
        h : float, optional(default=1.0)
            Step-size for computing the solution. Can be positive or negative
            depending on the desired direction of integration.
        T : int, optional(default=None)
            Terminal value for the independent variable. One of either `T`
            or `g` must be specified.
        g : callable ``g(t, y, f_args)``, optional(default=None)
            Provides a stopping condition for the integration. If specified
            user must also specify a stopping tolerance, `tol`.
        tol : float, optional (default=None)
            Stopping tolerance for the integration. Only required if `g` is
            also specifed.
        integrator : str, optional(default='dopri5')
            Must be one of 'vode', 'lsoda', 'dopri5', or 'dop853'
        step : bool, optional(default=False)
            Allows access to internal steps for those solvers that use adaptive
            step size routines. Currently only 'vode', 'zvode', and 'lsoda'
            support `step=True`.
        relax : bool, optional(default=False)
            Currently only 'vode', 'zvode', and 'lsoda' support `relax=True`.
        **kwargs : dict, optional(default=None)
            Dictionary of integrator specific keyword arguments. See the
            Notes section of the docstring for `scipy.integrate.ode` for a
            complete description of solver specific keyword arguments.

        Returns
        -------
        solution: ndarray (float)
            Simulated solution trajectory.

        """
        self._initialize_integrator(t0, y0, integrator, **kwargs)

        if (g is not None) and (tol is not None):
            soln = self._integrate_variable_trajectory(h, g, tol, step, relax)
        elif T is not None:
            soln = self._integrate_fixed_trajectory(h, T, step, relax)
        else:
            mesg = "Either both 'g' and 'tol', or 'T' must be specified."
            raise ValueError(mesg)

        return soln