List of usage examples for org.apache.commons.math3.dfp DfpField getZero
public Dfp getZero()
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); }