/// 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); }
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); }
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); } }