Example usage for org.apache.commons.math3.dfp Dfp add

List of usage examples for org.apache.commons.math3.dfp Dfp add

Introduction

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

Prototype

public Dfp add(final Dfp x) 

Source Link

Document

Add x to this.

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
        });/*from   w  w w.  j  av 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.ReferenceFieldModel.java

public Dfp nonCentralPart(final AbsoluteDate date, final Vector3D position) throws OrekitException {

    int degree = provider.getMaxDegree();
    int order = provider.getMaxOrder();
    //use coefficients without caring if they are the correct type
    final RawSphericalHarmonics harmonics = raw(provider).onDate(date);

    Dfp x = dfpField.newDfp(position.getX());
    Dfp y = dfpField.newDfp(position.getY());
    Dfp z = dfpField.newDfp(position.getZ());

    Dfp rho2 = x.multiply(x).add(y.multiply(y));
    Dfp rho = rho2.sqrt();//from www .j  a v a 2 s.  c  o  m
    Dfp r2 = rho2.add(z.multiply(z));
    Dfp r = r2.sqrt();
    Dfp aOr = dfpField.newDfp(provider.getAe()).divide(r);
    Dfp lambda = position.getX() > 0 ? dfpField.getTwo().multiply(DfpMath.atan(y.divide(rho.add(x))))
            : dfpField.getPi().subtract(dfpField.getTwo().multiply(DfpMath.atan(y.divide(rho.subtract(x)))));
    Dfp cosTheta = z.divide(r);

    Dfp value = dfpField.getZero();
    Dfp aOrN = aOr;
    for (int n = 2; n <= degree; ++n) {
        Dfp sum = dfpField.getZero();
        for (int m = 0; m <= FastMath.min(n, order); ++m) {
            double cnm = harmonics.getRawCnm(n, m);
            double snm = harmonics.getRawSnm(n, m);
            Dfp mLambda = lambda.multiply(m);
            Dfp c = DfpMath.cos(mLambda).multiply(dfpField.newDfp(cnm));
            Dfp s = DfpMath.sin(mLambda).multiply(dfpField.newDfp(snm));
            Dfp pnm = alf[n][m].value(cosTheta);
            sum = sum.add(pnm.multiply(c.add(s)));
        }
        aOrN = aOrN.multiply(aOr);
        value = value.add(aOrN.multiply(sum));
    }

    return value.multiply(dfpField.newDfp(provider.getMu())).divide(r);

}

From source file:org.rhwlab.BHCnotused.Cluster.java

public Cluster(Cluster lef, Cluster rig) {
    data = lef.data.mergeWith(rig.data);
    Dfp G = field.newDfp(Gamma.logGamma(data.getN())).exp();
    d = alpha.multiply(G.add(lef.d.multiply(rig.d)));
    pi = alpha.multiply(G.divide(d));//from   w ww . j a  v a2 s .co  m

    this.left = lef;
    this.right = rig;
    dpm = this.DPMLikelihood();
    posterior();

    int iodrti = 0;
}

From source file:org.rhwlab.BHCnotused.Cluster.java

public Dfp DPMLikelihood() {
    Dfp first = pi.multiply(data.likelihood());
    Dfp second = field.getZero();//  w  w w. ja  va2  s  .  com
    if (left != null && right != null) {
        Dfp onePi = field.getOne().subtract(pi);
        second = onePi.multiply(left.dpm.multiply(right.dpm));
    }
    Dfp ret = first.add(second);
    return ret;
}