Example usage for org.apache.commons.math3.analysis.differentiation DerivativeStructure add

List of usage examples for org.apache.commons.math3.analysis.differentiation DerivativeStructure add

Introduction

In this page you can find the example usage for org.apache.commons.math3.analysis.differentiation DerivativeStructure add.

Prototype

public DerivativeStructure add(final DerivativeStructure a) throws DimensionMismatchException 

Source Link

Document

'+' operator.

Usage

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;

}