Пример #1
0
        private static void CDFMethodForPositiveX(double x, double alpha, ref object tempStorage, double precision, out double integFromXZero, out double integFromXInfinity)
        {
            const double offs = 0.5;

            if (alpha < 1)
            {
                GetAlt1GnParameter(x, alpha, out var factorp, out var facdiv, out var dev, out var logPdfPrefactor);
                var inc = new Alt1GnI(factorp, facdiv, logPdfPrefactor, alpha, dev);
                if (inc.IsMaximumLeftHandSide())
                {
                    integFromXZero     = inc.CDFIntegrate(ref tempStorage, precision) / Math.PI;
                    integFromXInfinity = offs - integFromXZero;
                }
                else
                {
                    integFromXInfinity = new Alt1GnD(factorp, facdiv, logPdfPrefactor, alpha, dev).CDFIntegrate(ref tempStorage, precision) / Math.PI;
                    integFromXZero     = offs - integFromXInfinity;
                }
            }
            else if (alpha == 1)
            {
                if (x <= 1)
                {
                    integFromXZero     = Math.Atan(x) / Math.PI;
                    integFromXInfinity = offs - integFromXZero;
                }
                else
                {
                    integFromXInfinity = Math.Atan(1 / x) / Math.PI;
                    integFromXZero     = offs - integFromXInfinity;
                }
            }
            else // if(alpha>1)
            {
                GetAgt1GnParameter(x, alpha, out var factorp, out var factorw, out var dev, out var logPdfPrefactor);
                var inc = new Agt1GnI(factorp, factorw, logPdfPrefactor, alpha, dev);
                if (inc.IsMaximumLeftHandSide())
                {
                    integFromXInfinity = inc.CDFIntegrate(ref tempStorage, precision) / Math.PI;
                    integFromXZero     = offs - integFromXInfinity;
                }
                else
                {
                    integFromXZero     = new Agt1GnD(factorp, factorw, logPdfPrefactor, alpha, dev).CDFIntegrate(ref tempStorage, precision) / Math.PI;
                    integFromXInfinity = offs - integFromXZero;
                }
            }
        }
Пример #2
0
		private static double CDFIntegralForPositiveXAgt1(double x, double alpha, double gamma, double aga, ref object temp, double precision)
		{
			double factorp, factorw, dev, logPdfPrefactor;
			GetAgt1GnParameterByGamma(x, alpha, gamma, aga, out factorp, out factorw, out dev, out logPdfPrefactor);
			Agt1GnI a = new Agt1GnI(factorp, factorw, logPdfPrefactor, alpha, dev);
			return a.CDFIntegrate(ref temp, precision);
		}
Пример #3
0
		private static void CDFMethodForPositiveX(double x, double alpha, ref object tempStorage, double precision, out double integFromXZero, out double integFromXInfinity)
		{
			const double offs = 0.5;

			if (alpha < 1)
			{
				double factorp, facdiv, dev, logPdfPrefactor;
				GetAlt1GnParameter(x, alpha, out factorp, out facdiv, out dev, out logPdfPrefactor);
				Alt1GnI inc = new Alt1GnI(factorp, facdiv, logPdfPrefactor, alpha, dev);
				if (inc.IsMaximumLeftHandSide())
				{
					integFromXZero = inc.CDFIntegrate(ref tempStorage, precision) / Math.PI;
					integFromXInfinity = offs - integFromXZero;
				}
				else
				{
					integFromXInfinity = new Alt1GnD(factorp, facdiv, logPdfPrefactor, alpha, dev).CDFIntegrate(ref tempStorage, precision) / Math.PI;
					integFromXZero = offs - integFromXInfinity;
				}
			}
			else if (alpha == 1)
			{
				if (x <= 1)
				{
					integFromXZero = Math.Atan(x) / Math.PI;
					integFromXInfinity = offs - integFromXZero;
				}
				else
				{
					integFromXInfinity = Math.Atan(1 / x) / Math.PI;
					integFromXZero = offs - integFromXInfinity;
				}
			}
			else // if(alpha>1)
			{
				double factorp, factorw, dev, logPdfPrefactor;
				GetAgt1GnParameter(x, alpha, out factorp, out factorw, out dev, out logPdfPrefactor);
				Agt1GnI inc = new Agt1GnI(factorp, factorw, logPdfPrefactor, alpha, dev);
				if (inc.IsMaximumLeftHandSide())
				{
					integFromXInfinity = inc.CDFIntegrate(ref tempStorage, precision) / Math.PI;
					integFromXZero = offs - integFromXInfinity;
				}
				else
				{
					integFromXZero = new Agt1GnD(factorp, factorw, logPdfPrefactor, alpha, dev).CDFIntegrate(ref tempStorage, precision) / Math.PI;
					integFromXInfinity = offs - integFromXZero;
				}
			}
		}