Skip to content

Commit

Permalink
add gradient to Cauchy distribution
Browse files Browse the repository at this point in the history
  • Loading branch information
msuchard committed Oct 4, 2024
1 parent b29f226 commit 7419354
Showing 1 changed file with 15 additions and 24 deletions.
39 changes: 15 additions & 24 deletions src/dr/inference/distribution/CauchyDistribution.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,15 @@

package dr.inference.distribution;



import dr.inference.model.GradientProvider;
import dr.math.UnivariateFunction;
import dr.math.distributions.Distribution;
import org.apache.commons.math.MathException;
import org.apache.commons.math.distribution.AbstractContinuousDistribution;
import org.apache.commons.math.distribution.CauchyDistributionImpl;

public class CauchyDistribution extends AbstractContinuousDistribution implements Distribution {
CauchyDistributionImpl distribution;
double median;
double scale;
public class CauchyDistribution implements Distribution, GradientProvider {
private final CauchyDistributionImpl distribution;
private final double median;
private final double scale;

public CauchyDistribution(double median, double scale){
distribution = new CauchyDistributionImpl(median, scale);
Expand Down Expand Up @@ -83,36 +80,30 @@ public final UnivariateFunction getProbabilityDensityFunction() {
}

private final UnivariateFunction pdfFunction = new UnivariateFunction() {
public final double evaluate(double x) {
public double evaluate(double x) {
return pdf(x);
}

public final double getLowerBound() {
public double getLowerBound() {
return Double.NEGATIVE_INFINITY;
}

public final double getUpperBound() {
public double getUpperBound() {
return Double.POSITIVE_INFINITY;
}
};

@Override
protected double getInitialDomain(double v) {
return Double.POSITIVE_INFINITY;
public int getDimension() {
return 1;
}

@Override
protected double getDomainLowerBound(double v) {
return Double.NEGATIVE_INFINITY;
}
public double[] getGradientLogDensity(Object input) {
double x = (double) input;

@Override
protected double getDomainUpperBound(double v) {
return Double.POSITIVE_INFINITY;
}

@Override
public double cumulativeProbability(double v) throws MathException {
return 0;
double dev = x - median;
double dx = 2 * dev / (dev * dev + scale * scale);
return new double[] { dx };
}
}

0 comments on commit 7419354

Please sign in to comment.