Example usage for org.apache.commons.math3.dfp DfpField newDfp

List of usage examples for org.apache.commons.math3.dfp DfpField newDfp

Introduction

In this page you can find the example usage for org.apache.commons.math3.dfp DfpField newDfp.

Prototype

public Dfp newDfp(final String s) 

Source Link

Document

Create a Dfp given a String representation.

Usage

From source file:org.orekit.forces.gravity.AssociatedLegendreFunction.java

private Dfp[] getLegendrePolynomial(int n, DfpField dfpField) {

    // get (or create) the list of polynomials for the specified field
    List<Dfp[]> list = LEGENDRE_POLYNOMIALS.get(dfpField.getRadixDigits());
    if (list == null) {
        list = new ArrayList<Dfp[]>();
        list.add(new Dfp[] { dfpField.getOne() // P0(X) = 1
        });//w ww  . j a v a2 s.  c o m
        list.add(new Dfp[] { dfpField.getZero(), dfpField.getOne() // P1(X) = 0 + 1 * X
        });
    }

    while (list.size() <= n) {

        // build polynomial Pk+1 using recursion formula
        // (k+1) P<sub>k+1</sub>(X) = (2k+1) X P<sub>k</sub>(X) - k P<sub>k-1</sub>(X)
        int k = list.size() - 1;
        Dfp kDfp = dfpField.newDfp(k);
        Dfp kP1Dfp = kDfp.add(dfpField.getOne());
        Dfp ckDfp = kP1Dfp.add(kDfp).divide(kP1Dfp);
        Dfp[] pk = list.get(k);
        Dfp ckM1Dfp = kDfp.divide(kP1Dfp).negate();
        Dfp[] pkM1 = list.get(k - 1);

        Dfp[] pkP1 = new Dfp[k + 2];
        pkP1[0] = ckM1Dfp.multiply(pkM1[0]);
        for (int i = 0; i < k; ++i) {
            if ((k - i) % 2 == 1) {
                pkP1[i + 1] = dfpField.getZero();
            } else {
                pkP1[i + 1] = ckDfp.multiply(pk[i]).add(ckM1Dfp.multiply(pkM1[i + 1]));
            }
        }
        pkP1[k + 1] = ckDfp.multiply(pk[k]);

        list.add(pkP1);

    }

    // retrieve degree n polynomial
    return list.get(n);

}

From source file:org.orekit.forces.gravity.AssociatedLegendreFunction.java

private Dfp[] differentiateLegendrePolynomial(Dfp[] p, int m, DfpField dfpField) {
    Dfp[] dp = new Dfp[p.length - m];
    for (int i = 0; i < dp.length; ++i) {
        dp[i] = p[i + m];/*from www  .jav  a  2s .c  o  m*/
        for (int j = m; j > 0; --j) {
            dp[i] = dp[i].multiply(dfpField.newDfp(i + j));
        }
    }
    return dp;
}

From source file:org.orekit.forces.gravity.AssociatedLegendreFunction.java

public AssociatedLegendreFunction(boolean normalized, int n, int m, DfpField dfpField) {

    this.m = m;/*w  ww.  jav a  2s  .  c o m*/

    // store mth derivative of the degree n Legendre polynomial
    polynomial = differentiateLegendrePolynomial(getLegendrePolynomial(n, dfpField), m, dfpField);

    if (normalized) {
        // compute normalization coefficient
        Dfp c = dfpField.newDfp(((m == 0) ? 1.0 : 2.0) * (2 * n + 1));
        for (int k = 0; k < m; ++k) {
            c = c.divide(dfpField.newDfp((n + 1 + k) * (n - k)));
        }
        this.normalization = c.sqrt();
    } else {
        this.normalization = dfpField.getOne();
    }

}

From source file:org.rhwlab.BHC.GammaTest.java

static public void main(String[] args) {
    int n = 1000;
    DfpField field = new DfpField(20);
    for (int i = 0; i < n; ++i) {
        Dfp G = field.newDfp(Gamma.logGamma(i)).exp();
        System.out.printf("%d: %e %e %s\n", i, Gamma.gamma(i), Gamma.logGamma(i), G.toString());
    }//from  w w w. j av  a2s  .  c  o m
}