Exemplo n.º 1
0
        public static ContinuousDistribution ConvolutionOfUniformAndUniform(ContinuousDistribution pdfX, ContinuousDistribution pdfY)
        {
            var unif1 = (UniformContinuousDistribution)pdfX.BaseDistribution;
            var unif2 = (UniformContinuousDistribution)pdfY.BaseDistribution;

            double a1 = (unif1.Support.Min * pdfX.Coefficient) + pdfX.Offset;
            double b1 = (unif1.Support.Max * pdfX.Coefficient) + pdfX.Offset;

            if (a1 > b1)
            {
                double t = a1;
                a1 = b1;
                b1 = t;
            }

            double a2 = (unif2.Support.Min * pdfY.Coefficient) + pdfY.Offset;
            double b2 = (unif2.Support.Max * pdfY.Coefficient) + pdfY.Offset;

            if (a2 > b2)
            {
                double t = a2;
                a2 = b2;
                b2 = t;
            }

            double a = a1 + a2;
            double b = b1 + b2;

            double l1 = Math.Abs((b1 - a1) - (b2 - a2)) / 2d;
            double l2 = (b - a) / 2d;

            return(new ContinuousDistribution(new IsoscelesTrapezoidalDistribution(a, b, l2 - l1), pdfX.Samples));
        }
        public BivariateTDistribution(double mean1, double mean2, double sigma1, double sigma2, double rho, double degreesOfFreedom, int samples)
            : base(mean1, mean2, sigma1, sigma2, rho, samples)
        {
            if (degreesOfFreedom < 1)
            {
                throw new DistributionsArgumentException(DistributionsArgumentExceptionType.DegreesOfFreedomMustNotBeLessThenOne);
            }

            DegressOfFreedom = degreesOfFreedom;

            ContinuousDistribution left  = new ContinuousDistribution(new StudentGeneralizedDistribution(mean1, sigma1, degreesOfFreedom), samples);
            ContinuousDistribution right = new ContinuousDistribution(new StudentGeneralizedDistribution(mean2, sigma2, degreesOfFreedom), samples);

            supportMinLeft  = left.MinX;
            supportMaxLeft  = left.MaxX;
            supportMinRight = right.MinX;
            supportMaxRight = right.MaxX;

            k = 1d / (2d * Math.PI * sigma1 * sigma2 * Math.Sqrt(1 - Math.Pow(rho, 2)));
            d = degreesOfFreedom * (1d - Math.Pow(rho, 2));
            p = -(degreesOfFreedom + 2d) / 2d;

            vInv1    = 1d / Variance1;
            vInv2    = 1d / Variance2;
            sProdInv = 1d / (Sigma1 * Sigma2);
        }
        private static PrivateCoordinates DiscretizeContinious(ContinuousDistribution continiousDistribution, int samples)
        {
            if (samples < 2)
            {
                throw new DistributionsArgumentException(DistributionsArgumentExceptionType.SamplesNumberMustBeGreaterThenTwo);
            }

            if (continiousDistribution == null)
            {
                throw new ArgumentNullException(nameof(continiousDistribution));
            }

            double[] xAxis = CommonRandomMath.GenerateXAxis(continiousDistribution.InnerMinX, continiousDistribution.InnerMaxX, samples, out _);

            double[] pdf = new double[samples];

            for (int i = 0; i < samples; i++)
            {
                double x = xAxis[i];
                pdf[i] = continiousDistribution.InnerGetPDFYbyX(x);
            }

            return(new PrivateCoordinates {
                XCoordinates = xAxis, PDFCoordinates = pdf, FromContinuous = true
            });
        }
Exemplo n.º 4
0
        public static ContinuousDistribution ConvolutionOfStudentAndUniform(ContinuousDistribution pdfX, ContinuousDistribution pdfY)
        {
            var student = (StudentGeneralizedDistribution)pdfX.BaseDistribution;
            var unif    = (UniformContinuousDistribution)pdfY.BaseDistribution;

            double a = (unif.Support.Min * pdfY.Coefficient) + pdfY.Offset;
            double b = (unif.Support.Max * pdfY.Coefficient) + pdfY.Offset;
            var    s = Math.Abs(student.ScaleCoefficient * pdfX.Coefficient);
            var    m = (student.Mean * pdfX.Coefficient) + pdfX.Offset;

            return(new ContinuousDistribution(new StudentUniformDistribution(a, b, m, s, student.DegreesOfFreedom), pdfX.Samples));
        }
Exemplo n.º 5
0
        public static ContinuousDistribution ConvolutionOfNormalAndUniform(ContinuousDistribution pdfX, ContinuousDistribution pdfY)
        {
            var norm = (NormalDistribution)pdfX.BaseDistribution;
            var unif = (UniformContinuousDistribution)pdfY.BaseDistribution;

            double a = (unif.Support.Min * pdfY.Coefficient) + pdfY.Offset;
            double b = (unif.Support.Max * pdfY.Coefficient) + pdfY.Offset;
            var    s = Math.Abs(norm.StandardDeviation * pdfX.Coefficient);
            var    m = (norm.Mean * pdfX.Coefficient) + pdfX.Offset;

            return(new ContinuousDistribution(new BhattacharjeeDistribution(a, b, m, s), pdfX.Samples));
        }
