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