You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2021/12/24 15:10:21 UTC
[commons-statistics] 02/04: Sample Nakagami using a related gamma distribution
This is an automated email from the ASF dual-hosted git repository.
aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-statistics.git
commit 563ec02e424f7d856683999b6df3096515555560
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Fri Dec 24 14:29:14 2021 +0000
Sample Nakagami using a related gamma distribution
---
.../statistics/distribution/NakagamiDistribution.java | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
index 77f9b66..3bde611 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
@@ -20,6 +20,9 @@ import org.apache.commons.numbers.gamma.Gamma;
import org.apache.commons.numbers.gamma.GammaRatio;
import org.apache.commons.numbers.gamma.LogGamma;
import org.apache.commons.numbers.gamma.RegularizedGamma;
+import org.apache.commons.rng.UniformRandomProvider;
+import org.apache.commons.rng.sampling.distribution.AhrensDieterMarsagliaTsangGammaSampler;
+import org.apache.commons.rng.sampling.distribution.SharedStateContinuousSampler;
/**
* Implementation of the Nakagami distribution.
@@ -189,4 +192,15 @@ public final class NakagamiDistribution extends AbstractContinuousDistribution {
public double getSupportUpperBound() {
return SUPPORT_HI;
}
+
+ @Override
+ public Sampler createSampler(UniformRandomProvider rng) {
+ // Generate using a related Gamma distribution
+ // See https://en.wikipedia.org/wiki/Nakagami_distribution#Generation
+ final double shape = mu;
+ final double scale = omega / mu;
+ final SharedStateContinuousSampler sampler =
+ AhrensDieterMarsagliaTsangGammaSampler.of(rng, shape, scale);
+ return () -> Math.sqrt(sampler.sample());
+ }
}