/// <summary>
        ///     Creates a new object that is a copy of the current instance.
        /// </summary>
        /// <returns>
        ///     A new object that is a copy of this instance.
        /// </returns>
        public object Clone()
        {
            var clone = new MonteCarloIntegration(NumberOfParameters, Function);

            clone.Iterations = Iterations;
            clone.Range      = (NumericRange[])Range.Clone();

            return(clone);
        }
        /// <summary>
        ///     Computes the area of the function under the selected <see cref="Range" />.
        ///     The computed value will be available at this object's <see cref="Area" />.
        /// </summary>
        /// <returns>
        ///     True if the integration method succeeds, false otherwise.
        /// </returns>
        public static double Integrate(Func <double[], double> func, double[] a, double[] b)
        {
            var mc = new MonteCarloIntegration(a.Length, func);

            for (var i = 0; i < a.Length; i++)
            {
                mc.Range[i] = new NumericRange(a[i], b[i]);
            }
            mc.Compute();
            return(mc.Area);
        }