Exemplo n.º 1
0
        /// <summary>
        /// Standard
        /// </summary>
        /// <param name="origin">Original Distribution</param>
        /// <param name="leftBorder">Left Border</param>
        /// <param name="rightBorder">Right Border</param>
        public BaseTrimmedContinuousDistribution(IContinuousProbabilityDistribution origin,
                                                 double leftBorder,
                                                 double rightBorder)
        {
            Origin = origin ?? throw new ArgumentNullException(nameof(origin));

            if (leftBorder <= rightBorder)
            {
                LeftBorder  = leftBorder;
                RightBorder = rightBorder;
            }
            else
            {
                throw new ArgumentOutOfRangeException(nameof(leftBorder), "Empty region");
            }

            m_CdfRight = Origin.Cdf(RightBorder);
            m_CdfLeft  = Origin.Cdf(LeftBorder);

            if (m_CdfRight <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(rightBorder), "Zero density region");
            }

            if (leftBorder != rightBorder && (m_CdfRight - m_CdfLeft <= 0))
            {
                throw new ArgumentOutOfRangeException(nameof(rightBorder), "Zero density region");
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Cumulative Density Function
        /// </summary>
        public override double Cdf(double x)
        {
            if (x < LeftBorder)
            {
                return(0);
            }
            else if (x >= RightBorder)
            {
                return(1);
            }

            return((Origin.Cdf(x) - m_CdfLeft) * m_Multiplicator);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Cumulative Density Function
        /// </summary>
        public override double Cdf(double x)
        {
            if (x < LeftBorder)
            {
                return(0);
            }
            else if (x >= RightBorder)
            {
                return(1);
            }

            return((Origin.Cdf(x) - m_CdfLeft) +
                   (x - LeftBorder) / (RightBorder - LeftBorder) * (m_CdfLeft + 1 - m_CdfRight));
        }