コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }