List of usage examples for org.apache.commons.math3.dfp DfpField getOne
public Dfp getOne()
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 a v a 2 s . com*/ 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
public AssociatedLegendreFunction(boolean normalized, int n, int m, DfpField dfpField) { this.m = m;//w ww . j a va 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(); } }