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