Singular Problem

Hi. I am new to Orekit. I am getting this error while trying to do orbit determination. Kindly note that I am implementing orekit in Python. I initially thought that it was due to the small number of points. I increased the points 10-fold I am still getting the same problem. I appreciate your help.

JavaError: <super: <class ‘JavaError’>, >
Java stacktrace:
org.orekit.errors.OrekitException: unable to solve: singular problem
at org.orekit.estimation.leastsquares.BatchLSEstimator.estimate(BatchLSEstimator.java:442)
Caused by: org.hipparchus.exception.MathIllegalStateException: unable to solve: singular problem
at org.hipparchus.optim.nonlinear.vector.leastsquares.GaussNewtonOptimizer.optimize(GaussNewtonOptimizer.java:429)
at org.orekit.estimation.leastsquares.BatchLSEstimator.estimate(BatchLSEstimator.java:436)

Hi @bassemsabra

Welcome to the Orekit forum!

How many parameters do you estimate and how many observations do you have?
In addition, could you give me:

  1. The complete list of estimated parameters
  2. The first and last epoch of you observations

With these information, we should find why you have a singular problem :slightly_smiling_face:

Best regards,
Bryan

Hi Bryan. Thanks for the reach out! I give it the station coor (long, lat, and alt), epoch, RA, and DEC and want to do orbit determination. I am using the BatchLSEstimator.

from org.orekit.estimation.measurements import Range, AngularAzEl, AngularRaDec, ObservableSatellite
from orekit.pyhelpers import JArray
observableSatellite = ObservableSatellite(0) # Propagator index = 0
for a, b in stationData.iterrows():
orekit_radec = AngularRaDec(
stationData.loc[a, ‘OrekitGroundStation’], gcrf,
datetime_to_absolutedate(julian.from_jd(b[‘epoch’], fmt=‘jd’)),
JArray(‘double’)([float(b[‘ra’]), float(b[‘dec’])]),
JArray(‘double’)([float(100e4), float(100e4)]),
JArray(‘double’)([float(1.0), float(1.0)]), # Base weight
observableSatellite
)
estimator.addMeasurement(orekit_radec)

estimatedPropagatorArrayData = estimator.estimate()

First epoch in the file: 2021-07-30T08:24:38.740
Last epoch in the file: 2021-07-30T09:13:30.280

I appreciate your help.
Bassem,

Are your angles in radians or in degree?
Orekit works only with SI units, i.e. radians for angles.

I also think the standard deviation is way too large 100e4 reads as one million radians to me.

Hi Luc. Thanks. I changed the angles to radians (used deg2rad), decreased the standard deviation, experimented with “float” or no “float” … but all gave back the same problem “singular” :frowning:

Hi, can you give me the complete list of estimated parameters?
Singular problems usually occurs when we try to estimate a parameter which is not observable (e.g., a time stamped parameter where the epoch is not in the observation arc, a tropospheric or ionospheric parameter without range measurements, etc.)

The best would be to have a runnable script allowing to reproduce your problem. If you can provide that, it would be very useful.

Bryan

Hi. My data file is a list of time stamped RAs, Decs, all from the same station (lat, long, and alt). I know that all parameters are present in the file: every timestamp has a correspond ra, dec, lat, long, alt. I am writing in what the code is supposed to read into another file and double checking: all parameters are there. However, I suspect that the data file covers a small fraction of the orbit. I have done numerical experiments in which I generate my own orbit and then sample observation arcs of various lengths at various time sampling rates. I found that if the observation arc is less than 20% of the orbit then I fall into the singular problem issue. I wonder if this is the real issue with my real data.

Hi,

It could be the cause. Especially if you are doing an angle only orbit determination. Indeed, a distance observation usually help to improve the observability of the problem.

If it is possible, could you provide a runnable script to investigate your problem?