public class LogisticDistribution : ContinuousDistribution
{
private double scale;
private double location;
public double LocationParameter => this.location;
public double ScaleParameter => this.scale;
public override double Mean => this.location;
public override double Variance => this.scale * this.scale * 9.869604401089358 / 3.0;
public override double Skewness => 0.0;
public override double Kurtosis => 1.2;
public override bool IsSymmetrical => true;
private void Initialize(double location, double scale)
{
this.location = location;
this.scale = scale;
}
private static double GetRandomVariateInternal(System.Random random)
{
double num;
do
{
num = random.NextDouble();
}
while (num == 1.0);
return Math.Log(num / (1.0 - num));
}
public static double GetRandomVariate(System.Random random, double location, double scale)
{
if (random == null)
{
ThrowException.ArgumentNull("random");
}
if (scale <= 0.0)
{
ThrowException.ArgumentOutOfRange("scale");
}
return location + scale * LogisticDistribution.GetRandomVariateInternal(random);
}
public LogisticDistribution(double location, double scale)
{
if (scale <= 0.0)
{
ThrowException.ArgumentOutOfRange("scale");
}
this.Initialize(location, scale);
}
public override double DistributionFunction(double x)
{
x -= this.location;
return 1.0 / (1.0 + Math.Exp((0.0 - x) / this.scale));
}
public override double ProbabilityDensityFunction(double x)
{
x -= this.location;
double num;
num = Math.Exp((0.0 - x) / this.scale);
return num / (this.scale * (1.0 + num) * (1.0 + num));
}
public override double InverseDistributionFunction(double probability)
{
if (probability < 0.0 || probability > 1.0)
{
ThrowException.ArgumentOutOfRange("probability");
}
if (probability == 0.0)
{
return double.NegativeInfinity;
}
if (probability == 1.0)
{
return double.PositiveInfinity;
}
return this.location + this.scale * Math.Log(probability / (1.0 - probability));
}
public override double GetRandomVariate(System.Random random)
{
if (random == null)
{
ThrowException.ArgumentNull("random");
}
return this.location + this.scale * LogisticDistribution.GetRandomVariateInternal(random);
}
}
如果对您有帮忙,非常感谢您支持一下创造者的付出!
感谢支持技术分享,请扫码点赞支持:
技术合作交流qq:2401315930