Sequential least squares estimation

Hi eveyone,

Sorry to bother you again. I was wondering if there is any way to sequentially estimate the orbit using least squares.

Since I have a constellation with lots of satellites, which are connected by ISL, there would be a lot of parameters need to be determined as well as observations. Thus, the design matrix (Jacobian) of least squares method is huge. And when I used batch least squares to estimate, I often met “ran out of memory” error, even though I have increased heap memory.

In stead of estimating all observations at the same time, is there any way to sequentially calculate the jacobian of each observation and update the normal equation? Since the observations are independent of each other, theoretically it is possible to split them and calculate jacobians, normal equation matrices and normal equations separately. Then by summing these normal equation matrices and normal equations up, it could get the same results as the batch LSE.

In this way it only needs to save one normal equation matrix and updates it accordingly. This would save a lot of space, though it might lose some parameters (like jacobian matrix).

I realize there is Kalman filter available for sequential estimation, but if possible I would prefer using LSE. Therefore, I wonder if this method could be implemented through orekit somehow? Or at least is there anyway to extract jacobian before doing BatchLSEstimator.estimate()? So I may try to implement it myself somehow.

Thank you a lot!


Hi, sounds like a nice new feature. Accumulating the normal equations is possible when using Gauss-Newton with a decomposition that forms the normal equations (LU, Cholesky), but I don’t think it would be possible with a decomposition that uses the Jacobian matrix (QR, SVD) or when using Levenburg-Marquardt. So you’ll end up trading computational efficiency for numerical sensitivity, which sounds like a good trade in your case.

Hi Evan,

Thanks a lot for your information. Yes, this would be better for lots of parameters and observations like my case. I’m looking forward to the future release with this feature! Meanwhile, do you have any suggestions about how may I implement it with current orekit APIs?