List of usage examples for org.apache.commons.math3.dfp Dfp sqrt
public Dfp sqrt()
From source file:org.orekit.forces.gravity.AssociatedLegendreFunction.java
public AssociatedLegendreFunction(boolean normalized, int n, int m, DfpField dfpField) { this.m = m;//from w ww .ja v a 2 s .co 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.orekit.forces.gravity.AssociatedLegendreFunction.java
public Dfp value(Dfp t) { Dfp y1 = polynomial[polynomial.length - 1]; for (int j = polynomial.length - 2; j >= 0; j--) { y1 = y1.multiply(t).add(polynomial[j]); }/*from w ww . j a va 2 s .c o m*/ Dfp oneMinusT2 = t.getField().getOne().subtract(t.multiply(t)); Dfp y2 = t.getField().getOne(); for (int j = 0; j < m; ++j) { y2 = y2.multiply(oneMinusT2); } y2 = y2.sqrt(); return y1.multiply(y2).multiply(normalization); }
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(); Dfp r2 = rho2.add(z.multiply(z));/*from w w w . ja va 2 s . c o m*/ 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); }