예제 #1
0
        /// Creates a numerical integration object based on the specified function.
        /// </summary>
        /// <param name="functionChoice"></param>
        /// <returns></returns>
        public static NumericalIntegrationBase CreateIntegrator(NumericalIntegrationEnum functionChoice)
        {
            //default
            NumericalIntegrationBase solver = null;

            switch (functionChoice)
            {
            case NumericalIntegrationEnum.Trapezoidal:
                solver = new TrapezoidIntegration();
                break;

            default:
                solver = null;
                break;
            }
            return(solver);
        }
예제 #2
0
        public void IntegrateLineFunction()
        {
            List <double> x;
            List <double> y;

            ConvertXYDataToArrays(CalculateLine(), out x, out y);

            var functionSelector = BasisFunctionFactory.BasisFunctionSelector(BasisFunctionsEnum.Linear);
            var coeffs           = functionSelector.Coefficients;

            var showDetails = false;
            var worked      = EvaluateFunction(x, y, functionSelector, ref coeffs, showDetails);

            NumericalIntegrationBase integrator = new TrapezoidIntegration();
            var area = integrator.Integrate(functionSelector, coeffs, 0, 3, 500);

            Console.WriteLine("Area: {0}", area);
            Assert.AreEqual(22.5, area, .001);
        }
예제 #3
0
        public void IntegrateLineFunctionTimeTrial()
        {
            List <double> x;
            List <double> y;

            ConvertXYDataToArrays(CalculateLine(), out x, out y);

            var functionSelector = BasisFunctionFactory.BasisFunctionSelector(BasisFunctionsEnum.Linear);

            double[] coeffs;

            var showDetails = false;
            var report      = EvaluateFunction(x, y, functionSelector, out coeffs, showDetails);

            NumericalIntegrationBase integrator = new TrapezoidIntegration();

            Console.WriteLine("");
            Console.WriteLine("Samples\tTime(ms)\tArea\tPercentError");

            for (var i = 1; i < 10; i++)
            {
                var    averageTimes = new List <double>();
                double sum          = 0;
                var    iterations   = 1000;
                var    totalSamples = i * 100;
                double area         = 0;
                for (var j = 0; j < iterations; j++)
                {
                    var start = DateTime.Now;
                    area = integrator.Integrate(functionSelector, coeffs, 0, 3, totalSamples);
                    var end = DateTime.Now;
                    sum += end.Subtract(start).TotalMilliseconds;
                }
                var percentError = (area - 22.5) / 22.5 * 100;
                var averageTime  = sum / Convert.ToDouble(iterations);
                Console.WriteLine("{0}\t{1}\t{2}\t{3}", totalSamples, averageTime, area, percentError);
            }
        }