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 }); }
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)); }
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)); }
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); }
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) { }
public static ContinuousDistribution Negate(ContinuousDistribution value) { return(Multiply(value, -1)); }
public static ContinuousDistribution Divide(ContinuousDistribution pdf, double value) { return(new ContinuousDistribution(pdf.BaseDistribution, pdf.Samples, pdf.Coefficient / value, pdf.Offset / value)); }
public static ContinuousDistribution Sub(double value, ContinuousDistribution pdf) { return(new ContinuousDistribution(pdf.BaseDistribution, pdf.Samples, -pdf.Coefficient, pdf.Offset + value)); }