Browse Source

Distributions: test for Weibull.Estimate #339

pull/339/merge
Christoph Ruegg 11 years ago
parent
commit
fc187af5a2
  1. 6
      src/Numerics/Distributions/Weibull.cs
  2. 17
      src/UnitTests/DistributionTests/Continuous/WeibullTests.cs

6
src/Numerics/Distributions/Weibull.cs

@ -429,7 +429,7 @@ namespace MathNet.Numerics.Distributions
public static Weibull Estimate(IEnumerable<double> samples, System.Random randomSource = null)
{
var samp = samples as double[] ?? samples.ToArray();
double n = samp.Count(), s1 = 0, s2 = 0, s3 = 0, previousC = Int32.MinValue, QofC = 0;
double n = samp.Length, s1 = 0, s2 = 0, s3 = 0, previousC = Int32.MinValue, QofC = 0;
if (n <= 1) throw new Exception("Observations not sufficient");
@ -455,8 +455,12 @@ namespace MathNet.Numerics.Distributions
}
foreach (double x in samp)
{
if (x > 0)
{
b += Math.Pow(x, c);
}
}
b = Math.Pow(b / n, 1 / c);

17
src/UnitTests/DistributionTests/Continuous/WeibullTests.cs

@ -336,5 +336,22 @@ namespace MathNet.Numerics.UnitTests.DistributionTests.Continuous
var n = new Weibull(shape, scale);
AssertHelpers.AlmostEqualRelative(cdf, n.CumulativeDistribution(x), 14);
}
/// <summary>
/// Can estimate distribution parameters.
/// </summary>
[TestCase(1.0, 0.1)]
[TestCase(1.0, 1.0)]
[TestCase(10.0, 1.0)]
[TestCase(10.0, 10.0)]
[TestCase(10.0, 50.0)]
public void CanEstimateParameters(double shape, double scale)
{
var original = new Weibull(shape, scale, new Random(100));
var estimated = Weibull.Estimate(original.Samples().Take(10000));
AssertHelpers.AlmostEqualRelative(shape, estimated.Shape, 1);
AssertHelpers.AlmostEqualRelative(scale, estimated.Scale, 1);
}
}
}

Loading…
Cancel
Save