Exemplo n.º 6
0
        public static ContinuousDistribution ConvolutionOfNormalAndNormal(ContinuousDistribution pdfX, ContinuousDistribution pdfY)
        {
            var norm1 = (NormalDistribution)pdfX.BaseDistribution;
            var norm2 = (NormalDistribution)pdfY.BaseDistribution;

            var v1 = norm1.Variance * Math.Pow(pdfX.Coefficient, 2);
            var m1 = (norm1.Mean * pdfX.Coefficient) + pdfX.Offset;
            var v2 = norm2.Variance * Math.Pow(pdfY.Coefficient, 2);
            var m2 = (norm2.Mean * pdfY.Coefficient) + pdfY.Offset;

            var newDistribution = new ContinuousDistribution(new NormalDistribution(m1 + m2, Math.Sqrt(v1 + v2)), pdfX.Samples);

            return(newDistribution);
        }
        public BivariateNormalDistribution(double mean1, double mean2, double sigma1, double sigma2, double rho, int samples)
            : base(mean1, mean2, sigma1, sigma2, rho, samples)
        {
            ContinuousDistribution left  = new ContinuousDistribution(new NormalDistribution(Mean1, Sigma1), samples);
            ContinuousDistribution right = new ContinuousDistribution(new NormalDistribution(Mean2, Sigma2), samples);

            supportMinLeft  = left.MinX;
            supportMaxLeft  = left.MaxX;
            supportMinRight = right.MinX;
            supportMaxRight = right.MaxX;

            k = 1d / (2d * Math.PI * sigma1 * sigma2 * Math.Sqrt(1 - Math.Pow(rho, 2)));
            e = -1d / (2d * (1 - Math.Pow(rho, 2)));

            vInv1    = 1d / Variance1;
            vInv2    = 1d / Variance2;
            sProdInv = 1d / (Sigma1 * Sigma2);
        }
Exemplo n.º 8
0
        public static ContinuousDistribution ConvolutionOfNormalAndBhattacharjee(ContinuousDistribution pdfX, ContinuousDistribution pdfY)
        {
            var norm = (NormalDistribution)pdfX.BaseDistribution;
            var bhat = (BhattacharjeeDistribution)pdfY.BaseDistribution;

            var v1 = norm.Variance * Math.Pow(pdfX.Coefficient, 2);
            var m1 = (norm.Mean * pdfX.Coefficient) + pdfX.Offset;
            var v2 = Math.Pow(bhat.NormalSigma * pdfY.Coefficient, 2);
            var m2 = (bhat.NormalMean * pdfY.Coefficient) + pdfY.Offset;

            var a = bhat.UniformMin * pdfY.Coefficient;
            var b = bhat.UniformMax * pdfY.Coefficient;

            var s = Math.Sqrt(v1 + v2);
            var m = m1 + m2;

            return(new ContinuousDistribution(new BhattacharjeeDistribution(a, b, m, s), pdfX.Samples));
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="DiscreteDistribution"/> class
 /// by <paramref name="continiousDistribution"/> by sampling with <paramref name="samples"/> count.
 /// </summary>
 /// <param name="continiousDistribution">Sampled <see cref="ContinuousDistribution"/>.</param>
 /// <param name="samples">Samples count.</param>
 public DiscreteDistribution(ContinuousDistribution continiousDistribution, int samples)
     : this(DiscretizeContinious(continiousDistribution, samples))
 {
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="DiscreteDistribution"/> class
 /// by <paramref name="continiousDistribution"/> by sampling.
 /// </summary>
 /// <param name="continiousDistribution">Sampled <see cref="ContinuousDistribution"/>.</param>
 public DiscreteDistribution(ContinuousDistribution continiousDistribution)
     : this(continiousDistribution, continiousDistribution.InnerSamples)
 {
 }
Exemplo n.º 11
0
 public static ContinuousDistribution Negate(ContinuousDistribution value)
 {
     return(Multiply(value, -1));
 }
Exemplo n.º 12
0
 public static ContinuousDistribution Divide(ContinuousDistribution pdf, double value)
 {
     return(new ContinuousDistribution(pdf.BaseDistribution, pdf.Samples, pdf.Coefficient / value, pdf.Offset / value));
 }
Exemplo n.º 13
0
 public static ContinuousDistribution Sub(double value, ContinuousDistribution pdf)
 {
     return(new ContinuousDistribution(pdf.BaseDistribution, pdf.Samples, -pdf.Coefficient, pdf.Offset + value));
 }