public void FromNegativeInfinityIntegralTest() { var abs = Math.Pow(10, -8); Func <double, double> func1 = (x) => 2.0 / (Math.Pow(x, 2) + 9); var res1 = IntegralCalculator.Integrate(double.NegativeInfinity, -3.0, func1); Assert.AreEqual(Math.PI / 6, res1, abs); Func <double, double> func2 = (x) => x *Math.Pow(Math.E, (-1) *x *x); var res2 = IntegralCalculator.Integrate(double.NegativeInfinity, 0, func2); Assert.AreEqual(-0.5, res2, abs); }
public void FromNegativeToPositiveInfinityIntegralTest() { var abs = Math.Pow(10, -8); Func <double, double> func1 = (x) => x *Math.Pow(Math.E, (-1) *x *x); var res1 = IntegralCalculator.Integrate(double.NegativeInfinity, double.PositiveInfinity, func1); Assert.AreEqual(0, res1, abs); Func <double, double> func2 = (x) => 1 / (x * x + 2 * x + 8); var res2 = IntegralCalculator.Integrate(double.NegativeInfinity, double.PositiveInfinity, func2); Assert.AreEqual(Math.PI / Math.Sqrt(7), res2, abs); }
public List <Point> GetCDFDataForPlot(double?xMin = null, double?xMax = null, int numberOfPoints = 1000) { var resultPoints = new List <Point>(); if (!xMin.HasValue) { xMin = PiecewisePDF.Segments.First().FindLeftPoint(); } if (!xMax.HasValue) { xMax = PiecewisePDF.Segments.Last().FindRightPoint(); } //var segments = PiecewisePDF.Segments.OrderBy(s => s.A); var integralValue = default(double); var leftValue = double.NegativeInfinity; foreach (var segment in PiecewisePDF.Segments) { var args = segment.GetPoints(xMin, xMax, numberOfPoints); var points = new List <Point>(); foreach (var arg in args) { integralValue += IntegralCalculator.Integrate(leftValue, arg, (x) => segment[x]); points.Add(new Point(arg, integralValue)); leftValue = arg; } resultPoints.AddRange(points); } return(resultPoints); }