List of usage examples for org.apache.commons.math3.analysis.differentiation DerivativeStructure divide
public DerivativeStructure divide(final DerivativeStructure a) throws DimensionMismatchException
From source file:de.tuberlin.uebb.jdae.examples.FactorialEquation.java
private final DerivativeStructure dfactorial(final DerivativeStructure ds) { if (ds.getValue() <= 1.0) { final DerivativeStructure divide = ds.divide(ds); return divide; } else// w ww .j a v a 2 s. c o m return ds.multiply(dfactorial(ds.subtract(1.0))); }
From source file:org.orekit.forces.BoxAndSolarArraySpacecraft.java
/** Compute contribution of one facet to force. * <p>This method implements equation 8-44 from David A. Vallado's * Fundamentals of Astrodynamics and Applications, third edition, * 2007, Microcosm Press.</p>/*from w ww . ja v a 2 s . c o m*/ * @param normal facet normal * @param area facet area * @param fluxSat radiation pressure flux in spacecraft frame * @param dot dot product of facet and fluxSat (must be negative) * @return contribution of the facet to force in spacecraft frame */ private FieldVector3D<DerivativeStructure> facetRadiationAcceleration( final FieldVector3D<DerivativeStructure> normal, final double area, final FieldVector3D<DerivativeStructure> fluxSat, final DerivativeStructure dot) { final DerivativeStructure psr = fluxSat.getNorm(); // Vallado's equation 8-44 uses different parameters which are related to our parameters as: // cos (phi) = -dot / (psr * area) // n = facet / area // s = -fluxSat / psr final DerivativeStructure cN = dot.multiply(-2 * area) .multiply(dot.divide(psr).multiply(specularReflectionCoeff).subtract(diffuseReflectionCoeff / 3)); final DerivativeStructure cS = dot.divide(psr).multiply(area * (specularReflectionCoeff - 1)); return new FieldVector3D<DerivativeStructure>(cN, normal, cS, fluxSat); }
From source file:org.orekit.forces.BoxAndSolarArraySpacecraft.java
/** Compute contribution of one facet to force. * <p>This method implements equation 8-44 from David A. Vallado's * Fundamentals of Astrodynamics and Applications, third edition, * 2007, Microcosm Press.</p>/*from www . j a va 2s . com*/ * @param normal facet normal * @param area facet area * @param fluxSat radiation pressure flux in spacecraft frame * @param dot dot product of facet and fluxSat (must be negative) * @param specularReflectionCoeffDS specular reflection coefficient * @param diffuseReflectionCoeffDS diffuse reflection coefficient * @return contribution of the facet to force in spacecraft frame */ private FieldVector3D<DerivativeStructure> facetRadiationAcceleration(final Vector3D normal, final double area, final Vector3D fluxSat, final double dot, final DerivativeStructure specularReflectionCoeffDS, final DerivativeStructure diffuseReflectionCoeffDS) { final double psr = fluxSat.getNorm(); // Vallado's equation 8-44 uses different parameters which are related to our parameters as: // cos (phi) = -dot / (psr * area) // n = facet / area // s = -fluxSat / psr final DerivativeStructure cN = diffuseReflectionCoeffDS.divide(3) .subtract(specularReflectionCoeffDS.multiply(dot / psr)).multiply(2 * area * dot); final DerivativeStructure cS = specularReflectionCoeffDS.subtract(1).multiply(area * dot / psr); return new FieldVector3D<DerivativeStructure>(cN, normal, cS, fluxSat); }
From source file:org.orekit.forces.gravity.NewtonianAttraction.java
/** {@inheritDoc} */ public FieldVector3D<DerivativeStructure> accelerationDerivatives(final SpacecraftState s, final String paramName) throws OrekitException { complainIfNotSupported(paramName);//www . java 2 s .c o m final Vector3D position = s.getPVCoordinates().getPosition(); final double r2 = position.getNormSq(); final DerivativeStructure muds = new DerivativeStructure(1, 1, 0, mu); return new FieldVector3D<DerivativeStructure>(muds.divide(-r2 * FastMath.sqrt(r2)), position); }
From source file:org.orekit.forces.gravity.Relativity.java
@Override public FieldVector3D<DerivativeStructure> accelerationDerivatives(final SpacecraftState s, final String paramName) throws OrekitException { complainIfNotSupported(paramName);/* ww w . j a va2s . co m*/ final DerivativeStructure gmDS = new DerivativeStructure(1, 1, 0, this.gm); final PVCoordinates pv = s.getPVCoordinates(); final Vector3D p = pv.getPosition(); final Vector3D v = pv.getVelocity(); //radius final double r2 = p.getNormSq(); final double r = FastMath.sqrt(r2); //speed final double s2 = v.getNormSq(); final double c2 = Constants.SPEED_OF_LIGHT * Constants.SPEED_OF_LIGHT; //eq. 3.146 return new FieldVector3D<DerivativeStructure>(gmDS.multiply(4 / r).subtract(s2), p, new DerivativeStructure(1, 1, 4 * p.dotProduct(v)), v).scalarMultiply(gmDS.divide(r2 * r * c2)); }
From source file:org.orekit.forces.gravity.ThirdBodyAttraction.java
/** {@inheritDoc} */ public FieldVector3D<DerivativeStructure> accelerationDerivatives(final SpacecraftState s, final String paramName) throws OrekitException { complainIfNotSupported(paramName);/*from w w w .ja va 2 s . c om*/ // compute bodies separation vectors and squared norm final Vector3D centralToBody = body.getPVCoordinates(s.getDate(), s.getFrame()).getPosition(); final double r2Central = centralToBody.getNormSq(); final Vector3D satToBody = centralToBody.subtract(s.getPVCoordinates().getPosition()); final double r2Sat = satToBody.getNormSq(); final DerivativeStructure gmds = new DerivativeStructure(1, 1, 0, gm); // compute relative acceleration return new FieldVector3D<DerivativeStructure>(gmds.divide(r2Sat * FastMath.sqrt(r2Sat)), satToBody, gmds.divide(-r2Central * FastMath.sqrt(r2Central)), centralToBody); }
From source file:org.orekit.forces.maneuvers.ConstantThrustManeuver.java
/** {@inheritDoc} */ public FieldVector3D<DerivativeStructure> accelerationDerivatives(final SpacecraftState s, final String paramName) throws OrekitException { complainIfNotSupported(paramName);/*from w w w . j a va 2 s. c om*/ if (firing) { if (THRUST.equals(paramName)) { final DerivativeStructure thrustDS = new DerivativeStructure(1, 1, 0, thrust); return new FieldVector3D<DerivativeStructure>(thrustDS.divide(s.getMass()), s.getAttitude().getRotation().applyInverseTo(direction)); } else if (FLOW_RATE.equals(paramName)) { // acceleration does not depend on flow rate (only mass decrease does) final DerivativeStructure zero = new DerivativeStructure(1, 1, 0.0); return new FieldVector3D<DerivativeStructure>(zero, zero, zero); } else { throw new OrekitException(OrekitMessages.UNSUPPORTED_PARAMETER_NAME, paramName, THRUST + ", " + FLOW_RATE); } } else { // constant (and null) acceleration when not firing final DerivativeStructure zero = new DerivativeStructure(1, 1, 0.0); return new FieldVector3D<DerivativeStructure>(zero, zero, zero); } }
From source file:org.orekit.forces.radiation.SolarRadiationPressure.java
/** {@inheritDoc} */ public FieldVector3D<DerivativeStructure> accelerationDerivatives(final AbsoluteDate date, final Frame frame, final FieldVector3D<DerivativeStructure> position, final FieldVector3D<DerivativeStructure> velocity, final FieldRotation<DerivativeStructure> rotation, final DerivativeStructure mass) throws OrekitException { final FieldVector3D<DerivativeStructure> sunSatVector = position .subtract(sun.getPVCoordinates(date, frame).getPosition()); final DerivativeStructure r2 = sunSatVector.getNormSq(); // compute flux final double ratio = getLightningRatio(position.toVector3D(), frame, date); final DerivativeStructure rawP = r2.reciprocal().multiply(kRef * ratio); final FieldVector3D<DerivativeStructure> flux = new FieldVector3D<DerivativeStructure>( rawP.divide(r2.sqrt()), sunSatVector); // compute acceleration with all its partial derivatives return spacecraft.radiationPressureAcceleration(date, frame, position, rotation, mass, flux); }
From source file:org.orekit.forces.SphericalSpacecraft.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 { 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 {/*ww w . j a v a2 s. c o m*/ throw new OrekitException(OrekitMessages.UNSUPPORTED_PARAMETER_NAME, paramName, ABSORPTION_COEFFICIENT + ", " + REFLECTION_COEFFICIENT); } final DerivativeStructure kP = absorptionCoeffDS.subtract(1).multiply(specularReflectionCoeffDS.subtract(1)) .multiply(4.0 / 9.0).add(1).multiply(crossSection); return new FieldVector3D<DerivativeStructure>(kP.divide(mass), flux); }