[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orekit Users] Taylor algebra and force model parameters



I missed the default implementation of GetParameters in the ForceModel
interface. With your advice, I managed to do what I wanted.
Thank you Luc for the clear and precise explanations.

Best regards
Christophe


2018-04-03 15:30 GMT+02:00 Luc Maisonobe <Luc.Maisonobe@c-s.fr>:
> Le 03/04/2018 à 14:12, Christophe Le Bris a écrit :
>> Hello,
>>
>> I'd like to analyze the effects on the orbit of the dispersion of
>> force model parameters.
>> Propagating uncertainties on the orbit knowledge from OD uncertainties
>> is quite straightforward with "FieldPropagation" but I don't see the
>> way to analyze the effect of the uncertainty of a force model
>> parameter with taylor algebra in Orekit.
>>
>> The only way that I saw to do it (without using classical Monte-Carlo
>> simulations) is to implement the effects of the force model by using
>> "additionalEquations" instead of "ForceModel".
>>
>> But, is there a simple way to use taylor algebra to compute the
>> effects of the uncertainties of a force model parameter?
>
>
> In order to do this, you have to implement the force model by
> yourself. In your implementation, there will be an "acceleration"
> method that takes a FieldSpacecraftState and an array of Field
> elements that correspond to the current value of the force model
> parameters.
>
> By default, this array of parameters is created by getting the
> double values from the force model parameters drivers, and
> converting them directly to Field. This is implemented by the
> method getParameters in the ForceModel interface, which has
> a default implementation. You can override this default
> implementation to return Field versions of the parameters
> that you will build beforehand by yourself if you want.
>
> Once this is done, before propagation start you will have
> to set up the parameters for the force model. If for example
> you are interested only in the uncertainties with respect to
> a few force model parameters and not in uncertainties with respect
> to the initial orbit, you will create a dactory for the Derivative
> structures as:
>
>    DSFactory factory = new DSFactory(nbForceParams, order);
>
> then you will create the initial orbit using calls to factory.constant()
>
>   FieldOrbit<DerivativeStructure> initialOrbit =
>    new FieldKeplerianOrbit<>(factory.constant(a),
>                              factory.constant(e),
>                              ...);
>
> because the initial orbit does not depend on the force parameters
> (the final orbit will depend on them, but not the initial orbit).
>
> then you will create the force model parameters using factory.variable
> has these parameters are the canonical variables of your model:
>
>  ForceModel fm = new MyForceModel(factory.variable(0, p0),
>                                   factory.variable(1, p1),
>                                   ...);
>
> At propagation end, when you retrieve the final state, you
> extract its partial derivatives to any order up to the maximum
> specified earlier using:
>
>  // here I assume nbForceParams is 2, but you can have more
>  double daOverdP0    = orbit.getA().getPartialDerivatives(1, 0);
>  double daOverdP1    = orbit.getA().getPartialDerivatives(0, 1);
>  double d2aOverdP02  = orbit.getA().getPartialDerivatives(2, 0);
>  double d2aOverdP12  = orbit.getA().getPartialDerivatives(0, 2);
>  double d2aOverdP0P1 = orbit.getA().getPartialDerivatives(1, 1);
>  ... and so on for higher orders ...
>
>
> So as a summary, the trick is to override the getParameters method
> in your force model, and to build the initial state and force model
> correctly.
>
> best regards,
> Luc
>
>>
>> Christophe
>>
>