本文整理了Java中org.apache.commons.math3.special.Gamma.digamma()
方法的一些代码示例,展示了Gamma.digamma()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Gamma.digamma()
方法的具体详情如下:
包路径:org.apache.commons.math3.special.Gamma
类名称:Gamma
方法名:digamma
[英]Computes the digamma function of x.
This is an independently written implementation of the algorithm described in Jose Bernardo, Algorithm AS 103: Psi (Digamma) Function, Applied Statistics, 1976.
Some of the constants have been changed to increase accuracy at the moderate expense of run-time. The result should be accurate to within 10^-8 absolute tolerance for x >= 10^-5 and within 10^-8 relative tolerance for x > 0.
Performance for large negative values of x will be quite expensive (proportional to |x|). Accuracy for negative values of x should be about 10^-8 absolute for results less than 10^5 and 10^-8 relative for results larger than that.
[中]计算x的digamma函数。
这是Jose Bernardo《算法AS 103:Psi(Digamma)函数》中描述的算法的独立书面实现,应用统计学,1976年。
一些常数已被更改,以增加精度,但运行时的开销适中。对于x>=10^-5,结果应精确到10^-8绝对公差范围内,对于x>0,结果应精确到10^-8相对公差范围内。
大负值x的性能将非常昂贵(与| x |成比例)。对于小于10^5的结果,x负值的准确度应为10^-8绝对值,对于大于10^5的结果,准确度应为10^-8相对值。
代码示例来源:origin: org.apache.commons/commons-math3
return digamma(x + 1) - 1 / x;
代码示例来源:origin: geogebra/geogebra
final public static double psi(double x) {
return Gamma.digamma(x);
}
代码示例来源:origin: improbable-research/keanu
@Override
public DoubleTensor digammaInPlace() {
value = Gamma.digamma(value);
return this;
}
代码示例来源:origin: mast-group/tassal
/**
* Overloaded digamma function: returns 0 if argument is zero
*
* @param x
* @return digamma(x) if x nonzero, otherwise zero
*/
private double digamma(final double x) {
if (Math.abs(x) < 1e-15)
return 0.0;
else
return Gamma.digamma(x);
}
代码示例来源:origin: lenskit/lenskit
@Test
public void testDigammaShouldMatchCommonsMath() {
for (double d: toIterable(doubles(), 10000)) {
assertThat("digamma of " + d,
Scalars.digamma(d),
closeTo(Gamma.digamma(d), 1.0e-8));
}
for (double d: someDoubles(0, 2.0e-5)) {
assertThat("digamma of " + d,
Scalars.digamma(d),
closeTo(Gamma.digamma(d), 1.0e-8));
}
for (double d: someDoubles(-10, 0)) {
assertThat("digamma of " + d,
Scalars.digamma(d),
closeTo(Gamma.digamma(d), 1.0e-8));
}
for (double d: someDoubles(0, 10)) {
assertThat("digamma of " + d,
Scalars.digamma(d),
closeTo(Gamma.digamma(d), 1.0e-8));
}
}
}
代码示例来源:origin: org.apache.hivemall/hivemall-core
@Nonnull
public static float[] digamma(@Nonnull final float[] arr) {
final int k = arr.length;
final float[] ret = new float[k];
for (int i = 0; i < k; i++) {
ret[i] = (float) Gamma.digamma(arr[i]);
}
return ret;
}
代码示例来源:origin: org.apache.hivemall/hivemall-core
@Nonnull
public static double[] digamma(@Nonnull final double[] arr) {
final int k = arr.length;
final double[] ret = new double[k];
for (int i = 0; i < k; i++) {
ret[i] = Gamma.digamma(arr[i]);
}
return ret;
}
代码示例来源:origin: lenskit/lenskit
double lambdaShpIK = lambdaShp.getEntry(item, k);
double lambdaRteIK = lambdaRte.getEntry(item, k);
double phiUIK = Gamma.digamma(gammaShpUK) - Math.log(gammaRteUK) + Gamma.digamma(lambdaShpIK) - Math.log(lambdaRteIK);
phiUI.setEntry(k, phiUIK);
代码示例来源:origin: broadgsa/gatk-protected
public double[] effectiveMultinomialWeights() {
final double digammaOfSum = Gamma.digamma(MathUtils.sum(alpha));
return MathUtils.applyToArray(alpha, a -> Math.exp(Gamma.digamma(a) - digammaOfSum));
}
代码示例来源:origin: broadgsa/gatk-protected
public double[] effectiveLog10MultinomialWeights() {
final double digammaOfSum = Gamma.digamma(MathUtils.sum(alpha));
return MathUtils.applyToArray(alpha, a -> (Gamma.digamma(a) - digammaOfSum) * MathUtils.LOG10_OF_E);
}
代码示例来源:origin: org.apache.hivemall/hivemall-core
private void updatePhiPerDoc(@Nonnegative final int d,
@Nonnull final Map<String, float[]> eLogBeta_d) {
// Dirichlet expectation (2d) for gamma
final float[] gamma_d = _gamma[d];
final double digamma_gammaSum_d = Gamma.digamma(MathUtils.sum(gamma_d));
final double[] eLogTheta_d = new double[_K];
for (int k = 0; k < _K; k++) {
eLogTheta_d[k] = Gamma.digamma(gamma_d[k]) - digamma_gammaSum_d;
}
// updating phi w/ normalization
final Map<String, float[]> phi_d = _phi.get(d);
final Map<String, Float> doc = _miniBatchDocs.get(d);
for (String label : doc.keySet()) {
final float[] phi_label = phi_d.get(label);
final float[] eLogBeta_label = eLogBeta_d.get(label);
double normalizer = 0.d;
for (int k = 0; k < _K; k++) {
float phiVal = (float) Math.exp(eLogBeta_label[k] + eLogTheta_d[k]) + 1E-20f;
phi_label[k] = phiVal;
normalizer += phiVal;
}
for (int k = 0; k < _K; k++) {
phi_label[k] /= normalizer;
}
}
}
代码示例来源:origin: improbable-research/keanu
public static Diff dlnPdf(double alpha, double beta, double x) {
double dPdx = ((alpha - 1) / x) - ((beta - 1) / (1 - x));
double dPda = digamma(alpha + beta) - digamma(alpha) + Math.log(x);
double dPdb = digamma(alpha + beta) - digamma(beta) + Math.log(1 - x);
return new Diff(dPda, dPdb, dPdx);
}
代码示例来源:origin: apache/opennlp-sandbox
prob+=mult1*mult*Gamma.digamma(n+1)/Gamma.digamma(k+1)/Gamma.digamma(n-k+1);
代码示例来源:origin: net.rapture/Reflex
public ReflexValue digamma(List<ReflexValue> params) {
if (params.size() != 1) {
throw new ReflexException(-1, "digamma needs one number parameter");
}
if (!params.get(0).isNumber()) {
throw new ReflexException(-1, "digamma needs one number parameter");
}
double value = params.get(0).asDouble();
return new ReflexValue(Gamma.digamma(value));
}
代码示例来源:origin: improbable-research/keanu
@Test
public void calculatesDerivativeOfMatrixElementWiseLogGamma() {
calculatesDerivativeOfMatrixElementWiseOperator(
new double[]{0.1, 0.2, 0.3, 0.4},
toDiagonalArray(new double[]{digamma(0.1), digamma(0.2), digamma(0.3), digamma(0.4)}),
DoubleVertex::logGamma
);
}
代码示例来源:origin: improbable-research/keanu
public static Diff dlnPdf(double a, double b, double x) {
double dPda = -digamma(a) + Math.log(b) - Math.log(x);
double dPdb = (a / b) - (1 / x);
double dPdx = (b - (a + 1) * x) / Math.pow(x, 2);
return new Diff(dPda, dPdb, dPdx);
}
代码示例来源:origin: improbable-research/keanu
public static Diff dlnPdf(double theta, double k, double x) {
double dPdx = (k - 1) / x - (1 / theta);
double dPdtheta = -(theta * k - x) / Math.pow(theta, 2);
double dPdk = Math.log(x) - Math.log(theta) - digamma(k);
return new Diff(dPdtheta, dPdk, dPdx);
}
代码示例来源:origin: geogebra/geogebra
/**
* @param order
* polynomial order
* @param x
* real number
* @return polyGamma_order(x)
*/
final public static double polyGamma(NumberValue order, double x) {
int o = (int) order.getDouble();
switch (o) {
case 0:
return Gamma.digamma(x);
case 1:
return Gamma.trigamma(x);
// case 2:
// return PolyGamma.tetragamma(x);
// case 3:
// return PolyGamma.pentagamma(x);
// default:
// return PolyGamma.psigamma(x, o);
default:
return Double.NaN;
}
}
代码示例来源:origin: improbable-research/keanu
@Test
public void calculatesDerivativeOScalarLogGamma() {
calculatesDerivativeOfScalar(
0.5,
digamma(0.5),
DoubleVertex::logGamma
);
}
代码示例来源:origin: improbable-research/keanu
@Override
public Diffs dLogProb(DoubleTensor x) {
final DoubleTensor dLogPdc = x.log()
.minusInPlace(concentration.digamma())
.plusInPlace(org.apache.commons.math3.special.Gamma.digamma(concentration.sum()));
final DoubleTensor dLogPdx = concentration.minus(1).divInPlace(x);
return new Diffs()
.put(C, dLogPdc)
.put(X, dLogPdx);
}
内容来源于网络,如有侵权,请联系作者删除!