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

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

Introduction

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

Prototype

public Dfp getZero() 

Source Link

Document

Get the constant 0.

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   ww w  .  ja va 2s.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);

}