Parameters in State and STM

Hello all,

First of all, I appreciate previous questions and responses in the archives and this forum. If my question has already been thoroughly answered, please feel free to simply link me to similar topics.

Currently, I am trying to create a state transition matrix (STM) that includes parameters as well as the spacecraft state. Although I thought that I could do this given my knowledge of Orekit, I am hitting a stumbling block. Right now, I wish for the coefficient of drag (Cd) to be included in the STM (as part of the state). A brief overview of my code (in MATLAB) is this:

ForceModel.dragForce.getParameterDriver(‘drag coefficient’).setValue(Cd)
ForceModel.dragForce.getParameterDriver(‘drag coefficient’).setSelected(1)
Propagator = NumericalPropagator(integrator);
partials = PartialDerivativesEquations(‘partials’, Propagator)

And now it is here where I have issues. If I use partials.setInitialJacobians, the best that I end up with is a 6x7 Jacobian. To me, this is indicating that I am only getting the Jacobian of the 6 dimension spacecraft state with respect to itself and the additionally selected parameter. Therefore, I thought that I would need to add my Cd to the state. However, addAdditionalState does not seem to support the addition of a parameter in this way.

How can I get the 7x7 STM that I am seeking? It would be nice if this generalizes to other parameters such as coefficient of reflectivity.

Hi @Marco

I’m not sure I fully understand your question and I’m not a Matlab user; so excuse me in advance if I’m off topic.
There are explicative comments on how to form the state transition matrix from the JacobianMapper in class PartialDerivativesEquations.
You can find them in the Model class of the Kalman estimator, in method getErrorStateTransitionMatrix.

Using the PartialDerivativesEquations class, you will have access to:

PartialDerivativesEquations.getMapper().getStateJacobian(state, dYdY0)

That will give you the derivatives of the current orbit parameters with respect to the initial orbit parameters. So a 6x6 matrix saved in variable dYdY0.

Then you also have:

PartialDerivativesEquations.getMapper().getParametersJacobian(state, dYdP)

That will give you the derivatives of current orbital parameters with respect to propagation parameters. In your case this will be a 6x1 matrix saved in variable dYdP; as you only selected the drag Cd as propagation parameter.

Note that if you select another propagation parameters - for example the coefficient of reflection as you mentioned - the dYdP will automatically take it into account and you’ll end up with a 6x2 matrix.
This generalizes to any propagation parameters you’d like to select in your force models.

Hope this helps.


Dear Maxime,

Thank you for the reply. Perhaps the confusion is that I did not emphasize that I wish the coefficient of drag to be considered a state parameter as well. Therefore, my STM would be 7x7 rather than 6x7 or 6x6. We wish to propagate a 7x7 covariance matrix with our STM, which includes the 6 dimension satellite state as well as the coefficient of drag.

From what I can tell, the methods found in PartialDerivativesEquations will only get me the Jacobian of the 6 dimension spacecraft state with respect to itself and the selected parameter. I am also desiring the Jacobian of the selected parameter with respect to these 7 states. I understand that this is going to be a row of zeros in the Jacobian. However, it is preferable to seek as elegant a solution as possible to this problem, because it is a possibility that our selected parameter(s) would not be constant.

I took a look at the getErrorStateTransitionMatrix code. It appears that the STM is assumed to be identity, while the 6x(6+nbParams) portion is filled in with the results from the get_Jacobian methods. This was going to be our approach if there is not inherent support to produce a (6+nbParams)x(6+nbParams) STM.

Thank you once again for your reply. It is very much appreciated