List of usage examples for org.apache.commons.math3.dfp Dfp multiply
public Dfp multiply(final int x)
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 w w. j a va 2 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
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 w w . ja va 2 s . co 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();//w w w .ja v a 2 s. c o m Dfp r2 = rho2.add(z.multiply(z)); 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); }
From source file:org.rhwlab.BHCnotused.Cluster.java
public Dfp DPMLikelihood() { Dfp first = pi.multiply(data.likelihood()); Dfp second = field.getZero();// w w w . j a v a 2s . c om if (left != null && right != null) { Dfp onePi = field.getOne().subtract(pi); second = onePi.multiply(left.dpm.multiply(right.dpm)); } Dfp ret = first.add(second); return ret; }
From source file:org.rhwlab.BHCnotused.GaussianGIWPrior.java
public void init() { int n = data.size(); int d = m.getDimension(); Dfp rP = r.add(n);//from w w w. ja va 2 s . com // System.out.printf("rP=%s\n",rP.toString()); double nuP = nu + n; // System.out.printf("nuP=%e\n", nuP); FieldMatrix C = new Array2DRowFieldMatrix(field, d, d); for (int row = 0; row < C.getRowDimension(); ++row) { for (int col = 0; col < C.getColumnDimension(); ++col) { C.setEntry(row, col, field.getZero()); } } FieldVector X = new ArrayFieldVector(field, d); // a vector of zeros for (FieldVector v : data) { X = X.add(v); FieldMatrix v2 = v.outerProduct(v); C = C.add(v2); } FieldVector mP = (m.mapMultiply(r).add(X)).mapDivide(r.add(n)); FieldMatrix Sp = C.add(S); FieldMatrix rmmP = mP.outerProduct(mP).scalarMultiply(rP); Sp = Sp.add(rmm).subtract(rmmP); FieldLUDecomposition ed = new FieldLUDecomposition(Sp); Dfp det = (Dfp) ed.getDeterminant(); Dfp detSp = det.pow(field.newDfp(nuP / 2.0)); Dfp gamma = field.getOne(); Dfp gammaP = field.getOne(); for (int i = 1; i <= d; ++i) { gamma = gamma.multiply(Gamma.gamma((nu + 1 - i) / 2.0)); gammaP = gammaP.multiply(Gamma.gamma((nuP + 1 - i) / 2.0)); } Dfp t1 = field.getPi().pow(-n * d / 2.0); Dfp t2 = r.divide(rP).pow(d / 2.0); Dfp t3 = detS.divide(detSp); Dfp t4 = gammaP.divide(gamma); Dfp t34 = t3.multiply(t4); /* System.out.printf("detSp=%s\n", detSp.toString()); System.out.printf("det=%s\n", det.toString()); System.out.printf("gamma=%s\n", gamma.toString()); System.out.printf("gammaP=%s\n", gammaP.toString()); System.out.printf("t1=%s\n", t1.toString()); System.out.printf("t2=%s\n", t2.toString()); System.out.printf("t3=%s\n", t3.toString()); System.out.printf("t4=%s\n", t4.toString()); */ likelihood = t2.multiply(t34).multiply(t1); double realLike = likelihood.getReal(); // System.out.printf("Likelihood=%e\n", realLike); int uhfd = 0; }