List of usage examples for org.apache.commons.math3.analysis.differentiation DerivativeStructure add
public DerivativeStructure add(final DerivativeStructure a) throws DimensionMismatchException
From source file:de.tuberlin.uebb.jbop.example.DSExampleOrig.java
@Test public DerivativeStructure run() { x = new DerivativeStructure(3, 3, 0, x0); y = new DerivativeStructure(3, 3, 1, y0); z = new DerivativeStructure(3, 3, 2, z0); // ax//from ww w.ja va 2 s.c om final DerivativeStructure ax2 = x.pow(2).multiply(a);// // ay final DerivativeStructure ay2 = y.pow(2).multiply(a);// // az final DerivativeStructure az2 = z.pow(2).multiply(a);// // + bx final DerivativeStructure bx = x.multiply(b); // + by final DerivativeStructure by = y.multiply(b); // + bz final DerivativeStructure bz = z.multiply(b); final DerivativeStructure multiply = ax2.multiply(ay2).multiply(az2); final DerivativeStructure multiply2 = bx.multiply(by).multiply(bz); return multiply.add(multiply2).add(c); }
From source file:org.orekit.bodies.OneAxisEllipsoid.java
/** Transform a surface-relative point to a Cartesian point. * @param point surface-relative point, using time as the single derivation parameter * @return point at the same location but as a Cartesian point including derivatives *//*from www. j ava2s .c o m*/ public PVCoordinates transform(final FieldGeodeticPoint<DerivativeStructure> point) { final DerivativeStructure latitude = point.getLatitude(); final DerivativeStructure longitude = point.getLongitude(); final DerivativeStructure altitude = point.getAltitude(); final DerivativeStructure cLambda = longitude.cos(); final DerivativeStructure sLambda = longitude.sin(); final DerivativeStructure cPhi = latitude.cos(); final DerivativeStructure sPhi = latitude.sin(); final DerivativeStructure n = sPhi.multiply(sPhi).multiply(e2).subtract(1.0).negate().sqrt().reciprocal() .multiply(getA()); final DerivativeStructure r = n.add(altitude).multiply(cPhi); return new PVCoordinates(new FieldVector3D<DerivativeStructure>(r.multiply(cLambda), r.multiply(sLambda), sPhi.multiply(altitude.add(n.multiply(g2))))); }
From source file:org.orekit.forces.BoxAndSolarArraySpacecraft.java
/** {@inheritDoc} */ public FieldVector3D<DerivativeStructure> radiationPressureAcceleration(final AbsoluteDate date, final Frame frame, final Vector3D position, final Rotation rotation, final double mass, final Vector3D flux, final String paramName) throws OrekitException { if (flux.getNormSq() < Precision.SAFE_MIN) { // null illumination (we are probably in umbra) final DerivativeStructure zero = new DerivativeStructure(1, 1, 0.0); return new FieldVector3D<DerivativeStructure>(zero, zero, zero); }//from ww w . j a va 2s. c o m final DerivativeStructure absorptionCoeffDS; final DerivativeStructure specularReflectionCoeffDS; if (ABSORPTION_COEFFICIENT.equals(paramName)) { absorptionCoeffDS = new DerivativeStructure(1, 1, 0, absorptionCoeff); specularReflectionCoeffDS = new DerivativeStructure(1, 1, specularReflectionCoeff); } else if (REFLECTION_COEFFICIENT.equals(paramName)) { absorptionCoeffDS = new DerivativeStructure(1, 1, absorptionCoeff); specularReflectionCoeffDS = new DerivativeStructure(1, 1, 0, specularReflectionCoeff); } else { throw new OrekitException(OrekitMessages.UNSUPPORTED_PARAMETER_NAME, paramName, ABSORPTION_COEFFICIENT + ", " + REFLECTION_COEFFICIENT); } final DerivativeStructure diffuseReflectionCoeffDS = absorptionCoeffDS.add(specularReflectionCoeffDS) .subtract(1).negate(); // radiation flux in spacecraft frame final Vector3D fluxSat = rotation.applyTo(flux); // solar array contribution Vector3D normal = getNormal(date, frame, position, rotation); double dot = Vector3D.dotProduct(normal, fluxSat); if (dot > 0) { // the solar array is illuminated backward, // fix signs to compute contribution correctly dot = -dot; normal = normal.negate(); } FieldVector3D<DerivativeStructure> force = facetRadiationAcceleration(normal, solarArrayArea, fluxSat, dot, specularReflectionCoeffDS, diffuseReflectionCoeffDS); // body facets contribution for (final Facet bodyFacet : facets) { normal = bodyFacet.getNormal(); dot = Vector3D.dotProduct(normal, fluxSat); if (dot < 0) { // the facet intercepts the incoming flux force = force.add(facetRadiationAcceleration(normal, bodyFacet.getArea(), fluxSat, dot, specularReflectionCoeffDS, diffuseReflectionCoeffDS)); } } // convert to inertial return FieldRotation.applyInverseTo(rotation, new FieldVector3D<DerivativeStructure>(1.0 / mass, force)); }
From source file:org.orekit.propagation.analytical.EcksteinHechlerPropagator.java
/** Convert circular parameters <em>with derivatives</em> to Cartesian coordinates. * @param date date of the orbital parameters * @param parameters circular parameters (a, ex, ey, i, raan, alphaM) * @return Cartesian coordinates consistent with values and derivatives *///from w w w .j a v a 2 s.c o m private TimeStampedPVCoordinates toCartesian(final AbsoluteDate date, final DerivativeStructure[] parameters) { // evaluate coordinates in the orbit canonical reference frame final DerivativeStructure cosOmega = parameters[4].cos(); final DerivativeStructure sinOmega = parameters[4].sin(); final DerivativeStructure cosI = parameters[3].cos(); final DerivativeStructure sinI = parameters[3].sin(); final DerivativeStructure alphaE = meanToEccentric(parameters[5], parameters[1], parameters[2]); final DerivativeStructure cosAE = alphaE.cos(); final DerivativeStructure sinAE = alphaE.sin(); final DerivativeStructure ex2 = parameters[1].multiply(parameters[1]); final DerivativeStructure ey2 = parameters[2].multiply(parameters[2]); final DerivativeStructure exy = parameters[1].multiply(parameters[2]); final DerivativeStructure q = ex2.add(ey2).subtract(1).negate().sqrt(); final DerivativeStructure beta = q.add(1).reciprocal(); final DerivativeStructure bx2 = beta.multiply(ex2); final DerivativeStructure by2 = beta.multiply(ey2); final DerivativeStructure bxy = beta.multiply(exy); final DerivativeStructure u = bxy.multiply(sinAE) .subtract(parameters[1].add(by2.subtract(1).multiply(cosAE))); final DerivativeStructure v = bxy.multiply(cosAE) .subtract(parameters[2].add(bx2.subtract(1).multiply(sinAE))); final DerivativeStructure x = parameters[0].multiply(u); final DerivativeStructure y = parameters[0].multiply(v); // canonical orbit reference frame final FieldVector3D<DerivativeStructure> p = new FieldVector3D<DerivativeStructure>( x.multiply(cosOmega).subtract(y.multiply(cosI.multiply(sinOmega))), x.multiply(sinOmega).add(y.multiply(cosI.multiply(cosOmega))), y.multiply(sinI)); // dispatch derivatives final Vector3D p0 = new Vector3D(p.getX().getValue(), p.getY().getValue(), p.getZ().getValue()); final Vector3D p1 = new Vector3D(p.getX().getPartialDerivative(1), p.getY().getPartialDerivative(1), p.getZ().getPartialDerivative(1)); final Vector3D p2 = new Vector3D(p.getX().getPartialDerivative(2), p.getY().getPartialDerivative(2), p.getZ().getPartialDerivative(2)); return new TimeStampedPVCoordinates(date, p0, p1, p2); }
From source file:org.orekit.propagation.analytical.EcksteinHechlerPropagator.java
/** Computes the eccentric latitude argument from the mean latitude argument. * @param alphaM = M + mean latitude argument (rad) * @param ex e cos(), first component of circular eccentricity vector * @param ey e sin(), second component of circular eccentricity vector * @return the eccentric latitude argument. *///from w w w .ja v a2s.c o m private DerivativeStructure meanToEccentric(final DerivativeStructure alphaM, final DerivativeStructure ex, final DerivativeStructure ey) { // Generalization of Kepler equation to circular parameters // with alphaE = PA + E and // alphaM = PA + M = alphaE - ex.sin(alphaE) + ey.cos(alphaE) DerivativeStructure alphaE = alphaM; DerivativeStructure shift = alphaM.getField().getZero(); DerivativeStructure alphaEMalphaM = alphaM.getField().getZero(); DerivativeStructure cosAlphaE = alphaE.cos(); DerivativeStructure sinAlphaE = alphaE.sin(); int iter = 0; do { final DerivativeStructure f2 = ex.multiply(sinAlphaE).subtract(ey.multiply(cosAlphaE)); final DerivativeStructure f1 = alphaM.getField().getOne().subtract(ex.multiply(cosAlphaE)) .subtract(ey.multiply(sinAlphaE)); final DerivativeStructure f0 = alphaEMalphaM.subtract(f2); final DerivativeStructure f12 = f1.multiply(2); shift = f0.multiply(f12).divide(f1.multiply(f12).subtract(f0.multiply(f2))); alphaEMalphaM = alphaEMalphaM.subtract(shift); alphaE = alphaM.add(alphaEMalphaM); cosAlphaE = alphaE.cos(); sinAlphaE = alphaE.sin(); } while ((++iter < 50) && (FastMath.abs(shift.getValue()) > 1.0e-12)); return alphaE; }