/**
   * @param a start parameter
   * @param b end parameter
   * @param funX x(t)
   * @param funY y(t)
   * @param funZ z(t)
   * @return an interval within [a, b] where the funX, funY, funZ are defined.
   */
  public static double[] getDefinedInterval(
      double a, double b, RealRootFunction funX, RealRootFunction funY, RealRootFunction funZ) {

    // compute interval for x(t)
    double[] interval = RealRootUtil.getDefinedInterval(funX, a, b);

    // compute interval for y(t) and update interval
    RealRootUtil.updateDefinedIntervalIntersecting(funY, a, b, interval);

    // compute interval for z(t) and update interval
    RealRootUtil.updateDefinedIntervalIntersecting(funZ, a, b, interval);

    return interval;
  }