View Javadoc
1   /*
2    * Copyright (C) 2019 Alberto Irurueta Carro (alberto@irurueta.com)
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *         http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package com.irurueta.navigation.inertial.navigators;
17  
18  import com.irurueta.algebra.AlgebraException;
19  import com.irurueta.algebra.Matrix;
20  import com.irurueta.algebra.Utils;
21  import com.irurueta.geometry.InvalidRotationMatrixException;
22  import com.irurueta.geometry.Point3D;
23  import com.irurueta.navigation.frames.CoordinateTransformation;
24  import com.irurueta.navigation.frames.ECIFrame;
25  import com.irurueta.navigation.frames.FrameType;
26  import com.irurueta.navigation.frames.InvalidSourceAndDestinationFrameTypeException;
27  import com.irurueta.navigation.inertial.BodyKinematics;
28  import com.irurueta.navigation.inertial.estimators.ECIGravitationEstimator;
29  import com.irurueta.units.*;
30  
31  /**
32   * Runs precision ECI-frame inertial navigation equations.
33   * This implementation is based on the equations defined in "Principles of GNSS, Inertial, and Multisensor
34   * Integrated Navigation Systems, Second Edition" and on the companion software available at:
35   * <a href="https://github.com/ymjdz/MATLAB-Codes/blob/master/Nav_equations_ECI.m">
36   *     https://github.com/ymjdz/MATLAB-Codes/blob/master/Nav_equations_ECI.m
37   * </a>
38   */
39  public class ECIInertialNavigator {
40  
41      /**
42       * Alpha threshold.
43       */
44      private static final double ALPHA_THRESHOLD = 1e-8;
45  
46      /**
47       * Number of rows.
48       */
49      private static final int ROWS = 3;
50  
51      /**
52       * Runs precision ECI-frame inertial navigation equations.
53       *
54       * @param timeInterval time interval between epochs expressed in seconds (s).
55       * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
56       *                     frame, resolved along ECI-frame axes and expressed in meters (m).
57       * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
58       *                     frame, resolved along ECI-frame axes and expressed in meters (m).
59       * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
60       *                     frame, resolved along ECI-frame axes and expressed in meters (m).
61       * @param oldC         previous body-to-ECI-frame coordinate transformation.
62       * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
63       *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
64       * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
65       *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
66       * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
67       *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
68       * @param fx           specific force x-coordinate of body frame with respect ECI frame,
69       *                     resolved along body-frame axes, averaged over time interval and
70       *                     expressed in meters per squared second (m/s^2).
71       * @param fy           specific force y-coordinate of body frame with respect ECI frame,
72       *                     resolved along body-frame axes, averaged over time interval and
73       *                     expressed in meters per squared second (m/s^2).
74       * @param fz           specific force z-coordinate of body frame with respect ECI frame,
75       *                     resolved along body-frame axes, averaged over time interval and
76       *                     expressed in meters per squared second (m/s^2).
77       * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
78       *                     resolved along body-frame axes, averaged over time interval and
79       *                     expressed in radians per second (rad/s).
80       * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
81       *                     resolved along body-frame axes, averaged over time interval and
82       *                     expressed in radians per second (rad/s).
83       * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
84       *                     resolved along body-frame axes, averaged over time interval and
85       *                     expressed in radians per second (rad/s).
86       * @param result       instance where new estimated ECI frame containing new body position,
87       *                     velocity and coordinate transformation matrix will be stored.
88       * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
89       * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
90       *                                                       body-to-ECI-frame coordinate transformation matrix are
91       *                                                       invalid.
92       */
93      public void navigate(
94              final double timeInterval, final double oldX, final double oldY, final double oldZ,
95              final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
96              final double fx, final double fy, final double fz,
97              final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
98              throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
99          navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
100                 angularRateX, angularRateY, angularRateZ, result);
101     }
102 
103     /**
104      * Runs precision ECI-frame inertial navigation equations.
105      *
106      * @param timeInterval time interval between epochs.
107      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
108      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
109      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
110      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
111      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
112      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
113      * @param oldC         previous body-to-ECI-frame coordinate transformation.
114      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
115      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
116      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
117      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
118      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
119      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
120      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
121      *                     resolved along body-frame axes, averaged over time interval and
122      *                     expressed in meters per squared second (m/s^2).
123      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
124      *                     resolved along body-frame axes, averaged over time interval and
125      *                     expressed in meters per squared second (m/s^2).
126      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
127      *                     resolved along body-frame axes, averaged over time interval and
128      *                     expressed in meters per squared second (m/s^2).
129      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
130      *                     resolved along body-frame axes, averaged over time interval and
131      *                     expressed in radians per second (rad/s).
132      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
133      *                     resolved along body-frame axes, averaged over time interval and
134      *                     expressed in radians per second (rad/s).
135      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
136      *                     resolved along body-frame axes, averaged over time interval and
137      *                     expressed in radians per second (rad/s).
138      * @param result       instance where new estimated ECI frame containing new body position,
139      *                     velocity and coordinate transformation matrix will be stored.
140      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
141      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
142      *                                                       body-to-ECI-frame coordinate transformation matrix are
143      *                                                       invalid.
144      */
145     public void navigate(
146             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
147             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
148             final double fx, final double fy, final double fz,
149             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
150             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
151         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
152                 angularRateX, angularRateY, angularRateZ, result);
153     }
154 
155     /**
156      * Runs precision ECI-frame inertial navigation equations.
157      *
158      * @param timeInterval time interval between epochs expressed in seconds (s).
159      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
160      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
161      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
162      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
163      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
164      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
165      * @param oldC         previous body-to-ECI-frame coordinate transformation.
166      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
167      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
168      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
169      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
170      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
171      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
172      * @param kinematics   body kinematics containing specific forces and angular rates applied to
173      *                     the body.
174      * @param result       instance where new estimated ECI frame containing new body position,
175      *                     velocity and coordinate transformation matrix will be stored.
176      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
177      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
178      *                                                       body-to-ECI-frame coordinate transformation matrix are
179      *                                                       invalid.
180      */
181     public void navigate(
182             final double timeInterval, final double oldX, final double oldY, final double oldZ,
183             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
184             final BodyKinematics kinematics, final ECIFrame result) throws InertialNavigatorException,
185             InvalidSourceAndDestinationFrameTypeException {
186         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, kinematics, result);
187     }
188 
189     /**
190      * Runs precision ECI-frame inertial navigation equations.
191      *
192      * @param timeInterval time interval between epochs.
193      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
194      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
195      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
196      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
197      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
198      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
199      * @param oldC         previous body-to-ECI-frame coordinate transformation.
200      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
201      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
202      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
203      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
204      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
205      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
206      * @param kinematics   body kinematics containing specific forces and angular rates applied to
207      *                     the body.
208      * @param result       instance where new estimated ECI frame containing new body position,
209      *                     velocity and coordinate transformation matrix will be stored.
210      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
211      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
212      *                                                       body-to-ECI-frame coordinate transformation matrix are
213      *                                                       invalid.
214      */
215     public void navigate(
216             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
217             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
218             final BodyKinematics kinematics, final ECIFrame result) throws InertialNavigatorException,
219             InvalidSourceAndDestinationFrameTypeException {
220         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, kinematics, result);
221     }
222 
223     /**
224      * Runs precision ECI-frame inertial navigation equations.
225      *
226      * @param timeInterval time interval between epochs expressed in seconds (s).
227      * @param oldPosition  previous cartesian position of body frame with respect ECI
228      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
229      * @param oldC         previous body-to-ECI-frame coordinate transformation.
230      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
231      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
232      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
233      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
234      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
235      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
236      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
237      *                     resolved along body-frame axes, averaged over time interval and
238      *                     expressed in meters per squared second (m/s^2).
239      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
240      *                     resolved along body-frame axes, averaged over time interval and
241      *                     expressed in meters per squared second (m/s^2).
242      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
243      *                     resolved along body-frame axes, averaged over time interval and
244      *                     expressed in meters per squared second (m/s^2).
245      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
246      *                     resolved along body-frame axes, averaged over time interval and
247      *                     expressed in radians per second (rad/s).
248      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
249      *                     resolved along body-frame axes, averaged over time interval and
250      *                     expressed in radians per second (rad/s).
251      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
252      *                     resolved along body-frame axes, averaged over time interval and
253      *                     expressed in radians per second (rad/s).
254      * @param result       instance where new estimated ECI frame containing new body position,
255      *                     velocity and coordinate transformation matrix will be stored.
256      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
257      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
258      *                                                       body-to-ECI-frame coordinate transformation matrix are
259      *                                                       invalid.
260      */
261     public void navigate(
262             final double timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
263             final double oldVx, final double oldVy, final double oldVz,
264             final double fx, final double fy, final double fz,
265             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
266             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
267         navigateECI(timeInterval, oldPosition, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
268                 angularRateX, angularRateY, angularRateZ, result);
269     }
270 
271     /**
272      * Runs precision ECI-frame inertial navigation equations.
273      *
274      * @param timeInterval time interval between epochs.
275      * @param oldPosition  previous cartesian position of body frame with respect ECI
276      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
277      * @param oldC         previous body-to-ECI-frame coordinate transformation.
278      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
279      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
280      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
281      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
282      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
283      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
284      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
285      *                     resolved along body-frame axes, averaged over time interval and
286      *                     expressed in meters per squared second (m/s^2).
287      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
288      *                     resolved along body-frame axes, averaged over time interval and
289      *                     expressed in meters per squared second (m/s^2).
290      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
291      *                     resolved along body-frame axes, averaged over time interval and
292      *                     expressed in meters per squared second (m/s^2).
293      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
294      *                     resolved along body-frame axes, averaged over time interval and
295      *                     expressed in radians per second (rad/s).
296      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
297      *                     resolved along body-frame axes, averaged over time interval and
298      *                     expressed in radians per second (rad/s).
299      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
300      *                     resolved along body-frame axes, averaged over time interval and
301      *                     expressed in radians per second (rad/s).
302      * @param result       instance where new estimated ECI frame containing new body position,
303      *                     velocity and coordinate transformation matrix will be stored.
304      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
305      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
306      *                                                       body-to-ECI-frame coordinate transformation matrix are
307      *                                                       invalid.
308      */
309     public void navigate(
310             final Time timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
311             final double oldVx, final double oldVy, final double oldVz,
312             final double fx, final double fy, final double fz,
313             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
314             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
315         navigateECI(timeInterval, oldPosition, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
316                 angularRateX, angularRateY, angularRateZ, result);
317     }
318 
319     /**
320      * Runs precision ECI-frame inertial navigation equations.
321      *
322      * @param timeInterval time interval between epochs expressed in seconds (s).
323      * @param oldPosition  previous cartesian position of body frame with respect ECI
324      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
325      * @param oldC         previous body-to-ECI-frame coordinate transformation.
326      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
327      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
328      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
329      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
330      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
331      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
332      * @param kinematics   body kinematics containing specific forces and angular rates applied to
333      *                     the body.
334      * @param result       instance where new estimated ECI frame containing new body position,
335      *                     velocity and coordinate transformation matrix will be stored.
336      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
337      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
338      *                                                       body-to-ECI-frame coordinate transformation matrix are
339      *                                                       invalid.
340      */
341     public void navigate(
342             final double timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
343             final double oldVx, final double oldVy, final double oldVz, final BodyKinematics kinematics,
344             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
345         navigateECI(timeInterval, oldPosition, oldC, oldVx, oldVy, oldVz, kinematics, result);
346     }
347 
348     /**
349      * Runs precision ECI-frame inertial navigation equations.
350      *
351      * @param timeInterval time interval between epochs.
352      * @param oldPosition  previous cartesian position of body frame with respect ECI
353      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
354      * @param oldC         previous body-to-ECI-frame coordinate transformation.
355      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
356      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
357      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
358      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
359      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
360      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
361      * @param kinematics   body kinematics containing specific forces and angular rates applied to
362      *                     the body.
363      * @param result       instance where new estimated ECI frame containing new body position,
364      *                     velocity and coordinate transformation matrix will be stored.
365      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
366      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
367      *                                                       body-to-ECI-frame coordinate transformation matrix are
368      *                                                       invalid.
369      */
370     public void navigate(
371             final Time timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
372             final double oldVx, final double oldVy, final double oldVz, final BodyKinematics kinematics,
373             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
374         navigateECI(timeInterval, oldPosition, oldC, oldVx, oldVy, oldVz, kinematics, result);
375     }
376 
377     /**
378      * Runs precision ECI-frame inertial navigation equations.
379      *
380      * @param timeInterval time interval between epochs expressed in seconds (s).
381      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
382      *                     frame, resolved along ECI-frame axes.
383      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
384      *                     frame, resolved along ECI-frame axes.
385      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
386      *                     frame, resolved along ECI-frame axes.
387      * @param oldC         previous body-to-ECI-frame coordinate transformation.
388      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
389      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
390      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
391      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
392      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
393      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
394      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
395      *                     resolved along body-frame axes, averaged over time interval and
396      *                     expressed in meters per squared second (m/s^2).
397      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
398      *                     resolved along body-frame axes, averaged over time interval and
399      *                     expressed in meters per squared second (m/s^2).
400      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
401      *                     resolved along body-frame axes, averaged over time interval and
402      *                     expressed in meters per squared second (m/s^2).
403      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
404      *                     resolved along body-frame axes, averaged over time interval and
405      *                     expressed in radians per second (rad/s).
406      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
407      *                     resolved along body-frame axes, averaged over time interval and
408      *                     expressed in radians per second (rad/s).
409      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
410      *                     resolved along body-frame axes, averaged over time interval and
411      *                     expressed in radians per second (rad/s).
412      * @param result       instance where new estimated ECI frame containing new body position,
413      *                     velocity and coordinate transformation matrix will be stored.
414      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
415      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
416      *                                                       body-to-ECI-frame coordinate transformation matrix are
417      *                                                       invalid.
418      */
419     public void navigate(
420             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
421             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
422             final double fx, final double fy, final double fz,
423             final double angularRateX, final double angularRateY, final double angularRateZ,
424             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
425         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
426                 angularRateX, angularRateY, angularRateZ, result);
427     }
428 
429     /**
430      * Runs precision ECI-frame inertial navigation equations.
431      *
432      * @param timeInterval time interval between epochs.
433      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
434      *                     frame, resolved along ECI-frame axes.
435      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
436      *                     frame, resolved along ECI-frame axes.
437      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
438      *                     frame, resolved along ECI-frame axes.
439      * @param oldC         previous body-to-ECI-frame coordinate transformation.
440      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
441      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
442      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
443      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
444      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
445      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
446      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
447      *                     resolved along body-frame axes, averaged over time interval and
448      *                     expressed in meters per squared second (m/s^2).
449      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
450      *                     resolved along body-frame axes, averaged over time interval and
451      *                     expressed in meters per squared second (m/s^2).
452      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
453      *                     resolved along body-frame axes, averaged over time interval and
454      *                     expressed in meters per squared second (m/s^2).
455      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
456      *                     resolved along body-frame axes, averaged over time interval and
457      *                     expressed in radians per second (rad/s).
458      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
459      *                     resolved along body-frame axes, averaged over time interval and
460      *                     expressed in radians per second (rad/s).
461      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
462      *                     resolved along body-frame axes, averaged over time interval and
463      *                     expressed in radians per second (rad/s).
464      * @param result       instance where new estimated ECI frame containing new body position,
465      *                     velocity and coordinate transformation matrix will be stored.
466      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
467      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
468      *                                                       body-to-ECI-frame coordinate transformation matrix are
469      *                                                       invalid.
470      */
471     public void navigate(
472             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
473             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
474             final double fx, final double fy, final double fz,
475             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
476             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
477         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
478                 angularRateX, angularRateY, angularRateZ, result);
479     }
480 
481     /**
482      * Runs precision ECI-frame inertial navigation equations.
483      *
484      * @param timeInterval time interval between epochs expressed in seconds (s).
485      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
486      *                     frame, resolved along ECI-frame axes.
487      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
488      *                     frame, resolved along ECI-frame axes.
489      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
490      *                     frame, resolved along ECI-frame axes.
491      * @param oldC         previous body-to-ECI-frame coordinate transformation.
492      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
493      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
494      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
495      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
496      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
497      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
498      * @param kinematics   body kinematics containing specific forces and angular rates applied to
499      *                     the body.
500      * @param result       instance where new estimated ECI frame containing new body position,
501      *                     velocity and coordinate transformation matrix will be stored.
502      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
503      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
504      *                                                       body-to-ECI-frame coordinate transformation matrix are
505      *                                                       invalid.
506      */
507     public void navigate(
508             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
509             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
510             final BodyKinematics kinematics, final ECIFrame result)
511             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
512         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, kinematics, result);
513     }
514 
515     /**
516      * Runs precision ECI-frame inertial navigation equations.
517      *
518      * @param timeInterval time interval between epochs.
519      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
520      *                     frame, resolved along ECI-frame axes.
521      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
522      *                     frame, resolved along ECI-frame axes.
523      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
524      *                     frame, resolved along ECI-frame axes.
525      * @param oldC         previous body-to-ECI-frame coordinate transformation.
526      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
527      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
528      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
529      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
530      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
531      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
532      * @param kinematics   body kinematics containing specific forces and angular rates applied to
533      *                     the body.
534      * @param result       instance where new estimated ECI frame containing new body position,
535      *                     velocity and coordinate transformation matrix will be stored.
536      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
537      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
538      *                                                       body-to-ECI-frame coordinate transformation matrix are
539      *                                                       invalid.
540      */
541     public void navigate(
542             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
543             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
544             final BodyKinematics kinematics, final ECIFrame result)
545             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
546         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, kinematics, result);
547     }
548 
549     /**
550      * Runs precision ECI-frame inertial navigation equations.
551      *
552      * @param timeInterval time interval between epochs expressed in seconds (s).
553      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
554      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
555      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
556      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
557      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
558      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
559      * @param oldC         previous body-to-ECI-frame coordinate transformation.
560      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
561      *                     resolved along ECI-frame axes.
562      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
563      *                     resolved along ECI-frame axes.
564      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
565      *                     resolved along ECI-frame axes.
566      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
567      *                     resolved along body-frame axes, averaged over time interval and
568      *                     expressed in meters per squared second (m/s^2).
569      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
570      *                     resolved along body-frame axes, averaged over time interval and
571      *                     expressed in meters per squared second (m/s^2).
572      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
573      *                     resolved along body-frame axes, averaged over time interval and
574      *                     expressed in meters per squared second (m/s^2).
575      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
576      *                     resolved along body-frame axes, averaged over time interval and
577      *                     expressed in radians per second (rad/s).
578      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
579      *                     resolved along body-frame axes, averaged over time interval and
580      *                     expressed in radians per second (rad/s).
581      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
582      *                     resolved along body-frame axes, averaged over time interval and
583      *                     expressed in radians per second (rad/s).
584      * @param result       instance where new estimated ECI frame containing new body position,
585      *                     velocity and coordinate transformation matrix will be stored.
586      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
587      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
588      *                                                       body-to-ECI-frame coordinate transformation matrix are
589      *                                                       invalid.
590      */
591     public void navigate(
592             final double timeInterval, final double oldX, final double oldY, final double oldZ,
593             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
594             final double fx, final double fy, final double fz,
595             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
596             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
597         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, fx, fy, fz,
598                 angularRateX, angularRateY, angularRateZ, result);
599     }
600 
601     /**
602      * Runs precision ECI-frame inertial navigation equations.
603      *
604      * @param timeInterval time interval between epochs.
605      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
606      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
607      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
608      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
609      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
610      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
611      * @param oldC         previous body-to-ECI-frame coordinate transformation.
612      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
613      *                     resolved along ECI-frame axes.
614      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
615      *                     resolved along ECI-frame axes.
616      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
617      *                     resolved along ECI-frame axes.
618      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
619      *                     resolved along body-frame axes, averaged over time interval and
620      *                     expressed in meters per squared second (m/s^2).
621      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
622      *                     resolved along body-frame axes, averaged over time interval and
623      *                     expressed in meters per squared second (m/s^2).
624      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
625      *                     resolved along body-frame axes, averaged over time interval and
626      *                     expressed in meters per squared second (m/s^2).
627      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
628      *                     resolved along body-frame axes, averaged over time interval and
629      *                     expressed in radians per second (rad/s).
630      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
631      *                     resolved along body-frame axes, averaged over time interval and
632      *                     expressed in radians per second (rad/s).
633      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
634      *                     resolved along body-frame axes, averaged over time interval and
635      *                     expressed in radians per second (rad/s).
636      * @param result       instance where new estimated ECI frame containing new body position,
637      *                     velocity and coordinate transformation matrix will be stored.
638      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
639      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
640      *                                                       body-to-ECI-frame coordinate transformation matrix are
641      *                                                       invalid.
642      */
643     public void navigate(
644             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
645             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
646             final double fx, final double fy, final double fz,
647             final double angularRateX, final double angularRateY, final double angularRateZ,
648             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
649         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, fx, fy, fz,
650                 angularRateX, angularRateY, angularRateZ, result);
651     }
652 
653     /**
654      * Runs precision ECI-frame inertial navigation equations.
655      *
656      * @param timeInterval time interval between epochs expressed in seconds (s).
657      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
658      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
659      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
660      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
661      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
662      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
663      * @param oldC         previous body-to-ECI-frame coordinate transformation.
664      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
665      *                     resolved along ECI-frame axes.
666      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
667      *                     resolved along ECI-frame axes.
668      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
669      *                     resolved along ECI-frame axes.
670      * @param kinematics   body kinematics containing specific forces and angular rates applied to
671      *                     the body.
672      * @param result       instance where new estimated ECI frame containing new body position,
673      *                     velocity and coordinate transformation matrix will be stored.
674      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
675      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
676      *                                                       body-to-ECI-frame coordinate transformation matrix are
677      *                                                       invalid.
678      */
679     public void navigate(
680             final double timeInterval, final double oldX, final double oldY, final double oldZ,
681             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
682             final BodyKinematics kinematics, final ECIFrame result) throws InertialNavigatorException,
683             InvalidSourceAndDestinationFrameTypeException {
684         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, kinematics, result);
685     }
686 
687     /**
688      * Runs precision ECI-frame inertial navigation equations.
689      *
690      * @param timeInterval time interval between epochs expressed in seconds (s).
691      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
692      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
693      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
694      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
695      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
696      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
697      * @param oldC         previous body-to-ECI-frame coordinate transformation.
698      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
699      *                     resolved along ECI-frame axes.
700      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
701      *                     resolved along ECI-frame axes.
702      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
703      *                     resolved along ECI-frame axes.
704      * @param kinematics   body kinematics containing specific forces and angular rates applied to
705      *                     the body.
706      * @param result       instance where new estimated ECI frame containing new body position,
707      *                     velocity and coordinate transformation matrix will be stored.
708      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
709      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
710      *                                                       body-to-ECI-frame coordinate transformation matrix are
711      *                                                       invalid.
712      */
713     public void navigate(
714             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
715             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
716             final BodyKinematics kinematics, final ECIFrame result)
717             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
718         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, kinematics, result);
719     }
720 
721     /**
722      * Runs precision ECI-frame inertial navigation equations.
723      *
724      * @param timeInterval time interval between epochs expressed in seconds (s).
725      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
726      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
727      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
728      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
729      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
730      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
731      * @param oldC         previous body-to-ECI-frame coordinate transformation.
732      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
733      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
734      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
735      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
736      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
737      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
738      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
739      *                     resolved along body-frame axes, averaged over time interval.
740      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
741      *                     resolved along body-frame axes, averaged over time interval.
742      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
743      *                     resolved along body-frame axes, averaged over time interval.
744      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
745      *                     resolved along body-frame axes, averaged over time interval and
746      *                     expressed in radians per second (rad/s).
747      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
748      *                     resolved along body-frame axes, averaged over time interval and
749      *                     expressed in radians per second (rad/s).
750      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
751      *                     resolved along body-frame axes, averaged over time interval and
752      *                     expressed in radians per second (rad/s).
753      * @param result       instance where new estimated ECI frame containing new body position,
754      *                     velocity and coordinate transformation matrix will be stored.
755      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
756      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
757      *                                                       body-to-ECI-frame coordinate transformation matrix are
758      *                                                       invalid.
759      */
760     public void navigate(
761             final double timeInterval, final double oldX, final double oldY, final double oldZ,
762             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
763             final Acceleration fx, final Acceleration fy, final Acceleration fz,
764             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
765             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
766         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
767                 angularRateX, angularRateY, angularRateZ, result);
768     }
769 
770     /**
771      * Runs precision ECI-frame inertial navigation equations.
772      *
773      * @param timeInterval time interval between epochs.
774      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
775      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
776      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
777      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
778      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
779      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
780      * @param oldC         previous body-to-ECI-frame coordinate transformation.
781      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
782      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
783      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
784      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
785      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
786      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
787      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
788      *                     resolved along body-frame axes, averaged over time interval.
789      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
790      *                     resolved along body-frame axes, averaged over time interval.
791      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
792      *                     resolved along body-frame axes, averaged over time interval.
793      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
794      *                     resolved along body-frame axes, averaged over time interval and
795      *                     expressed in radians per second (rad/s).
796      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
797      *                     resolved along body-frame axes, averaged over time interval and
798      *                     expressed in radians per second (rad/s).
799      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
800      *                     resolved along body-frame axes, averaged over time interval and
801      *                     expressed in radians per second (rad/s).
802      * @param result       instance where new estimated ECI frame containing new body position,
803      *                     velocity and coordinate transformation matrix will be stored.
804      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
805      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
806      *                                                       body-to-ECI-frame coordinate transformation matrix are
807      *                                                       invalid.
808      */
809     public void navigate(
810             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
811             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
812             final Acceleration fx, final Acceleration fy, final Acceleration fz,
813             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
814             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
815         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
816                 angularRateX, angularRateY, angularRateZ, result);
817     }
818 
819     /**
820      * Runs precision ECI-frame inertial navigation equations.
821      *
822      * @param timeInterval time interval between epochs expressed in seconds (s).
823      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
824      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
825      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
826      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
827      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
828      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
829      * @param oldC         previous body-to-ECI-frame coordinate transformation.
830      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
831      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
832      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
833      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
834      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
835      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
836      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
837      *                     resolved along body-frame axes, averaged over time interval and
838      *                     expressed in meters per squared second (m/s^2).
839      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
840      *                     resolved along body-frame axes, averaged over time interval and
841      *                     expressed in meters per squared second (m/s^2).
842      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
843      *                     resolved along body-frame axes, averaged over time interval and
844      *                     expressed in meters per squared second (m/s^2).
845      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
846      *                     resolved along body-frame axes, averaged over time interval.
847      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
848      *                     resolved along body-frame axes, averaged over time interval.
849      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
850      *                     resolved along body-frame axes, averaged over time interval.
851      * @param result       instance where new estimated ECI frame containing new body position,
852      *                     velocity and coordinate transformation matrix will be stored.
853      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
854      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
855      *                                                       body-to-ECI-frame coordinate transformation matrix are
856      *                                                       invalid.
857      */
858     public void navigate(
859             final double timeInterval, final double oldX, final double oldY, final double oldZ,
860             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
861             final double fx, final double fy, final double fz,
862             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
863             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
864         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
865                 angularRateX, angularRateY, angularRateZ, result);
866     }
867 
868     /**
869      * Runs precision ECI-frame inertial navigation equations.
870      *
871      * @param timeInterval time interval between epochs.
872      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
873      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
874      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
875      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
876      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
877      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
878      * @param oldC         previous body-to-ECI-frame coordinate transformation.
879      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
880      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
881      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
882      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
883      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
884      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
885      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
886      *                     resolved along body-frame axes, averaged over time interval and
887      *                     expressed in meters per squared second (m/s^2).
888      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
889      *                     resolved along body-frame axes, averaged over time interval and
890      *                     expressed in meters per squared second (m/s^2).
891      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
892      *                     resolved along body-frame axes, averaged over time interval and
893      *                     expressed in meters per squared second (m/s^2).
894      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
895      *                     resolved along body-frame axes, averaged over time interval.
896      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
897      *                     resolved along body-frame axes, averaged over time interval.
898      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
899      *                     resolved along body-frame axes, averaged over time interval.
900      * @param result       instance where new estimated ECI frame containing new body position,
901      *                     velocity and coordinate transformation matrix will be stored.
902      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
903      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
904      *                                                       body-to-ECI-frame coordinate transformation matrix are
905      *                                                       invalid.
906      */
907     public void navigate(
908             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
909             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
910             final double fx, final double fy, final double fz,
911             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
912             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
913         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
914                 angularRateX, angularRateY, angularRateZ, result);
915     }
916 
917     /**
918      * Runs precision ECI-frame inertial navigation equations.
919      *
920      * @param timeInterval time interval between epochs expressed in seconds (s).
921      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
922      *                     frame, resolved along ECI-frame axes.
923      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
924      *                     frame, resolved along ECI-frame axes.
925      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
926      *                     frame, resolved along ECI-frame axes.
927      * @param oldC         previous body-to-ECI-frame coordinate transformation.
928      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
929      *                     resolved along ECI-frame axes.
930      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
931      *                     resolved along ECI-frame axes.
932      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
933      *                     resolved along ECI-frame axes.
934      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
935      *                     resolved along body-frame axes, averaged over time interval and
936      *                     expressed in meters per squared second (m/s^2).
937      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
938      *                     resolved along body-frame axes, averaged over time interval and
939      *                     expressed in meters per squared second (m/s^2).
940      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
941      *                     resolved along body-frame axes, averaged over time interval and
942      *                     expressed in meters per squared second (m/s^2).
943      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
944      *                     resolved along body-frame axes, averaged over time interval and
945      *                     expressed in radians per second (rad/s).
946      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
947      *                     resolved along body-frame axes, averaged over time interval and
948      *                     expressed in radians per second (rad/s).
949      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
950      *                     resolved along body-frame axes, averaged over time interval and
951      *                     expressed in radians per second (rad/s).
952      * @param result       instance where new estimated ECI frame containing new body position,
953      *                     velocity and coordinate transformation matrix will be stored.
954      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
955      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
956      *                                                       body-to-ECI-frame coordinate transformation matrix are
957      *                                                       invalid.
958      */
959     public void navigate(
960             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
961             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
962             final double fx, final double fy, final double fz,
963             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
964             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
965         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, fx, fy, fz,
966                 angularRateX, angularRateY, angularRateZ, result);
967     }
968 
969     /**
970      * Runs precision ECI-frame inertial navigation equations.
971      *
972      * @param timeInterval time interval between epochs.
973      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
974      *                     frame, resolved along ECI-frame axes.
975      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
976      *                     frame, resolved along ECI-frame axes.
977      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
978      *                     frame, resolved along ECI-frame axes.
979      * @param oldC         previous body-to-ECI-frame coordinate transformation.
980      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
981      *                     resolved along ECI-frame axes.
982      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
983      *                     resolved along ECI-frame axes.
984      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
985      *                     resolved along ECI-frame axes.
986      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
987      *                     resolved along body-frame axes, averaged over time interval and
988      *                     expressed in meters per squared second (m/s^2).
989      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
990      *                     resolved along body-frame axes, averaged over time interval and
991      *                     expressed in meters per squared second (m/s^2).
992      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
993      *                     resolved along body-frame axes, averaged over time interval and
994      *                     expressed in meters per squared second (m/s^2).
995      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
996      *                     resolved along body-frame axes, averaged over time interval and
997      *                     expressed in radians per second (rad/s).
998      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
999      *                     resolved along body-frame axes, averaged over time interval and
1000      *                     expressed in radians per second (rad/s).
1001      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1002      *                     resolved along body-frame axes, averaged over time interval and
1003      *                     expressed in radians per second (rad/s).
1004      * @param result       instance where new estimated ECI frame containing new body position,
1005      *                     velocity and coordinate transformation matrix will be stored.
1006      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1007      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1008      *                                                       body-to-ECI-frame coordinate transformation matrix are
1009      *                                                       invalid.
1010      */
1011     public void navigate(
1012             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
1013             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
1014             final double fx, final double fy, final double fz,
1015             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
1016             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
1017         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, fx, fy, fz,
1018                 angularRateX, angularRateY, angularRateZ, result);
1019     }
1020 
1021     /**
1022      * Runs precision ECI-frame inertial navigation equations.
1023      *
1024      * @param timeInterval time interval between epochs expressed in seconds (s).
1025      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
1026      *                     frame, resolved along ECI-frame axes.
1027      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
1028      *                     frame, resolved along ECI-frame axes.
1029      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
1030      *                     frame, resolved along ECI-frame axes.
1031      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1032      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
1033      *                     resolved along ECI-frame axes.
1034      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
1035      *                     resolved along ECI-frame axes.
1036      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
1037      *                     resolved along ECI-frame axes.
1038      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1039      *                     resolved along body-frame axes, averaged over time interval.
1040      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1041      *                     resolved along body-frame axes, averaged over time interval.
1042      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1043      *                     resolved along body-frame axes, averaged over time interval.
1044      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1045      *                     resolved along body-frame axes, averaged over time interval.
1046      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1047      *                     resolved along body-frame axes, averaged over time interval.
1048      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1049      *                     resolved along body-frame axes, averaged over time interval.
1050      * @param result       instance where new estimated ECI frame containing new body position,
1051      *                     velocity and coordinate transformation matrix will be stored.
1052      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1053      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1054      *                                                       body-to-ECI-frame coordinate transformation matrix are
1055      *                                                       invalid.
1056      */
1057     public void navigate(
1058             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
1059             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
1060             final Acceleration fx, final Acceleration fy, final Acceleration fz,
1061             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
1062             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
1063         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, fx, fy, fz,
1064                 angularRateX, angularRateY, angularRateZ, result);
1065     }
1066 
1067     /**
1068      * Runs precision ECI-frame inertial navigation equations.
1069      *
1070      * @param timeInterval time interval between epochs.
1071      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
1072      *                     frame, resolved along ECI-frame axes.
1073      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
1074      *                     frame, resolved along ECI-frame axes.
1075      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
1076      *                     frame, resolved along ECI-frame axes.
1077      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1078      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
1079      *                     resolved along ECI-frame axes.
1080      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
1081      *                     resolved along ECI-frame axes.
1082      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
1083      *                     resolved along ECI-frame axes.
1084      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1085      *                     resolved along body-frame axes, averaged over time interval.
1086      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1087      *                     resolved along body-frame axes, averaged over time interval.
1088      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1089      *                     resolved along body-frame axes, averaged over time interval.
1090      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1091      *                     resolved along body-frame axes, averaged over time interval.
1092      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1093      *                     resolved along body-frame axes, averaged over time interval.
1094      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1095      *                     resolved along body-frame axes, averaged over time interval.
1096      * @param result       instance where new estimated ECI frame containing new body position,
1097      *                     velocity and coordinate transformation matrix will be stored.
1098      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1099      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1100      *                                                       body-to-ECI-frame coordinate transformation matrix are
1101      *                                                       invalid.
1102      */
1103     public void navigate(
1104             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
1105             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
1106             final Acceleration fx, final Acceleration fy, final Acceleration fz,
1107             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
1108             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
1109         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, fx, fy, fz,
1110                 angularRateX, angularRateY, angularRateZ, result);
1111     }
1112 
1113     /**
1114      * Runs precision ECI-frame inertial navigation equations.
1115      *
1116      * @param timeInterval time interval between epochs expressed in seconds (s).
1117      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
1118      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1119      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
1120      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1121      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
1122      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1123      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1124      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
1125      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1126      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
1127      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1128      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
1129      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1130      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1131      *                     resolved along body-frame axes, averaged over time interval.
1132      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1133      *                     resolved along body-frame axes, averaged over time interval.
1134      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1135      *                     resolved along body-frame axes, averaged over time interval.
1136      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1137      *                     resolved along body-frame axes, averaged over time interval.
1138      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1139      *                     resolved along body-frame axes, averaged over time interval.
1140      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1141      *                     resolved along body-frame axes, averaged over time interval.
1142      * @param result       instance where new estimated ECI frame containing new body position,
1143      *                     velocity and coordinate transformation matrix will be stored.
1144      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1145      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1146      *                                                       body-to-ECI-frame coordinate transformation matrix are
1147      *                                                       invalid.
1148      */
1149     public void navigate(
1150             final double timeInterval, final double oldX, final double oldY, final double oldZ,
1151             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
1152             final Acceleration fx, final Acceleration fy, final Acceleration fz,
1153             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
1154             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
1155         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
1156                 angularRateX, angularRateY, angularRateZ, result);
1157     }
1158 
1159     /**
1160      * Runs precision ECI-frame inertial navigation equations.
1161      *
1162      * @param timeInterval time interval between epochs.
1163      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
1164      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1165      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
1166      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1167      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
1168      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1169      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1170      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
1171      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1172      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
1173      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1174      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
1175      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1176      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1177      *                     resolved along body-frame axes, averaged over time interval.
1178      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1179      *                     resolved along body-frame axes, averaged over time interval.
1180      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1181      *                     resolved along body-frame axes, averaged over time interval.
1182      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1183      *                     resolved along body-frame axes, averaged over time interval.
1184      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1185      *                     resolved along body-frame axes, averaged over time interval.
1186      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1187      *                     resolved along body-frame axes, averaged over time interval.
1188      * @param result       instance where new estimated ECI frame containing new body position,
1189      *                     velocity and coordinate transformation matrix will be stored.
1190      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1191      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1192      *                                                       body-to-ECI-frame coordinate transformation matrix are
1193      *                                                       invalid.
1194      */
1195     public void navigate(
1196             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
1197             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
1198             final Acceleration fx, final Acceleration fy, final Acceleration fz,
1199             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
1200             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
1201         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
1202                 angularRateX, angularRateY, angularRateZ, result);
1203     }
1204 
1205     /**
1206      * Runs precision ECI-frame inertial navigation equations.
1207      *
1208      * @param timeInterval time interval between epochs expressed in seconds (s).
1209      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
1210      *                     frame, resolved along ECI-frame axes.
1211      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
1212      *                     frame, resolved along ECI-frame axes.
1213      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
1214      *                     frame, resolved along ECI-frame axes.
1215      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1216      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
1217      *                     resolved along ECI-frame axes.
1218      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
1219      *                     resolved along ECI-frame axes.
1220      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
1221      *                     resolved along ECI-frame axes.
1222      * @param kinematics   body kinematics containing specific forces and angular rates applied to
1223      *                     the body.
1224      * @param result       instance where new estimated ECI frame containing new body position,
1225      *                     velocity and coordinate transformation matrix will be stored.
1226      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1227      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1228      *                                                       body-to-ECI-frame coordinate transformation matrix are
1229      *                                                       invalid.
1230      */
1231     public void navigate(
1232             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
1233             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
1234             final BodyKinematics kinematics, final ECIFrame result) throws InertialNavigatorException,
1235             InvalidSourceAndDestinationFrameTypeException {
1236         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, kinematics, result);
1237     }
1238 
1239     /**
1240      * Runs precision ECI-frame inertial navigation equations.
1241      *
1242      * @param timeInterval time interval between epochs.
1243      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
1244      *                     frame, resolved along ECI-frame axes.
1245      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
1246      *                     frame, resolved along ECI-frame axes.
1247      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
1248      *                     frame, resolved along ECI-frame axes.
1249      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1250      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
1251      *                     resolved along ECI-frame axes.
1252      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
1253      *                     resolved along ECI-frame axes.
1254      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
1255      *                     resolved along ECI-frame axes.
1256      * @param kinematics   body kinematics containing specific forces and angular rates applied to
1257      *                     the body.
1258      * @param result       instance where new estimated ECI frame containing new body position,
1259      *                     velocity and coordinate transformation matrix will be stored.
1260      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1261      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1262      *                                                       body-to-ECI-frame coordinate transformation matrix are
1263      *                                                       invalid.
1264      */
1265     public void navigate(
1266             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
1267             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
1268             final BodyKinematics kinematics, final ECIFrame result) throws InertialNavigatorException,
1269             InvalidSourceAndDestinationFrameTypeException {
1270         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, kinematics, result);
1271     }
1272 
1273     /**
1274      * Runs precision ECI-frame inertial navigation equations.
1275      *
1276      * @param timeInterval time interval between epochs expressed in seconds (s).
1277      * @param oldFrame     previous ECI frame containing body position, velocity and
1278      *                     coordinate transformation matrix.
1279      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1280      *                     resolved along body-frame axes, averaged over time interval and
1281      *                     expressed in meters per squared second (m/s^2).
1282      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1283      *                     resolved along body-frame axes, averaged over time interval and
1284      *                     expressed in meters per squared second (m/s^2).
1285      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1286      *                     resolved along body-frame axes, averaged over time interval and
1287      *                     expressed in meters per squared second (m/s^2).
1288      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1289      *                     resolved along body-frame axes, averaged over time interval and
1290      *                     expressed in radians per second (rad/s).
1291      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1292      *                     resolved along body-frame axes, averaged over time interval and
1293      *                     expressed in radians per second (rad/s).
1294      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1295      *                     resolved along body-frame axes, averaged over time interval and
1296      *                     expressed in radians per second (rad/s).
1297      * @param result       instance where new estimated ECI frame containing new body position,
1298      *                     velocity and coordinate transformation matrix will be stored.
1299      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
1300      */
1301     public void navigate(
1302             final double timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
1303             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
1304             throws InertialNavigatorException {
1305         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
1306     }
1307 
1308     /**
1309      * Runs precision ECI-frame inertial navigation equations.
1310      *
1311      * @param timeInterval time interval between epochs.
1312      * @param oldFrame     previous ECI frame containing body position, velocity and
1313      *                     coordinate transformation matrix.
1314      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1315      *                     resolved along body-frame axes, averaged over time interval and
1316      *                     expressed in meters per squared second (m/s^2).
1317      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1318      *                     resolved along body-frame axes, averaged over time interval and
1319      *                     expressed in meters per squared second (m/s^2).
1320      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1321      *                     resolved along body-frame axes, averaged over time interval and
1322      *                     expressed in meters per squared second (m/s^2).
1323      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1324      *                     resolved along body-frame axes, averaged over time interval and
1325      *                     expressed in radians per second (rad/s).
1326      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1327      *                     resolved along body-frame axes, averaged over time interval and
1328      *                     expressed in radians per second (rad/s).
1329      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1330      *                     resolved along body-frame axes, averaged over time interval and
1331      *                     expressed in radians per second (rad/s).
1332      * @param result       instance where new estimated ECI frame containing new body position,
1333      *                     velocity and coordinate transformation matrix will be stored.
1334      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
1335      */
1336     public void navigate(
1337             final Time timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
1338             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
1339             throws InertialNavigatorException {
1340         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
1341     }
1342 
1343     /**
1344      * Runs precision ECI-frame inertial navigation equations.
1345      *
1346      * @param timeInterval time interval between epochs expressed in seconds (s).
1347      * @param oldFrame     previous ECI frame containing body position, velocity and
1348      *                     coordinate transformation matrix.
1349      * @param kinematics   body kinematics containing specific forces and angular rates applied to
1350      *                     the body.
1351      * @param result       instance where new estimated ECI frame containing new body position,
1352      *                     velocity and coordinate transformation matrix will be stored.
1353      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
1354      */
1355     public void navigate(
1356             final double timeInterval, final ECIFrame oldFrame, final BodyKinematics kinematics, final ECIFrame result)
1357             throws InertialNavigatorException {
1358         navigateECI(timeInterval, oldFrame, kinematics, result);
1359     }
1360 
1361     /**
1362      * Runs precision ECI-frame inertial navigation equations.
1363      *
1364      * @param timeInterval time interval between epochs.
1365      * @param oldFrame     previous ECI frame containing body position, velocity and
1366      *                     coordinate transformation matrix.
1367      * @param kinematics   body kinematics containing specific forces and angular rates applied to
1368      *                     the body.
1369      * @param result       instance where new estimated ECI frame containing new body position,
1370      *                     velocity and coordinate transformation matrix will be stored.
1371      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
1372      */
1373     public void navigate(
1374             final Time timeInterval, final ECIFrame oldFrame, final BodyKinematics kinematics, final ECIFrame result)
1375             throws InertialNavigatorException {
1376         navigateECI(timeInterval, oldFrame, kinematics, result);
1377     }
1378 
1379     /**
1380      * Runs precision ECI-frame inertial navigation equations.
1381      *
1382      * @param timeInterval time interval between epochs expressed in seconds (s).
1383      * @param oldFrame     previous ECI frame containing body position, velocity and
1384      *                     coordinate transformation matrix.
1385      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1386      *                     resolved along body-frame axes, averaged over time interval.
1387      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1388      *                     resolved along body-frame axes, averaged over time interval.
1389      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1390      *                     resolved along body-frame axes, averaged over time interval.
1391      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1392      *                     resolved along body-frame axes, averaged over time interval and
1393      *                     expressed in radians per second (rad/s).
1394      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1395      *                     resolved along body-frame axes, averaged over time interval and
1396      *                     expressed in radians per second (rad/s).
1397      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1398      *                     resolved along body-frame axes, averaged over time interval and
1399      *                     expressed in radians per second (rad/s).
1400      * @param result       instance where new estimated ECI frame containing new body position,
1401      *                     velocity and coordinate transformation matrix will be stored.
1402      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
1403      */
1404     public void navigate(
1405             final double timeInterval, final ECIFrame oldFrame,
1406             final Acceleration fx, final Acceleration fy, final Acceleration fz,
1407             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
1408             throws InertialNavigatorException {
1409         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
1410     }
1411 
1412     /**
1413      * Runs precision ECI-frame inertial navigation equations.
1414      *
1415      * @param timeInterval time interval between epochs.
1416      * @param oldFrame     previous ECI frame containing body position, velocity and
1417      *                     coordinate transformation matrix.
1418      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1419      *                     resolved along body-frame axes, averaged over time interval.
1420      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1421      *                     resolved along body-frame axes, averaged over time interval.
1422      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1423      *                     resolved along body-frame axes, averaged over time interval.
1424      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1425      *                     resolved along body-frame axes, averaged over time interval and
1426      *                     expressed in radians per second (rad/s).
1427      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1428      *                     resolved along body-frame axes, averaged over time interval and
1429      *                     expressed in radians per second (rad/s).
1430      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1431      *                     resolved along body-frame axes, averaged over time interval and
1432      *                     expressed in radians per second (rad/s).
1433      * @param result       instance where new estimated ECI frame containing new body position,
1434      *                     velocity and coordinate transformation matrix will be stored.
1435      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
1436      */
1437     public void navigate(
1438             final Time timeInterval, final ECIFrame oldFrame,
1439             final Acceleration fx, final Acceleration fy, final Acceleration fz,
1440             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
1441             throws InertialNavigatorException {
1442         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
1443     }
1444 
1445     /**
1446      * Runs precision ECI-frame inertial navigation equations.
1447      *
1448      * @param timeInterval time interval between epochs expressed in seconds (s).
1449      * @param oldFrame     previous ECI frame containing body position, velocity and
1450      *                     coordinate transformation matrix.
1451      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1452      *                     resolved along body-frame axes, averaged over time interval and
1453      *                     expressed in meters per squared second (m/s^2).
1454      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1455      *                     resolved along body-frame axes, averaged over time interval and
1456      *                     expressed in meters per squared second (m/s^2).
1457      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1458      *                     resolved along body-frame axes, averaged over time interval and
1459      *                     expressed in meters per squared second (m/s^2).
1460      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1461      *                     resolved along body-frame axes, averaged over time interval.
1462      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1463      *                     resolved along body-frame axes, averaged over time interval.
1464      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1465      *                     resolved along body-frame axes, averaged over time interval.
1466      * @param result       instance where new estimated ECI frame containing new body position,
1467      *                     velocity and coordinate transformation matrix will be stored.
1468      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
1469      */
1470     public void navigate(
1471             final double timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
1472             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
1473             final ECIFrame result) throws InertialNavigatorException {
1474         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
1475     }
1476 
1477     /**
1478      * Runs precision ECI-frame inertial navigation equations.
1479      *
1480      * @param timeInterval time interval between epochs.
1481      * @param oldFrame     previous ECI frame containing body position, velocity and
1482      *                     coordinate transformation matrix.
1483      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1484      *                     resolved along body-frame axes, averaged over time interval and
1485      *                     expressed in meters per squared second (m/s^2).
1486      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1487      *                     resolved along body-frame axes, averaged over time interval and
1488      *                     expressed in meters per squared second (m/s^2).
1489      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1490      *                     resolved along body-frame axes, averaged over time interval and
1491      *                     expressed in meters per squared second (m/s^2).
1492      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1493      *                     resolved along body-frame axes, averaged over time interval.
1494      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1495      *                     resolved along body-frame axes, averaged over time interval.
1496      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1497      *                     resolved along body-frame axes, averaged over time interval.
1498      * @param result       instance where new estimated ECI frame containing new body position,
1499      *                     velocity and coordinate transformation matrix will be stored.
1500      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
1501      */
1502     public void navigate(
1503             final Time timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
1504             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
1505             final ECIFrame result) throws InertialNavigatorException {
1506         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
1507     }
1508 
1509     /**
1510      * Runs precision ECI-frame inertial navigation equations.
1511      *
1512      * @param timeInterval time interval between epochs expressed in seconds (s).
1513      * @param oldFrame     previous ECI frame containing body position, velocity and
1514      *                     coordinate transformation matrix.
1515      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1516      *                     resolved along body-frame axes, averaged over time interval.
1517      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1518      *                     resolved along body-frame axes, averaged over time interval.
1519      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1520      *                     resolved along body-frame axes, averaged over time interval.
1521      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1522      *                     resolved along body-frame axes, averaged over time interval.
1523      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1524      *                     resolved along body-frame axes, averaged over time interval.
1525      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1526      *                     resolved along body-frame axes, averaged over time interval.
1527      * @param result       instance where new estimated ECI frame containing new body position,
1528      *                     velocity and coordinate transformation matrix will be stored.
1529      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
1530      */
1531     public void navigate(
1532             final double timeInterval, final ECIFrame oldFrame,
1533             final Acceleration fx, final Acceleration fy, final Acceleration fz,
1534             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
1535             final ECIFrame result) throws InertialNavigatorException {
1536         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
1537     }
1538 
1539     /**
1540      * Runs precision ECI-frame inertial navigation equations.
1541      *
1542      * @param timeInterval time interval between epochs.
1543      * @param oldFrame     previous ECI frame containing body position, velocity and
1544      *                     coordinate transformation matrix.
1545      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1546      *                     resolved along body-frame axes, averaged over time interval.
1547      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1548      *                     resolved along body-frame axes, averaged over time interval.
1549      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1550      *                     resolved along body-frame axes, averaged over time interval.
1551      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1552      *                     resolved along body-frame axes, averaged over time interval.
1553      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1554      *                     resolved along body-frame axes, averaged over time interval.
1555      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1556      *                     resolved along body-frame axes, averaged over time interval.
1557      * @param result       instance where new estimated ECI frame containing new body position,
1558      *                     velocity and coordinate transformation matrix will be stored.
1559      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
1560      */
1561     public void navigate(
1562             final Time timeInterval, final ECIFrame oldFrame,
1563             final Acceleration fx, final Acceleration fy, final Acceleration fz,
1564             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
1565             final ECIFrame result) throws InertialNavigatorException {
1566         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
1567     }
1568 
1569     /**
1570      * Runs precision ECI-frame inertial navigation equations.
1571      *
1572      * @param timeInterval time interval between epochs expressed in seconds (s).
1573      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
1574      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1575      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
1576      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1577      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
1578      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1579      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1580      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
1581      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1582      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
1583      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1584      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
1585      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1586      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1587      *                     resolved along body-frame axes, averaged over time interval and
1588      *                     expressed in meters per squared second (m/s^2).
1589      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1590      *                     resolved along body-frame axes, averaged over time interval and
1591      *                     expressed in meters per squared second (m/s^2).
1592      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1593      *                     resolved along body-frame axes, averaged over time interval and
1594      *                     expressed in meters per squared second (m/s^2).
1595      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1596      *                     resolved along body-frame axes, averaged over time interval and
1597      *                     expressed in radians per second (rad/s).
1598      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1599      *                     resolved along body-frame axes, averaged over time interval and
1600      *                     expressed in radians per second (rad/s).
1601      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1602      *                     resolved along body-frame axes, averaged over time interval and
1603      *                     expressed in radians per second (rad/s).
1604      * @return estimated ECI frame containing new body position, velocity and coordinate
1605      * transformation matrix.
1606      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1607      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1608      *                                                       body-to-ECI-frame coordinate transformation matrix are
1609      *                                                       invalid.
1610      */
1611     public ECIFrame navigateAndReturnNew(
1612             final double timeInterval, final double oldX, final double oldY, final double oldZ,
1613             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
1614             final double fx, final double fy, final double fz,
1615             final double angularRateX, final double angularRateY, final double angularRateZ)
1616             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
1617         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
1618                 angularRateX, angularRateY, angularRateZ);
1619     }
1620 
1621     /**
1622      * Runs precision ECI-frame inertial navigation equations.
1623      *
1624      * @param timeInterval time interval between epochs.
1625      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
1626      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1627      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
1628      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1629      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
1630      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1631      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1632      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
1633      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1634      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
1635      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1636      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
1637      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1638      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1639      *                     resolved along body-frame axes, averaged over time interval and
1640      *                     expressed in meters per squared second (m/s^2).
1641      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1642      *                     resolved along body-frame axes, averaged over time interval and
1643      *                     expressed in meters per squared second (m/s^2).
1644      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1645      *                     resolved along body-frame axes, averaged over time interval and
1646      *                     expressed in meters per squared second (m/s^2).
1647      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1648      *                     resolved along body-frame axes, averaged over time interval and
1649      *                     expressed in radians per second (rad/s).
1650      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1651      *                     resolved along body-frame axes, averaged over time interval and
1652      *                     expressed in radians per second (rad/s).
1653      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1654      *                     resolved along body-frame axes, averaged over time interval and
1655      *                     expressed in radians per second (rad/s).
1656      * @return estimated ECI frame containing new body position, velocity and coordinate
1657      * transformation matrix.
1658      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1659      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1660      *                                                       body-to-ECI-frame coordinate transformation matrix are
1661      *                                                       invalid.
1662      */
1663     public ECIFrame navigateAndReturnNew(
1664             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
1665             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
1666             final double fx, final double fy, final double fz,
1667             final double angularRateX, final double angularRateY, final double angularRateZ)
1668             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
1669         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
1670                 angularRateX, angularRateY, angularRateZ);
1671     }
1672 
1673     /**
1674      * Runs precision ECI-frame inertial navigation equations.
1675      *
1676      * @param timeInterval time interval between epochs expressed in seconds (s).
1677      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
1678      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1679      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
1680      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1681      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
1682      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1683      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1684      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
1685      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1686      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
1687      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1688      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
1689      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1690      * @param kinematics   body kinematics containing specific forces and angular rates applied to
1691      *                     the body.
1692      * @return estimated ECI frame containing new body position, velocity and coordinate
1693      * transformation matrix.
1694      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1695      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1696      *                                                       body-to-ECI-frame coordinate transformation matrix are
1697      *                                                       invalid.
1698      */
1699     public ECIFrame navigateAndReturnNew(
1700             final double timeInterval, final double oldX, final double oldY, final double oldZ,
1701             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
1702             final BodyKinematics kinematics) throws InertialNavigatorException,
1703             InvalidSourceAndDestinationFrameTypeException {
1704         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, kinematics);
1705     }
1706 
1707     /**
1708      * Runs precision ECI-frame inertial navigation equations.
1709      *
1710      * @param timeInterval time interval between epochs.
1711      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
1712      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1713      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
1714      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1715      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
1716      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1717      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1718      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
1719      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1720      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
1721      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1722      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
1723      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1724      * @param kinematics   body kinematics containing specific forces and angular rates applied to
1725      *                     the body.
1726      * @return estimated ECI frame containing new body position, velocity and coordinate
1727      * transformation matrix.
1728      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1729      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1730      *                                                       body-to-ECI-frame coordinate transformation matrix are
1731      *                                                       invalid.
1732      */
1733     public ECIFrame navigateAndReturnNew(
1734             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
1735             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
1736             final BodyKinematics kinematics) throws InertialNavigatorException,
1737             InvalidSourceAndDestinationFrameTypeException {
1738         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, kinematics);
1739     }
1740 
1741     /**
1742      * Runs precision ECI-frame inertial navigation equations.
1743      *
1744      * @param timeInterval time interval between epochs expressed in seconds (s).
1745      * @param oldPosition  previous cartesian position of body frame with respect ECI
1746      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1747      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1748      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
1749      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1750      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
1751      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1752      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
1753      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1754      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1755      *                     resolved along body-frame axes, averaged over time interval and
1756      *                     expressed in meters per squared second (m/s^2).
1757      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1758      *                     resolved along body-frame axes, averaged over time interval and
1759      *                     expressed in meters per squared second (m/s^2).
1760      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1761      *                     resolved along body-frame axes, averaged over time interval and
1762      *                     expressed in meters per squared second (m/s^2).
1763      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1764      *                     resolved along body-frame axes, averaged over time interval and
1765      *                     expressed in radians per second (rad/s).
1766      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1767      *                     resolved along body-frame axes, averaged over time interval and
1768      *                     expressed in radians per second (rad/s).
1769      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1770      *                     resolved along body-frame axes, averaged over time interval and
1771      *                     expressed in radians per second (rad/s).
1772      * @return estimated ECI frame containing new body position, velocity and coordinate
1773      * transformation matrix.
1774      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1775      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1776      *                                                       body-to-ECI-frame coordinate transformation matrix are
1777      *                                                       invalid.
1778      */
1779     public ECIFrame navigateAndReturnNew(
1780             final double timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
1781             final double oldVx, final double oldVy, final double oldVz,
1782             final double fx, final double fy, final double fz,
1783             final double angularRateX, final double angularRateY, final double angularRateZ)
1784             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
1785         return navigateECIAndReturnNew(timeInterval, oldPosition, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
1786                 angularRateX, angularRateY, angularRateZ);
1787     }
1788 
1789     /**
1790      * Runs precision ECI-frame inertial navigation equations.
1791      *
1792      * @param timeInterval time interval between epochs.
1793      * @param oldPosition  previous cartesian position of body frame with respect ECI
1794      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1795      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1796      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
1797      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1798      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
1799      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1800      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
1801      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1802      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1803      *                     resolved along body-frame axes, averaged over time interval and
1804      *                     expressed in meters per squared second (m/s^2).
1805      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1806      *                     resolved along body-frame axes, averaged over time interval and
1807      *                     expressed in meters per squared second (m/s^2).
1808      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1809      *                     resolved along body-frame axes, averaged over time interval and
1810      *                     expressed in meters per squared second (m/s^2).
1811      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1812      *                     resolved along body-frame axes, averaged over time interval and
1813      *                     expressed in radians per second (rad/s).
1814      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1815      *                     resolved along body-frame axes, averaged over time interval and
1816      *                     expressed in radians per second (rad/s).
1817      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1818      *                     resolved along body-frame axes, averaged over time interval and
1819      *                     expressed in radians per second (rad/s).
1820      * @return estimated ECI frame containing new body position, velocity and coordinate
1821      * transformation matrix.
1822      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1823      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1824      *                                                       body-to-ECI-frame coordinate transformation matrix are
1825      *                                                       invalid.
1826      */
1827     public ECIFrame navigateAndReturnNew(
1828             final Time timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
1829             final double oldVx, final double oldVy, final double oldVz,
1830             final double fx, final double fy, final double fz,
1831             final double angularRateX, final double angularRateY, final double angularRateZ)
1832             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
1833         return navigateECIAndReturnNew(timeInterval, oldPosition, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
1834                 angularRateX, angularRateY, angularRateZ);
1835     }
1836 
1837     /**
1838      * Runs precision ECI-frame inertial navigation equations.
1839      *
1840      * @param timeInterval time interval between epochs expressed in seconds (s).
1841      * @param oldPosition  previous cartesian position of body frame with respect ECI
1842      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1843      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1844      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
1845      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1846      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
1847      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1848      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
1849      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1850      * @param kinematics   body kinematics containing specific forces and angular rates applied to
1851      *                     the body.
1852      * @return estimated ECI frame containing new body position, velocity and coordinate
1853      * transformation matrix.
1854      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1855      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1856      *                                                       body-to-ECI-frame coordinate transformation matrix are
1857      *                                                       invalid.
1858      */
1859     public ECIFrame navigateAndReturnNew(
1860             final double timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
1861             final double oldVx, final double oldVy, final double oldVz, final BodyKinematics kinematics)
1862             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
1863         return navigateECIAndReturnNew(timeInterval, oldPosition, oldC, oldVx, oldVy, oldVz, kinematics);
1864     }
1865 
1866     /**
1867      * Runs precision ECI-frame inertial navigation equations.
1868      *
1869      * @param timeInterval time interval between epochs.
1870      * @param oldPosition  previous cartesian position of body frame with respect ECI
1871      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
1872      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1873      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
1874      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1875      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
1876      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1877      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
1878      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1879      * @param kinematics   body kinematics containing specific forces and angular rates applied to
1880      *                     the body.
1881      * @return estimated ECI frame containing new body position, velocity and coordinate
1882      * transformation matrix.
1883      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1884      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1885      *                                                       body-to-ECI-frame coordinate transformation matrix are
1886      *                                                       invalid.
1887      */
1888     public ECIFrame navigateAndReturnNew(
1889             final Time timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
1890             final double oldVx, final double oldVy, final double oldVz, final BodyKinematics kinematics)
1891             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
1892         return navigateECIAndReturnNew(timeInterval, oldPosition, oldC, oldVx, oldVy, oldVz, kinematics);
1893     }
1894 
1895     /**
1896      * Runs precision ECI-frame inertial navigation equations.
1897      *
1898      * @param timeInterval time interval between epochs expressed in seconds (s).
1899      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
1900      *                     frame, resolved along ECI-frame axes.
1901      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
1902      *                     frame, resolved along ECI-frame axes.
1903      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
1904      *                     frame, resolved along ECI-frame axes.
1905      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1906      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
1907      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1908      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
1909      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1910      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
1911      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1912      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1913      *                     resolved along body-frame axes, averaged over time interval and
1914      *                     expressed in meters per squared second (m/s^2).
1915      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1916      *                     resolved along body-frame axes, averaged over time interval and
1917      *                     expressed in meters per squared second (m/s^2).
1918      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1919      *                     resolved along body-frame axes, averaged over time interval and
1920      *                     expressed in meters per squared second (m/s^2).
1921      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1922      *                     resolved along body-frame axes, averaged over time interval and
1923      *                     expressed in radians per second (rad/s).
1924      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1925      *                     resolved along body-frame axes, averaged over time interval and
1926      *                     expressed in radians per second (rad/s).
1927      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1928      *                     resolved along body-frame axes, averaged over time interval and
1929      *                     expressed in radians per second (rad/s).
1930      * @return estimated ECI frame containing new body position, velocity and coordinate
1931      * transformation matrix.
1932      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1933      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1934      *                                                       body-to-ECI-frame coordinate transformation matrix are
1935      *                                                       invalid.
1936      */
1937     public ECIFrame navigateAndReturnNew(
1938             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
1939             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
1940             final double fx, final double fy, final double fz,
1941             final double angularRateX, final double angularRateY, final double angularRateZ)
1942             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
1943         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
1944                 angularRateX, angularRateY, angularRateZ);
1945     }
1946 
1947     /**
1948      * Runs precision ECI-frame inertial navigation equations.
1949      *
1950      * @param timeInterval time interval between epochs.
1951      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
1952      *                     frame, resolved along ECI-frame axes.
1953      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
1954      *                     frame, resolved along ECI-frame axes.
1955      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
1956      *                     frame, resolved along ECI-frame axes.
1957      * @param oldC         previous body-to-ECI-frame coordinate transformation.
1958      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
1959      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1960      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
1961      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1962      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
1963      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
1964      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
1965      *                     resolved along body-frame axes, averaged over time interval and
1966      *                     expressed in meters per squared second (m/s^2).
1967      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
1968      *                     resolved along body-frame axes, averaged over time interval and
1969      *                     expressed in meters per squared second (m/s^2).
1970      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
1971      *                     resolved along body-frame axes, averaged over time interval and
1972      *                     expressed in meters per squared second (m/s^2).
1973      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
1974      *                     resolved along body-frame axes, averaged over time interval and
1975      *                     expressed in radians per second (rad/s).
1976      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
1977      *                     resolved along body-frame axes, averaged over time interval and
1978      *                     expressed in radians per second (rad/s).
1979      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
1980      *                     resolved along body-frame axes, averaged over time interval and
1981      *                     expressed in radians per second (rad/s).
1982      * @return estimated ECI frame containing new body position, velocity and coordinate
1983      * transformation matrix.
1984      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
1985      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
1986      *                                                       body-to-ECI-frame coordinate transformation matrix are
1987      *                                                       invalid.
1988      */
1989     public ECIFrame navigateAndReturnNew(
1990             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
1991             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
1992             final double fx, final double fy, final double fz,
1993             final double angularRateX, final double angularRateY, final double angularRateZ)
1994             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
1995         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
1996                 angularRateX, angularRateY, angularRateZ);
1997     }
1998 
1999     /**
2000      * Runs precision ECI-frame inertial navigation equations.
2001      *
2002      * @param timeInterval time interval between epochs expressed in seconds (s).
2003      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2004      *                     frame, resolved along ECI-frame axes.
2005      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2006      *                     frame, resolved along ECI-frame axes.
2007      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2008      *                     frame, resolved along ECI-frame axes.
2009      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2010      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
2011      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2012      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
2013      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2014      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
2015      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2016      * @param kinematics   body kinematics containing specific forces and angular rates applied to
2017      *                     the body.
2018      * @return estimated ECI frame containing new body position, velocity and coordinate
2019      * transformation matrix.
2020      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2021      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2022      *                                                       body-to-ECI-frame coordinate transformation matrix are
2023      *                                                       invalid.
2024      */
2025     public ECIFrame navigateAndReturnNew(
2026             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
2027             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
2028             final BodyKinematics kinematics) throws InertialNavigatorException,
2029             InvalidSourceAndDestinationFrameTypeException {
2030         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, kinematics);
2031     }
2032 
2033     /**
2034      * Runs precision ECI-frame inertial navigation equations.
2035      *
2036      * @param timeInterval time interval between epochs.
2037      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2038      *                     frame, resolved along ECI-frame axes.
2039      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2040      *                     frame, resolved along ECI-frame axes.
2041      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2042      *                     frame, resolved along ECI-frame axes.
2043      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2044      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
2045      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2046      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
2047      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2048      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
2049      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2050      * @param kinematics   body kinematics containing specific forces and angular rates applied to
2051      *                     the body.
2052      * @return estimated ECI frame containing new body position, velocity and coordinate
2053      * transformation matrix.
2054      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2055      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2056      *                                                       body-to-ECI-frame coordinate transformation matrix are
2057      *                                                       invalid.
2058      */
2059     public ECIFrame navigateAndReturnNew(
2060             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
2061             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
2062             final BodyKinematics kinematics) throws InertialNavigatorException,
2063             InvalidSourceAndDestinationFrameTypeException {
2064         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, kinematics);
2065     }
2066 
2067     /**
2068      * Runs precision ECI-frame inertial navigation equations.
2069      *
2070      * @param timeInterval time interval between epochs expressed in seconds (s).
2071      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2072      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2073      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2074      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2075      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2076      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2077      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2078      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
2079      *                     resolved along ECI-frame axes.
2080      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
2081      *                     resolved along ECI-frame axes.
2082      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
2083      *                     resolved along ECI-frame axes.
2084      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2085      *                     resolved along body-frame axes, averaged over time interval and
2086      *                     expressed in meters per squared second (m/s^2).
2087      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2088      *                     resolved along body-frame axes, averaged over time interval and
2089      *                     expressed in meters per squared second (m/s^2).
2090      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2091      *                     resolved along body-frame axes, averaged over time interval and
2092      *                     expressed in meters per squared second (m/s^2).
2093      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2094      *                     resolved along body-frame axes, averaged over time interval and
2095      *                     expressed in radians per second (rad/s).
2096      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2097      *                     resolved along body-frame axes, averaged over time interval and
2098      *                     expressed in radians per second (rad/s).
2099      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2100      *                     resolved along body-frame axes, averaged over time interval and
2101      *                     expressed in radians per second (rad/s).
2102      * @return estimated ECI frame containing new body position, velocity and coordinate
2103      * transformation matrix.
2104      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2105      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2106      *                                                       body-to-ECI-frame coordinate transformation matrix are
2107      *                                                       invalid.
2108      */
2109     public ECIFrame navigateAndReturnNew(
2110             final double timeInterval, final double oldX, final double oldY, final double oldZ,
2111             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
2112             final double fx, final double fy, final double fz,
2113             final double angularRateX, final double angularRateY, final double angularRateZ)
2114             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
2115         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
2116                 fx, fy, fz, angularRateX, angularRateY, angularRateZ);
2117     }
2118 
2119     /**
2120      * Runs precision ECI-frame inertial navigation equations.
2121      *
2122      * @param timeInterval time interval between epochs.
2123      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2124      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2125      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2126      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2127      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2128      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2129      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2130      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
2131      *                     resolved along ECI-frame axes.
2132      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
2133      *                     resolved along ECI-frame axes.
2134      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
2135      *                     resolved along ECI-frame axes.
2136      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2137      *                     resolved along body-frame axes, averaged over time interval and
2138      *                     expressed in meters per squared second (m/s^2).
2139      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2140      *                     resolved along body-frame axes, averaged over time interval and
2141      *                     expressed in meters per squared second (m/s^2).
2142      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2143      *                     resolved along body-frame axes, averaged over time interval and
2144      *                     expressed in meters per squared second (m/s^2).
2145      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2146      *                     resolved along body-frame axes, averaged over time interval and
2147      *                     expressed in radians per second (rad/s).
2148      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2149      *                     resolved along body-frame axes, averaged over time interval and
2150      *                     expressed in radians per second (rad/s).
2151      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2152      *                     resolved along body-frame axes, averaged over time interval and
2153      *                     expressed in radians per second (rad/s).
2154      * @return estimated ECI frame containing new body position, velocity and coordinate
2155      * transformation matrix.
2156      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2157      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2158      *                                                       body-to-ECI-frame coordinate transformation matrix are
2159      *                                                       invalid.
2160      */
2161     public ECIFrame navigateAndReturnNew(
2162             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
2163             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
2164             final double fx, final double fy, final double fz,
2165             final double angularRateX, final double angularRateY, final double angularRateZ)
2166             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
2167         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
2168                 fx, fy, fz, angularRateX, angularRateY, angularRateZ);
2169     }
2170 
2171     /**
2172      * Runs precision ECI-frame inertial navigation equations.
2173      *
2174      * @param timeInterval time interval between epochs expressed in seconds (s).
2175      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2176      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2177      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2178      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2179      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2180      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2181      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2182      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
2183      *                     resolved along ECI-frame axes.
2184      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
2185      *                     resolved along ECI-frame axes.
2186      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
2187      *                     resolved along ECI-frame axes.
2188      * @param kinematics   body kinematics containing specific forces and angular rates applied to
2189      *                     the body.
2190      * @return estimated ECI frame containing new body position, velocity and coordinate
2191      * transformation matrix.
2192      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2193      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2194      *                                                       body-to-ECI-frame coordinate transformation matrix are
2195      *                                                       invalid.
2196      */
2197     public ECIFrame navigateAndReturnNew(
2198             final double timeInterval, final double oldX, final double oldY, final double oldZ,
2199             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
2200             final BodyKinematics kinematics) throws InertialNavigatorException,
2201             InvalidSourceAndDestinationFrameTypeException {
2202         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
2203                 kinematics);
2204     }
2205 
2206     /**
2207      * Runs precision ECI-frame inertial navigation equations.
2208      *
2209      * @param timeInterval time interval between epochs expressed in seconds (s).
2210      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2211      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2212      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2213      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2214      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2215      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2216      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2217      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
2218      *                     resolved along ECI-frame axes.
2219      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
2220      *                     resolved along ECI-frame axes.
2221      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
2222      *                     resolved along ECI-frame axes.
2223      * @param kinematics   body kinematics containing specific forces and angular rates applied to
2224      *                     the body.
2225      * @return estimated ECI frame containing new body position, velocity and coordinate
2226      * transformation matrix.
2227      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2228      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2229      *                                                       body-to-ECI-frame coordinate transformation matrix are
2230      *                                                       invalid.
2231      */
2232     public ECIFrame navigateAndReturnNew(
2233             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
2234             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
2235             final BodyKinematics kinematics) throws InertialNavigatorException,
2236             InvalidSourceAndDestinationFrameTypeException {
2237         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
2238                 kinematics);
2239     }
2240 
2241     /**
2242      * Runs precision ECI-frame inertial navigation equations.
2243      *
2244      * @param timeInterval time interval between epochs expressed in seconds (s).
2245      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2246      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2247      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2248      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2249      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2250      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2251      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2252      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
2253      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2254      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
2255      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2256      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
2257      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2258      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2259      *                     resolved along body-frame axes, averaged over time interval.
2260      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2261      *                     resolved along body-frame axes, averaged over time interval.
2262      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2263      *                     resolved along body-frame axes, averaged over time interval.
2264      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2265      *                     resolved along body-frame axes, averaged over time interval and
2266      *                     expressed in radians per second (rad/s).
2267      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2268      *                     resolved along body-frame axes, averaged over time interval and
2269      *                     expressed in radians per second (rad/s).
2270      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2271      *                     resolved along body-frame axes, averaged over time interval and
2272      *                     expressed in radians per second (rad/s).
2273      * @return estimated ECI frame containing new body position, velocity and coordinate
2274      * transformation matrix.
2275      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2276      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2277      *                                                       body-to-ECI-frame coordinate transformation matrix are
2278      *                                                       invalid.
2279      */
2280     public ECIFrame navigateAndReturnNew(
2281             final double timeInterval, final double oldX, final double oldY, final double oldZ,
2282             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
2283             final Acceleration fx, final Acceleration fy, final Acceleration fz,
2284             final double angularRateX, final double angularRateY, final double angularRateZ)
2285             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
2286         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
2287                 angularRateX, angularRateY, angularRateZ);
2288     }
2289 
2290     /**
2291      * Runs precision ECI-frame inertial navigation equations.
2292      *
2293      * @param timeInterval time interval between epochs.
2294      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2295      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2296      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2297      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2298      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2299      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2300      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2301      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
2302      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2303      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
2304      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2305      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
2306      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2307      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2308      *                     resolved along body-frame axes, averaged over time interval.
2309      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2310      *                     resolved along body-frame axes, averaged over time interval.
2311      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2312      *                     resolved along body-frame axes, averaged over time interval.
2313      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2314      *                     resolved along body-frame axes, averaged over time interval and
2315      *                     expressed in radians per second (rad/s).
2316      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2317      *                     resolved along body-frame axes, averaged over time interval and
2318      *                     expressed in radians per second (rad/s).
2319      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2320      *                     resolved along body-frame axes, averaged over time interval and
2321      *                     expressed in radians per second (rad/s).
2322      * @return estimated ECI frame containing new body position, velocity and coordinate
2323      * transformation matrix.
2324      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2325      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2326      *                                                       body-to-ECI-frame coordinate transformation matrix are
2327      *                                                       invalid.
2328      */
2329     public ECIFrame navigateAndReturnNew(
2330             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
2331             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
2332             final Acceleration fx, final Acceleration fy, final Acceleration fz,
2333             final double angularRateX, final double angularRateY, final double angularRateZ)
2334             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
2335         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
2336                 angularRateX, angularRateY, angularRateZ);
2337     }
2338 
2339     /**
2340      * Runs precision ECI-frame inertial navigation equations.
2341      *
2342      * @param timeInterval time interval between epochs expressed in seconds (s).
2343      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2344      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2345      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2346      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2347      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2348      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2349      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2350      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
2351      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2352      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
2353      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2354      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
2355      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2356      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2357      *                     resolved along body-frame axes, averaged over time interval and
2358      *                     expressed in meters per squared second (m/s^2).
2359      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2360      *                     resolved along body-frame axes, averaged over time interval and
2361      *                     expressed in meters per squared second (m/s^2).
2362      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2363      *                     resolved along body-frame axes, averaged over time interval and
2364      *                     expressed in meters per squared second (m/s^2).
2365      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2366      *                     resolved along body-frame axes, averaged over time interval.
2367      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2368      *                     resolved along body-frame axes, averaged over time interval.
2369      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2370      *                     resolved along body-frame axes, averaged over time interval.
2371      * @return estimated ECI frame containing new body position, velocity and coordinate
2372      * transformation matrix.
2373      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2374      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2375      *                                                       body-to-ECI-frame coordinate transformation matrix are
2376      *                                                       invalid.
2377      */
2378     public ECIFrame navigateAndReturnNew(
2379             final double timeInterval, final double oldX, final double oldY, final double oldZ,
2380             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
2381             final double fx, final double fy, final double fz,
2382             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
2383             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
2384         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
2385                 angularRateX, angularRateY, angularRateZ);
2386     }
2387 
2388     /**
2389      * Runs precision ECI-frame inertial navigation equations.
2390      *
2391      * @param timeInterval time interval between epochs.
2392      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2393      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2394      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2395      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2396      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2397      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2398      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2399      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
2400      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2401      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
2402      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2403      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
2404      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2405      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2406      *                     resolved along body-frame axes, averaged over time interval and
2407      *                     expressed in meters per squared second (m/s^2).
2408      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2409      *                     resolved along body-frame axes, averaged over time interval and
2410      *                     expressed in meters per squared second (m/s^2).
2411      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2412      *                     resolved along body-frame axes, averaged over time interval and
2413      *                     expressed in meters per squared second (m/s^2).
2414      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2415      *                     resolved along body-frame axes, averaged over time interval.
2416      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2417      *                     resolved along body-frame axes, averaged over time interval.
2418      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2419      *                     resolved along body-frame axes, averaged over time interval.
2420      * @return estimated ECI frame containing new body position, velocity and coordinate
2421      * transformation matrix.
2422      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2423      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2424      *                                                       body-to-ECI-frame coordinate transformation matrix are
2425      *                                                       invalid.
2426      */
2427     public ECIFrame navigateAndReturnNew(
2428             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
2429             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
2430             final double fx, final double fy, final double fz,
2431             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
2432             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
2433         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
2434                 angularRateX, angularRateY, angularRateZ);
2435     }
2436 
2437     /**
2438      * Runs precision ECI-frame inertial navigation equations.
2439      *
2440      * @param timeInterval time interval between epochs expressed in seconds (s).
2441      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2442      *                     frame, resolved along ECI-frame axes.
2443      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2444      *                     frame, resolved along ECI-frame axes.
2445      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2446      *                     frame, resolved along ECI-frame axes.
2447      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2448      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
2449      *                     resolved along ECI-frame axes.
2450      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
2451      *                     resolved along ECI-frame axes.
2452      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
2453      *                     resolved along ECI-frame axes.
2454      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2455      *                     resolved along body-frame axes, averaged over time interval and
2456      *                     expressed in meters per squared second (m/s^2).
2457      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2458      *                     resolved along body-frame axes, averaged over time interval and
2459      *                     expressed in meters per squared second (m/s^2).
2460      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2461      *                     resolved along body-frame axes, averaged over time interval and
2462      *                     expressed in meters per squared second (m/s^2).
2463      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2464      *                     resolved along body-frame axes, averaged over time interval and
2465      *                     expressed in radians per second (rad/s).
2466      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2467      *                     resolved along body-frame axes, averaged over time interval and
2468      *                     expressed in radians per second (rad/s).
2469      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2470      *                     resolved along body-frame axes, averaged over time interval and
2471      *                     expressed in radians per second (rad/s).
2472      * @return estimated ECI frame containing new body position, velocity and coordinate
2473      * transformation matrix.
2474      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2475      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2476      *                                                       body-to-ECI-frame coordinate transformation matrix are
2477      *                                                       invalid.
2478      */
2479     public ECIFrame navigateAndReturnNew(
2480             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
2481             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
2482             final double fx, final double fy, final double fz,
2483             final double angularRateX, final double angularRateY, final double angularRateZ)
2484             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
2485         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
2486                 fx, fy, fz, angularRateX, angularRateY, angularRateZ);
2487     }
2488 
2489     /**
2490      * Runs precision ECI-frame inertial navigation equations.
2491      *
2492      * @param timeInterval time interval between epochs.
2493      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2494      *                     frame, resolved along ECI-frame axes.
2495      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2496      *                     frame, resolved along ECI-frame axes.
2497      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2498      *                     frame, resolved along ECI-frame axes.
2499      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2500      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
2501      *                     resolved along ECI-frame axes.
2502      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
2503      *                     resolved along ECI-frame axes.
2504      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
2505      *                     resolved along ECI-frame axes.
2506      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2507      *                     resolved along body-frame axes, averaged over time interval and
2508      *                     expressed in meters per squared second (m/s^2).
2509      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2510      *                     resolved along body-frame axes, averaged over time interval and
2511      *                     expressed in meters per squared second (m/s^2).
2512      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2513      *                     resolved along body-frame axes, averaged over time interval and
2514      *                     expressed in meters per squared second (m/s^2).
2515      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2516      *                     resolved along body-frame axes, averaged over time interval and
2517      *                     expressed in radians per second (rad/s).
2518      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2519      *                     resolved along body-frame axes, averaged over time interval and
2520      *                     expressed in radians per second (rad/s).
2521      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2522      *                     resolved along body-frame axes, averaged over time interval and
2523      *                     expressed in radians per second (rad/s).
2524      * @return estimated ECI frame containing new body position, velocity and coordinate
2525      * transformation matrix.
2526      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2527      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2528      *                                                       body-to-ECI-frame coordinate transformation matrix are
2529      *                                                       invalid.
2530      */
2531     public ECIFrame navigateAndReturnNew(
2532             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
2533             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
2534             final double fx, final double fy, final double fz,
2535             final double angularRateX, final double angularRateY, final double angularRateZ)
2536             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
2537         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
2538                 fx, fy, fz, angularRateX, angularRateY, angularRateZ);
2539     }
2540 
2541     /**
2542      * Runs precision ECI-frame inertial navigation equations.
2543      *
2544      * @param timeInterval time interval between epochs expressed in seconds (s).
2545      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2546      *                     frame, resolved along ECI-frame axes.
2547      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2548      *                     frame, resolved along ECI-frame axes.
2549      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2550      *                     frame, resolved along ECI-frame axes.
2551      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2552      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
2553      *                     resolved along ECI-frame axes.
2554      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
2555      *                     resolved along ECI-frame axes.
2556      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
2557      *                     resolved along ECI-frame axes.
2558      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2559      *                     resolved along body-frame axes, averaged over time interval.
2560      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2561      *                     resolved along body-frame axes, averaged over time interval.
2562      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2563      *                     resolved along body-frame axes, averaged over time interval.
2564      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2565      *                     resolved along body-frame axes, averaged over time interval.
2566      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2567      *                     resolved along body-frame axes, averaged over time interval.
2568      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2569      *                     resolved along body-frame axes, averaged over time interval.
2570      * @return estimated ECI frame containing new body position, velocity and coordinate
2571      * transformation matrix.
2572      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2573      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2574      *                                                       body-to-ECI-frame coordinate transformation matrix are
2575      *                                                       invalid.
2576      */
2577     public ECIFrame navigateAndReturnNew(
2578             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
2579             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
2580             final Acceleration fx, final Acceleration fy, final Acceleration fz,
2581             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
2582             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
2583         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
2584                 fx, fy, fz, angularRateX, angularRateY, angularRateZ);
2585     }
2586 
2587     /**
2588      * Runs precision ECI-frame inertial navigation equations.
2589      *
2590      * @param timeInterval time interval between epochs.
2591      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2592      *                     frame, resolved along ECI-frame axes.
2593      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2594      *                     frame, resolved along ECI-frame axes.
2595      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2596      *                     frame, resolved along ECI-frame axes.
2597      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2598      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
2599      *                     resolved along ECI-frame axes.
2600      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
2601      *                     resolved along ECI-frame axes.
2602      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
2603      *                     resolved along ECI-frame axes.
2604      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2605      *                     resolved along body-frame axes, averaged over time interval.
2606      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2607      *                     resolved along body-frame axes, averaged over time interval.
2608      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2609      *                     resolved along body-frame axes, averaged over time interval.
2610      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2611      *                     resolved along body-frame axes, averaged over time interval.
2612      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2613      *                     resolved along body-frame axes, averaged over time interval.
2614      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2615      *                     resolved along body-frame axes, averaged over time interval.
2616      * @return estimated ECI frame containing new body position, velocity and coordinate
2617      * transformation matrix.
2618      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2619      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2620      *                                                       body-to-ECI-frame coordinate transformation matrix are
2621      *                                                       invalid.
2622      */
2623     public ECIFrame navigateAndReturnNew(
2624             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
2625             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
2626             final Acceleration fx, final Acceleration fy, final Acceleration fz,
2627             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
2628             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
2629         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
2630                 fx, fy, fz, angularRateX, angularRateY, angularRateZ);
2631     }
2632 
2633     /**
2634      * Runs precision ECI-frame inertial navigation equations.
2635      *
2636      * @param timeInterval time interval between epochs expressed in seconds (s).
2637      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2638      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2639      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2640      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2641      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2642      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2643      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2644      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
2645      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2646      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
2647      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2648      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
2649      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2650      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2651      *                     resolved along body-frame axes, averaged over time interval.
2652      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2653      *                     resolved along body-frame axes, averaged over time interval.
2654      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2655      *                     resolved along body-frame axes, averaged over time interval.
2656      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2657      *                     resolved along body-frame axes, averaged over time interval.
2658      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2659      *                     resolved along body-frame axes, averaged over time interval.
2660      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2661      *                     resolved along body-frame axes, averaged over time interval.
2662      * @return estimated ECI frame containing new body position, velocity and coordinate
2663      * transformation matrix.
2664      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2665      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2666      *                                                       body-to-ECI-frame coordinate transformation matrix are
2667      *                                                       invalid.
2668      */
2669     public ECIFrame navigateAndReturnNew(
2670             final double timeInterval, final double oldX, final double oldY, final double oldZ,
2671             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
2672             final Acceleration fx, final Acceleration fy, final Acceleration fz,
2673             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
2674             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
2675         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
2676                 angularRateX, angularRateY, angularRateZ);
2677     }
2678 
2679     /**
2680      * Runs precision ECI-frame inertial navigation equations.
2681      *
2682      * @param timeInterval time interval between epochs.
2683      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2684      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2685      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2686      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2687      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2688      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
2689      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2690      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
2691      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2692      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
2693      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2694      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
2695      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
2696      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2697      *                     resolved along body-frame axes, averaged over time interval.
2698      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2699      *                     resolved along body-frame axes, averaged over time interval.
2700      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2701      *                     resolved along body-frame axes, averaged over time interval.
2702      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2703      *                     resolved along body-frame axes, averaged over time interval.
2704      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2705      *                     resolved along body-frame axes, averaged over time interval.
2706      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2707      *                     resolved along body-frame axes, averaged over time interval.
2708      * @return estimated ECI frame containing new body position, velocity and coordinate
2709      * transformation matrix.
2710      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2711      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2712      *                                                       body-to-ECI-frame coordinate transformation matrix are
2713      *                                                       invalid.
2714      */
2715     public ECIFrame navigateAndReturnNew(
2716             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
2717             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
2718             final Acceleration fx, final Acceleration fy, final Acceleration fz,
2719             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
2720             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
2721         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
2722                 angularRateX, angularRateY, angularRateZ);
2723     }
2724 
2725     /**
2726      * Runs precision ECI-frame inertial navigation equations.
2727      *
2728      * @param timeInterval time interval between epochs expressed in seconds (s).
2729      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2730      *                     frame, resolved along ECI-frame axes.
2731      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2732      *                     frame, resolved along ECI-frame axes.
2733      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2734      *                     frame, resolved along ECI-frame axes.
2735      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2736      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
2737      *                     resolved along ECI-frame axes.
2738      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
2739      *                     resolved along ECI-frame axes.
2740      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
2741      *                     resolved along ECI-frame axes.
2742      * @param kinematics   body kinematics containing specific forces and angular rates applied to
2743      *                     the body.
2744      * @return estimated ECI frame containing new body position, velocity and coordinate
2745      * transformation matrix.
2746      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2747      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2748      *                                                       body-to-ECI-frame coordinate transformation matrix are
2749      *                                                       invalid.
2750      */
2751     public ECIFrame navigateAndReturnNew(
2752             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
2753             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
2754             final BodyKinematics kinematics) throws InertialNavigatorException,
2755             InvalidSourceAndDestinationFrameTypeException {
2756         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
2757                 kinematics);
2758     }
2759 
2760     /**
2761      * Runs precision ECI-frame inertial navigation equations.
2762      *
2763      * @param timeInterval time interval between epochs.
2764      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
2765      *                     frame, resolved along ECI-frame axes.
2766      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
2767      *                     frame, resolved along ECI-frame axes.
2768      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
2769      *                     frame, resolved along ECI-frame axes.
2770      * @param oldC         previous body-to-ECI-frame coordinate transformation.
2771      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
2772      *                     resolved along ECI-frame axes.
2773      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
2774      *                     resolved along ECI-frame axes.
2775      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
2776      *                     resolved along ECI-frame axes.
2777      * @param kinematics   body kinematics containing specific forces and angular rates applied to
2778      *                     the body.
2779      * @return estimated ECI frame containing new body position, velocity and coordinate
2780      * transformation matrix.
2781      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
2782      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
2783      *                                                       body-to-ECI-frame coordinate transformation matrix are
2784      *                                                       invalid.
2785      */
2786     public ECIFrame navigateAndReturnNew(
2787             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
2788             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
2789             final BodyKinematics kinematics) throws InertialNavigatorException,
2790             InvalidSourceAndDestinationFrameTypeException {
2791         return navigateECIAndReturnNew(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
2792                 kinematics);
2793     }
2794 
2795     /**
2796      * Runs precision ECI-frame inertial navigation equations.
2797      *
2798      * @param timeInterval time interval between epochs expressed in seconds (s).
2799      * @param oldFrame     previous ECI frame containing body position, velocity and
2800      *                     coordinate transformation matrix.
2801      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2802      *                     resolved along body-frame axes, averaged over time interval and
2803      *                     expressed in meters per squared second (m/s^2).
2804      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2805      *                     resolved along body-frame axes, averaged over time interval and
2806      *                     expressed in meters per squared second (m/s^2).
2807      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2808      *                     resolved along body-frame axes, averaged over time interval and
2809      *                     expressed in meters per squared second (m/s^2).
2810      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2811      *                     resolved along body-frame axes, averaged over time interval and
2812      *                     expressed in radians per second (rad/s).
2813      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2814      *                     resolved along body-frame axes, averaged over time interval and
2815      *                     expressed in radians per second (rad/s).
2816      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2817      *                     resolved along body-frame axes, averaged over time interval and
2818      *                     expressed in radians per second (rad/s).
2819      * @return estimated ECI frame containing new body position, velocity and coordinate
2820      * transformation matrix.
2821      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
2822      */
2823     public ECIFrame navigateAndReturnNew(
2824             final double timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
2825             final double angularRateX, final double angularRateY, final double angularRateZ)
2826             throws InertialNavigatorException {
2827         return navigateECIAndReturnNew(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ);
2828     }
2829 
2830     /**
2831      * Runs precision ECI-frame inertial navigation equations.
2832      *
2833      * @param timeInterval time interval between epochs.
2834      * @param oldFrame     previous ECI frame containing body position, velocity and
2835      *                     coordinate transformation matrix.
2836      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2837      *                     resolved along body-frame axes, averaged over time interval and
2838      *                     expressed in meters per squared second (m/s^2).
2839      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2840      *                     resolved along body-frame axes, averaged over time interval and
2841      *                     expressed in meters per squared second (m/s^2).
2842      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2843      *                     resolved along body-frame axes, averaged over time interval and
2844      *                     expressed in meters per squared second (m/s^2).
2845      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2846      *                     resolved along body-frame axes, averaged over time interval and
2847      *                     expressed in radians per second (rad/s).
2848      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2849      *                     resolved along body-frame axes, averaged over time interval and
2850      *                     expressed in radians per second (rad/s).
2851      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2852      *                     resolved along body-frame axes, averaged over time interval and
2853      *                     expressed in radians per second (rad/s).
2854      * @return estimated ECI frame containing new body position, velocity and coordinate
2855      * transformation matrix.
2856      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
2857      */
2858     public ECIFrame navigateAndReturnNew(
2859             final Time timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
2860             final double angularRateX, final double angularRateY, final double angularRateZ)
2861             throws InertialNavigatorException {
2862         return navigateECIAndReturnNew(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ);
2863     }
2864 
2865     /**
2866      * Runs precision ECI-frame inertial navigation equations.
2867      *
2868      * @param timeInterval time interval between epochs expressed in seconds (s).
2869      * @param oldFrame     previous ECI frame containing body position, velocity and
2870      *                     coordinate transformation matrix.
2871      * @param kinematics   body kinematics containing specific forces and angular rates applied to
2872      *                     the body.
2873      * @return estimated ECI frame containing new body position, velocity and coordinate
2874      * transformation matrix.
2875      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
2876      */
2877     public ECIFrame navigateAndReturnNew(
2878             final double timeInterval, final ECIFrame oldFrame, final BodyKinematics kinematics)
2879             throws InertialNavigatorException {
2880         return navigateECIAndReturnNew(timeInterval, oldFrame, kinematics);
2881     }
2882 
2883     /**
2884      * Runs precision ECI-frame inertial navigation equations.
2885      *
2886      * @param timeInterval time interval between epochs.
2887      * @param oldFrame     previous ECI frame containing body position, velocity and
2888      *                     coordinate transformation matrix.
2889      * @param kinematics   body kinematics containing specific forces and angular rates applied to
2890      *                     the body.
2891      * @return estimated ECI frame containing new body position, velocity and coordinate
2892      * transformation matrix.
2893      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
2894      */
2895     public ECIFrame navigateAndReturnNew(
2896             final Time timeInterval, final ECIFrame oldFrame, final BodyKinematics kinematics)
2897             throws InertialNavigatorException {
2898         return navigateECIAndReturnNew(timeInterval, oldFrame, kinematics);
2899     }
2900 
2901     /**
2902      * Runs precision ECI-frame inertial navigation equations.
2903      *
2904      * @param timeInterval time interval between epochs expressed in seconds (s).
2905      * @param oldFrame     previous ECI frame containing body position, velocity and
2906      *                     coordinate transformation matrix.
2907      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2908      *                     resolved along body-frame axes, averaged over time interval.
2909      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2910      *                     resolved along body-frame axes, averaged over time interval.
2911      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2912      *                     resolved along body-frame axes, averaged over time interval.
2913      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2914      *                     resolved along body-frame axes, averaged over time interval and
2915      *                     expressed in radians per second (rad/s).
2916      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2917      *                     resolved along body-frame axes, averaged over time interval and
2918      *                     expressed in radians per second (rad/s).
2919      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2920      *                     resolved along body-frame axes, averaged over time interval and
2921      *                     expressed in radians per second (rad/s).
2922      * @return estimated ECI frame containing new body position, velocity and coordinate
2923      * transformation matrix.
2924      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
2925      */
2926     public ECIFrame navigateAndReturnNew(
2927             final double timeInterval, final ECIFrame oldFrame,
2928             final Acceleration fx, final Acceleration fy, final Acceleration fz,
2929             final double angularRateX, final double angularRateY, final double angularRateZ)
2930             throws InertialNavigatorException {
2931         return navigateECIAndReturnNew(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ);
2932     }
2933 
2934     /**
2935      * Runs precision ECI-frame inertial navigation equations.
2936      *
2937      * @param timeInterval time interval between epochs.
2938      * @param oldFrame     previous ECI frame containing body position, velocity and
2939      *                     coordinate transformation matrix.
2940      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2941      *                     resolved along body-frame axes, averaged over time interval.
2942      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2943      *                     resolved along body-frame axes, averaged over time interval.
2944      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2945      *                     resolved along body-frame axes, averaged over time interval.
2946      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2947      *                     resolved along body-frame axes, averaged over time interval and
2948      *                     expressed in radians per second (rad/s).
2949      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2950      *                     resolved along body-frame axes, averaged over time interval and
2951      *                     expressed in radians per second (rad/s).
2952      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2953      *                     resolved along body-frame axes, averaged over time interval and
2954      *                     expressed in radians per second (rad/s).
2955      * @return estimated ECI frame containing new body position, velocity and coordinate
2956      * transformation matrix.
2957      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
2958      */
2959     public ECIFrame navigateAndReturnNew(
2960             final Time timeInterval, final ECIFrame oldFrame,
2961             final Acceleration fx, final Acceleration fy, final Acceleration fz,
2962             final double angularRateX, final double angularRateY, final double angularRateZ)
2963             throws InertialNavigatorException {
2964         return navigateECIAndReturnNew(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ);
2965     }
2966 
2967     /**
2968      * Runs precision ECI-frame inertial navigation equations.
2969      *
2970      * @param timeInterval time interval between epochs expressed in seconds (s).
2971      * @param oldFrame     previous ECI frame containing body position, velocity and
2972      *                     coordinate transformation matrix.
2973      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
2974      *                     resolved along body-frame axes, averaged over time interval and
2975      *                     expressed in meters per squared second (m/s^2).
2976      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
2977      *                     resolved along body-frame axes, averaged over time interval and
2978      *                     expressed in meters per squared second (m/s^2).
2979      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
2980      *                     resolved along body-frame axes, averaged over time interval and
2981      *                     expressed in meters per squared second (m/s^2).
2982      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
2983      *                     resolved along body-frame axes, averaged over time interval.
2984      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
2985      *                     resolved along body-frame axes, averaged over time interval.
2986      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
2987      *                     resolved along body-frame axes, averaged over time interval.
2988      * @return estimated ECI frame containing new body position, velocity and coordinate
2989      * transformation matrix.
2990      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
2991      */
2992     public ECIFrame navigateAndReturnNew(
2993             final double timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
2994             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
2995             throws InertialNavigatorException {
2996         return navigateECIAndReturnNew(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ);
2997     }
2998 
2999     /**
3000      * Runs precision ECI-frame inertial navigation equations.
3001      *
3002      * @param timeInterval time interval between epochs.
3003      * @param oldFrame     previous ECI frame containing body position, velocity and
3004      *                     coordinate transformation matrix.
3005      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3006      *                     resolved along body-frame axes, averaged over time interval and
3007      *                     expressed in meters per squared second (m/s^2).
3008      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
3009      *                     resolved along body-frame axes, averaged over time interval and
3010      *                     expressed in meters per squared second (m/s^2).
3011      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
3012      *                     resolved along body-frame axes, averaged over time interval and
3013      *                     expressed in meters per squared second (m/s^2).
3014      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
3015      *                     resolved along body-frame axes, averaged over time interval.
3016      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
3017      *                     resolved along body-frame axes, averaged over time interval.
3018      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
3019      *                     resolved along body-frame axes, averaged over time interval.
3020      * @return estimated ECI frame containing new body position, velocity and coordinate
3021      * transformation matrix.
3022      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
3023      */
3024     public ECIFrame navigateAndReturnNew(
3025             final Time timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
3026             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
3027             throws InertialNavigatorException {
3028         return navigateECIAndReturnNew(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ);
3029     }
3030 
3031     /**
3032      * Runs precision ECI-frame inertial navigation equations.
3033      *
3034      * @param timeInterval time interval between epochs expressed in seconds (s).
3035      * @param oldFrame     previous ECI frame containing body position, velocity and
3036      *                     coordinate transformation matrix.
3037      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3038      *                     resolved along body-frame axes, averaged over time interval.
3039      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
3040      *                     resolved along body-frame axes, averaged over time interval.
3041      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
3042      *                     resolved along body-frame axes, averaged over time interval.
3043      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
3044      *                     resolved along body-frame axes, averaged over time interval.
3045      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
3046      *                     resolved along body-frame axes, averaged over time interval.
3047      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
3048      *                     resolved along body-frame axes, averaged over time interval.
3049      * @return estimated ECI frame containing new body position, velocity and coordinate
3050      * transformation matrix.
3051      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
3052      */
3053     public ECIFrame navigateAndReturnNew(
3054             final double timeInterval, final ECIFrame oldFrame,
3055             final Acceleration fx, final Acceleration fy, final Acceleration fz,
3056             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
3057             throws InertialNavigatorException {
3058         return navigateECIAndReturnNew(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ);
3059     }
3060 
3061     /**
3062      * Runs precision ECI-frame inertial navigation equations.
3063      *
3064      * @param timeInterval time interval between epochs.
3065      * @param oldFrame     previous ECI frame containing body position, velocity and
3066      *                     coordinate transformation matrix.
3067      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3068      *                     resolved along body-frame axes, averaged over time interval.
3069      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
3070      *                     resolved along body-frame axes, averaged over time interval.
3071      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
3072      *                     resolved along body-frame axes, averaged over time interval.
3073      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
3074      *                     resolved along body-frame axes, averaged over time interval.
3075      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
3076      *                     resolved along body-frame axes, averaged over time interval.
3077      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
3078      *                     resolved along body-frame axes, averaged over time interval.
3079      * @return estimated ECI frame containing new body position, velocity and coordinate
3080      * transformation matrix.
3081      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
3082      */
3083     public ECIFrame navigateAndReturnNew(
3084             final Time timeInterval, final ECIFrame oldFrame,
3085             final Acceleration fx, final Acceleration fy, final Acceleration fz,
3086             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
3087             throws InertialNavigatorException {
3088         return navigateECIAndReturnNew(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ);
3089     }
3090 
3091     /**
3092      * Runs precision ECI-frame inertial navigation equations.
3093      *
3094      * @param timeInterval time interval between epochs expressed in seconds (s).
3095      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3096      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3097      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3098      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3099      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3100      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3101      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3102      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3103      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3104      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3105      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3106      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3107      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3108      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3109      *                     resolved along body-frame axes, averaged over time interval and
3110      *                     expressed in meters per squared second (m/s^2).
3111      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
3112      *                     resolved along body-frame axes, averaged over time interval and
3113      *                     expressed in meters per squared second (m/s^2).
3114      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
3115      *                     resolved along body-frame axes, averaged over time interval and
3116      *                     expressed in meters per squared second (m/s^2).
3117      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
3118      *                     resolved along body-frame axes, averaged over time interval and
3119      *                     expressed in radians per second (rad/s).
3120      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
3121      *                     resolved along body-frame axes, averaged over time interval and
3122      *                     expressed in radians per second (rad/s).
3123      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
3124      *                     resolved along body-frame axes, averaged over time interval and
3125      *                     expressed in radians per second (rad/s).
3126      * @param result       instance where new estimated ECI frame containing new body position,
3127      *                     velocity and coordinate transformation matrix will be stored.
3128      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3129      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3130      *                                                       body-to-ECI-frame coordinate transformation matrix are
3131      *                                                       invalid.
3132      */
3133     public static void navigateECI(
3134             final double timeInterval, final double oldX, final double oldY, final double oldZ,
3135             final CoordinateTransformation oldC,
3136             final double oldVx, final double oldVy, final double oldVz,
3137             final double fx, final double fy, final double fz,
3138             final double angularRateX, final double angularRateY, final double angularRateZ,
3139             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
3140 
3141         if (!isValidBodyToEciCoordinateTransformationMatrix(oldC)) {
3142             throw new InvalidSourceAndDestinationFrameTypeException();
3143         }
3144 
3145         try {
3146             // Attitude update
3147             // Calculate attitude increment, magnitude, and skew-symmetric matrix
3148             final var alphaIbb = new Matrix(ROWS, 1);
3149             alphaIbb.setElementAtIndex(0, angularRateX * timeInterval);
3150             alphaIbb.setElementAtIndex(1, angularRateY * timeInterval);
3151             alphaIbb.setElementAtIndex(2, angularRateZ * timeInterval);
3152 
3153             final var magAlpha = Utils.normF(alphaIbb);
3154             final var skewAlpha = Utils.skewMatrix(alphaIbb);
3155 
3156             // Obtain coordinate transformation matrix from the new attitude to the old
3157             // using Rodrigues' formula, (5.73)
3158             final var cNewOld = Matrix.identity(ROWS, ROWS);
3159             if (magAlpha > ALPHA_THRESHOLD) {
3160                 final var magAlpha2 = magAlpha * magAlpha;
3161                 final var value1 = Math.sin(magAlpha) / magAlpha;
3162                 final var value2 = (1.0 - Math.cos(magAlpha)) / magAlpha2;
3163 
3164                 final var tmp1 = skewAlpha.multiplyByScalarAndReturnNew(value1);
3165                 final var tmp2 = skewAlpha.multiplyByScalarAndReturnNew(value2);
3166                 tmp2.multiply(skewAlpha);
3167 
3168                 cNewOld.add(tmp1);
3169                 cNewOld.add(tmp2);
3170             } else {
3171                 cNewOld.add(skewAlpha);
3172             }
3173 
3174             // Update attitude
3175             final var oldCbi = oldC.getMatrix();
3176             final var cbi = oldCbi.multiplyAndReturnNew(cNewOld);
3177 
3178             // Specific force frame transformation
3179             // Calculate the average body-to-ECI-frame coordinate transformation
3180             // matrix over the update interval using (5.84)
3181             if (magAlpha > ALPHA_THRESHOLD) {
3182                 final var tmp1 = Matrix.identity(ROWS, ROWS);
3183                 final var magAlpha2 = magAlpha * magAlpha;
3184                 final var value1 = (1.0 - Math.cos(magAlpha)) / magAlpha2;
3185                 final var value2 = (1.0 - Math.sin(magAlpha) / magAlpha) / magAlpha2;
3186 
3187                 final var tmp2 = skewAlpha.multiplyByScalarAndReturnNew(value1);
3188                 final var tmp3 = skewAlpha.multiplyByScalarAndReturnNew(value2);
3189                 tmp3.multiply(skewAlpha);
3190 
3191                 tmp1.add(tmp2);
3192                 tmp1.add(tmp3);
3193 
3194                 oldCbi.multiply(tmp1);
3195             }
3196 
3197             // oldCbi contains average body-to-ECI-frame (aveCbi)
3198 
3199             // Transform specific force to ECI-frame resolving axes using (5.81)
3200             final var fIbb = new Matrix(ROWS, 1);
3201             fIbb.setElementAtIndex(0, fx);
3202             fIbb.setElementAtIndex(1, fy);
3203             fIbb.setElementAtIndex(2, fz);
3204 
3205             oldCbi.multiply(fIbb);
3206             // now oldCbi contains specific force to ECI-frame resolving axes(fIbi)
3207 
3208             // Update velocity
3209             // From (5.18) and (5.20),
3210             final var oldVibi = new Matrix(ROWS, 1);
3211             oldVibi.setElementAtIndex(0, oldVx);
3212             oldVibi.setElementAtIndex(1, oldVy);
3213             oldVibi.setElementAtIndex(2, oldVz);
3214 
3215             final var gravitation = ECIGravitationEstimator.estimateGravitationAndReturnNew(oldX, oldY, oldZ);
3216             final var g = gravitation.asMatrix();
3217 
3218             // fIbi + g
3219             oldCbi.add(g);
3220 
3221             // timeInterval * (fIbi + g)
3222             oldCbi.multiplyByScalar(timeInterval);
3223 
3224             // oldVibi + timeInterval * (fIbi + g)
3225             final var vIbi = oldVibi.addAndReturnNew(oldCbi);
3226 
3227             final var vx = vIbi.getElementAtIndex(0);
3228             final var vy = vIbi.getElementAtIndex(1);
3229             final var vz = vIbi.getElementAtIndex(2);
3230 
3231             // Update cartesian position
3232             // From (5.23),
3233             final var x = oldX + (vx + oldVx) * 0.5 * timeInterval;
3234             final var y = oldY + (vy + oldVy) * 0.5 * timeInterval;
3235             final var z = oldZ + (vz + oldVz) * 0.5 * timeInterval;
3236 
3237             final var newC = new CoordinateTransformation(cbi, FrameType.BODY_FRAME,
3238                     FrameType.EARTH_CENTERED_INERTIAL_FRAME);
3239 
3240             result.setCoordinates(x, y, z);
3241             result.setVelocityCoordinates(vx, vy, vz);
3242             result.setCoordinateTransformation(newC);
3243 
3244         } catch (final AlgebraException | InvalidRotationMatrixException e) {
3245             throw new InertialNavigatorException(e);
3246         }
3247     }
3248 
3249     /**
3250      * Runs precision ECI-frame inertial navigation equations.
3251      *
3252      * @param timeInterval time interval between epochs.
3253      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3254      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3255      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3256      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3257      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3258      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3259      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3260      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3261      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3262      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3263      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3264      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3265      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3266      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3267      *                     resolved along body-frame axes, averaged over time interval and
3268      *                     expressed in meters per squared second (m/s^2).
3269      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
3270      *                     resolved along body-frame axes, averaged over time interval and
3271      *                     expressed in meters per squared second (m/s^2).
3272      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
3273      *                     resolved along body-frame axes, averaged over time interval and
3274      *                     expressed in meters per squared second (m/s^2).
3275      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
3276      *                     resolved along body-frame axes, averaged over time interval and
3277      *                     expressed in radians per second (rad/s).
3278      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
3279      *                     resolved along body-frame axes, averaged over time interval and
3280      *                     expressed in radians per second (rad/s).
3281      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
3282      *                     resolved along body-frame axes, averaged over time interval and
3283      *                     expressed in radians per second (rad/s).
3284      * @param result       instance where new estimated ECI frame containing new body position,
3285      *                     velocity and coordinate transformation matrix will be stored.
3286      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3287      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3288      *                                                       body-to-ECI-frame coordinate transformation matrix are
3289      *                                                       invalid.
3290      */
3291     public static void navigateECI(
3292             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
3293             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
3294             final double fx, final double fy, final double fz,
3295             final double angularRateX, final double angularRateY, final double angularRateZ,
3296             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
3297         navigateECI(convertTimeToDouble(timeInterval), oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
3298                 angularRateX, angularRateY, angularRateZ, result);
3299     }
3300 
3301     /**
3302      * Runs precision ECI-frame inertial navigation equations.
3303      *
3304      * @param timeInterval time interval between epochs expressed in seconds (s).
3305      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3306      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3307      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3308      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3309      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3310      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3311      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3312      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3313      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3314      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3315      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3316      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3317      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3318      * @param kinematics   body kinematics containing specific forces and angular rates applied to
3319      *                     the body.
3320      * @param result       instance where new estimated ECI frame containing new body position,
3321      *                     velocity and coordinate transformation matrix will be stored.
3322      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3323      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3324      *                                                       body-to-ECI-frame coordinate transformation matrix are
3325      *                                                       invalid.
3326      */
3327     public static void navigateECI(
3328             final double timeInterval, final double oldX, final double oldY, final double oldZ,
3329             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
3330             final BodyKinematics kinematics, final ECIFrame result) throws InertialNavigatorException,
3331             InvalidSourceAndDestinationFrameTypeException {
3332         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz,
3333                 kinematics.getFx(), kinematics.getFy(), kinematics.getFz(),
3334                 kinematics.getAngularRateX(), kinematics.getAngularRateY(), kinematics.getAngularRateZ(), result);
3335     }
3336 
3337     /**
3338      * Runs precision ECI-frame inertial navigation equations.
3339      *
3340      * @param timeInterval time interval between epochs.
3341      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3342      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3343      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3344      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3345      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3346      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3347      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3348      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3349      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3350      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3351      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3352      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3353      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3354      * @param kinematics   body kinematics containing specific forces and angular rates applied to
3355      *                     the body.
3356      * @param result       instance where new estimated ECI frame containing new body position,
3357      *                     velocity and coordinate transformation matrix will be stored.
3358      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3359      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3360      *                                                       body-to-ECI-frame coordinate transformation matrix are
3361      *                                                       invalid.
3362      */
3363     public static void navigateECI(
3364             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
3365             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
3366             final BodyKinematics kinematics, final ECIFrame result) throws InertialNavigatorException,
3367             InvalidSourceAndDestinationFrameTypeException {
3368         navigateECI(convertTimeToDouble(timeInterval), oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, kinematics, result);
3369     }
3370 
3371     /**
3372      * Runs precision ECI-frame inertial navigation equations.
3373      *
3374      * @param timeInterval time interval between epochs expressed in seconds (s).
3375      * @param oldPosition  previous cartesian position of body frame with respect ECI
3376      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3377      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3378      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3379      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3380      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3381      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3382      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3383      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3384      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3385      *                     resolved along body-frame axes, averaged over time interval and
3386      *                     expressed in meters per squared second (m/s^2).
3387      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
3388      *                     resolved along body-frame axes, averaged over time interval and
3389      *                     expressed in meters per squared second (m/s^2).
3390      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
3391      *                     resolved along body-frame axes, averaged over time interval and
3392      *                     expressed in meters per squared second (m/s^2).
3393      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
3394      *                     resolved along body-frame axes, averaged over time interval and
3395      *                     expressed in radians per second (rad/s).
3396      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
3397      *                     resolved along body-frame axes, averaged over time interval and
3398      *                     expressed in radians per second (rad/s).
3399      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
3400      *                     resolved along body-frame axes, averaged over time interval and
3401      *                     expressed in radians per second (rad/s).
3402      * @param result       instance where new estimated ECI frame containing new body position,
3403      *                     velocity and coordinate transformation matrix will be stored.
3404      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3405      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3406      *                                                       body-to-ECI-frame coordinate transformation matrix are
3407      *                                                       invalid.
3408      */
3409     public static void navigateECI(
3410             final double timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
3411             final double oldVx, final double oldVy, final double oldVz,
3412             final double fx, final double fy, final double fz,
3413             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
3414             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
3415         navigateECI(timeInterval, oldPosition.getInhomX(), oldPosition.getInhomY(), oldPosition.getInhomZ(),
3416                 oldC, oldVx, oldVy, oldVz, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
3417     }
3418 
3419     /**
3420      * Runs precision ECI-frame inertial navigation equations.
3421      *
3422      * @param timeInterval time interval between epochs.
3423      * @param oldPosition  previous cartesian position of body frame with respect ECI
3424      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3425      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3426      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3427      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3428      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3429      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3430      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3431      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3432      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3433      *                     resolved along body-frame axes, averaged over time interval and
3434      *                     expressed in meters per squared second (m/s^2).
3435      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
3436      *                     resolved along body-frame axes, averaged over time interval and
3437      *                     expressed in meters per squared second (m/s^2).
3438      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
3439      *                     resolved along body-frame axes, averaged over time interval and
3440      *                     expressed in meters per squared second (m/s^2).
3441      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
3442      *                     resolved along body-frame axes, averaged over time interval and
3443      *                     expressed in radians per second (rad/s).
3444      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
3445      *                     resolved along body-frame axes, averaged over time interval and
3446      *                     expressed in radians per second (rad/s).
3447      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
3448      *                     resolved along body-frame axes, averaged over time interval and
3449      *                     expressed in radians per second (rad/s).
3450      * @param result       instance where new estimated ECI frame containing new body position,
3451      *                     velocity and coordinate transformation matrix will be stored.
3452      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3453      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3454      *                                                       body-to-ECI-frame coordinate transformation matrix are
3455      *                                                       invalid.
3456      */
3457     public static void navigateECI(
3458             final Time timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
3459             final double oldVx, final double oldVy, final double oldVz,
3460             final double fx, final double fy, final double fz,
3461             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
3462             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
3463         navigateECI(timeInterval, oldPosition.getInhomX(), oldPosition.getInhomY(), oldPosition.getInhomZ(), oldC,
3464                 oldVx, oldVy, oldVz, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
3465     }
3466 
3467     /**
3468      * Runs precision ECI-frame inertial navigation equations.
3469      *
3470      * @param timeInterval time interval between epochs expressed in seconds (s).
3471      * @param oldPosition  previous cartesian position of body frame with respect ECI
3472      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3473      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3474      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3475      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3476      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3477      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3478      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3479      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3480      * @param kinematics   body kinematics containing specific forces and angular rates applied to
3481      *                     the body.
3482      * @param result       instance where new estimated ECI frame containing new body position,
3483      *                     velocity and coordinate transformation matrix will be stored.
3484      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3485      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3486      *                                                       body-to-ECI-frame coordinate transformation matrix are
3487      *                                                       invalid.
3488      */
3489     public static void navigateECI(
3490             final double timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
3491             final double oldVx, final double oldVy, final double oldVz, final BodyKinematics kinematics,
3492             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
3493         navigateECI(timeInterval, oldPosition, oldC, oldVx, oldVy, oldVz,
3494                 kinematics.getFx(), kinematics.getFy(), kinematics.getFz(),
3495                 kinematics.getAngularRateX(), kinematics.getAngularRateY(), kinematics.getAngularRateZ(), result);
3496     }
3497 
3498     /**
3499      * Runs precision ECI-frame inertial navigation equations.
3500      *
3501      * @param timeInterval time interval between epochs.
3502      * @param oldPosition  previous cartesian position of body frame with respect ECI
3503      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3504      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3505      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3506      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3507      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3508      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3509      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3510      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3511      * @param kinematics   body kinematics containing specific forces and angular rates applied to
3512      *                     the body.
3513      * @param result       instance where new estimated ECI frame containing new body position,
3514      *                     velocity and coordinate transformation matrix will be stored.
3515      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3516      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3517      *                                                       body-to-ECI-frame coordinate transformation matrix are
3518      *                                                       invalid.
3519      */
3520     public static void navigateECI(
3521             final Time timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
3522             final double oldVx, final double oldVy, final double oldVz, final BodyKinematics kinematics,
3523             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
3524         navigateECI(convertTimeToDouble(timeInterval), oldPosition, oldC, oldVx, oldVy, oldVz, kinematics, result);
3525     }
3526 
3527     /**
3528      * Runs precision ECI-frame inertial navigation equations.
3529      *
3530      * @param timeInterval time interval between epochs expressed in seconds (s).
3531      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3532      *                     frame, resolved along ECI-frame axes.
3533      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3534      *                     frame, resolved along ECI-frame axes.
3535      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3536      *                     frame, resolved along ECI-frame axes.
3537      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3538      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3539      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3540      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3541      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3542      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3543      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3544      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3545      *                     resolved along body-frame axes, averaged over time interval and
3546      *                     expressed in meters per squared second (m/s^2).
3547      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
3548      *                     resolved along body-frame axes, averaged over time interval and
3549      *                     expressed in meters per squared second (m/s^2).
3550      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
3551      *                     resolved along body-frame axes, averaged over time interval and
3552      *                     expressed in meters per squared second (m/s^2).
3553      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
3554      *                     resolved along body-frame axes, averaged over time interval and
3555      *                     expressed in radians per second (rad/s).
3556      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
3557      *                     resolved along body-frame axes, averaged over time interval and
3558      *                     expressed in radians per second (rad/s).
3559      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
3560      *                     resolved along body-frame axes, averaged over time interval and
3561      *                     expressed in radians per second (rad/s).
3562      * @param result       instance where new estimated ECI frame containing new body position,
3563      *                     velocity and coordinate transformation matrix will be stored.
3564      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3565      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3566      *                                                       body-to-ECI-frame coordinate transformation matrix are
3567      *                                                       invalid.
3568      */
3569     public static void navigateECI(
3570             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
3571             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
3572             final double fx, final double fy, final double fz,
3573             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
3574             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
3575         navigateECI(timeInterval,
3576                 convertDistanceToDouble(oldX), convertDistanceToDouble(oldY), convertDistanceToDouble(oldZ), oldC,
3577                 oldVx, oldVy, oldVz, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
3578     }
3579 
3580     /**
3581      * Runs precision ECI-frame inertial navigation equations.
3582      *
3583      * @param timeInterval time interval between epochs.
3584      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3585      *                     frame, resolved along ECI-frame axes.
3586      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3587      *                     frame, resolved along ECI-frame axes.
3588      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3589      *                     frame, resolved along ECI-frame axes.
3590      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3591      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3592      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3593      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3594      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3595      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3596      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3597      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3598      *                     resolved along body-frame axes, averaged over time interval and
3599      *                     expressed in meters per squared second (m/s^2).
3600      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
3601      *                     resolved along body-frame axes, averaged over time interval and
3602      *                     expressed in meters per squared second (m/s^2).
3603      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
3604      *                     resolved along body-frame axes, averaged over time interval and
3605      *                     expressed in meters per squared second (m/s^2).
3606      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
3607      *                     resolved along body-frame axes, averaged over time interval and
3608      *                     expressed in radians per second (rad/s).
3609      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
3610      *                     resolved along body-frame axes, averaged over time interval and
3611      *                     expressed in radians per second (rad/s).
3612      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
3613      *                     resolved along body-frame axes, averaged over time interval and
3614      *                     expressed in radians per second (rad/s).
3615      * @param result       instance where new estimated ECI frame containing new body position,
3616      *                     velocity and coordinate transformation matrix will be stored.
3617      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3618      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3619      *                                                       body-to-ECI-frame coordinate transformation matrix are
3620      *                                                       invalid.
3621      */
3622     public static void navigateECI(
3623             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
3624             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
3625             final double fx, final double fy, final double fz,
3626             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
3627             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
3628         navigateECI(convertTimeToDouble(timeInterval), oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
3629                 angularRateX, angularRateY, angularRateZ, result);
3630     }
3631 
3632     /**
3633      * Runs precision ECI-frame inertial navigation equations.
3634      *
3635      * @param timeInterval time interval between epochs expressed in seconds (s).
3636      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3637      *                     frame, resolved along ECI-frame axes.
3638      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3639      *                     frame, resolved along ECI-frame axes.
3640      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3641      *                     frame, resolved along ECI-frame axes.
3642      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3643      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3644      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3645      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3646      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3647      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3648      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3649      * @param kinematics   body kinematics containing specific forces and angular rates applied to
3650      *                     the body.
3651      * @param result       instance where new estimated ECI frame containing new body position,
3652      *                     velocity and coordinate transformation matrix will be stored.
3653      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3654      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3655      *                                                       body-to-ECI-frame coordinate transformation matrix are
3656      *                                                       invalid.
3657      */
3658     public static void navigateECI(
3659             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
3660             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
3661             final BodyKinematics kinematics, final ECIFrame result) throws InertialNavigatorException,
3662             InvalidSourceAndDestinationFrameTypeException {
3663         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz,
3664                 kinematics.getFx(), kinematics.getFy(), kinematics.getFz(),
3665                 kinematics.getAngularRateX(), kinematics.getAngularRateY(), kinematics.getAngularRateZ(), result);
3666     }
3667 
3668     /**
3669      * Runs precision ECI-frame inertial navigation equations.
3670      *
3671      * @param timeInterval time interval between epochs.
3672      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3673      *                     frame, resolved along ECI-frame axes.
3674      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3675      *                     frame, resolved along ECI-frame axes.
3676      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3677      *                     frame, resolved along ECI-frame axes.
3678      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3679      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3680      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3681      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3682      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3683      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3684      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3685      * @param kinematics   body kinematics containing specific forces and angular rates applied to
3686      *                     the body.
3687      * @param result       instance where new estimated ECI frame containing new body position,
3688      *                     velocity and coordinate transformation matrix will be stored.
3689      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3690      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3691      *                                                       body-to-ECI-frame coordinate transformation matrix are
3692      *                                                       invalid.
3693      */
3694     public static void navigateECI(
3695             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
3696             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
3697             final BodyKinematics kinematics, final ECIFrame result)
3698             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
3699         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz,
3700                 kinematics.getFx(), kinematics.getFy(), kinematics.getFz(),
3701                 kinematics.getAngularRateX(), kinematics.getAngularRateY(), kinematics.getAngularRateZ(), result);
3702     }
3703 
3704     /**
3705      * Runs precision ECI-frame inertial navigation equations.
3706      *
3707      * @param timeInterval time interval between epochs expressed in seconds (s).
3708      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3709      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3710      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3711      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3712      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3713      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3714      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3715      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
3716      *                     resolved along ECI-frame axes.
3717      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
3718      *                     resolved along ECI-frame axes.
3719      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
3720      *                     resolved along ECI-frame axes.
3721      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3722      *                     resolved along body-frame axes, averaged over time interval and
3723      *                     expressed in meters per squared second (m/s^2).
3724      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
3725      *                     resolved along body-frame axes, averaged over time interval and
3726      *                     expressed in meters per squared second (m/s^2).
3727      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
3728      *                     resolved along body-frame axes, averaged over time interval and
3729      *                     expressed in meters per squared second (m/s^2).
3730      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
3731      *                     resolved along body-frame axes, averaged over time interval and
3732      *                     expressed in radians per second (rad/s).
3733      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
3734      *                     resolved along body-frame axes, averaged over time interval and
3735      *                     expressed in radians per second (rad/s).
3736      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
3737      *                     resolved along body-frame axes, averaged over time interval and
3738      *                     expressed in radians per second (rad/s).
3739      * @param result       instance where new estimated ECI frame containing new body position,
3740      *                     velocity and coordinate transformation matrix will be stored.
3741      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3742      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3743      *                                                       body-to-ECI-frame coordinate transformation matrix are
3744      *                                                       invalid.
3745      */
3746     public static void navigateECI(
3747             final double timeInterval, final double oldX, final double oldY, final double oldZ,
3748             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
3749             final double fx, final double fy, final double fz,
3750             final double angularRateX, final double angularRateY, final double angularRateZ,
3751             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
3752         navigateECI(timeInterval, oldX, oldY, oldZ, oldC,
3753                 convertSpeedToDouble(oldSpeedX), convertSpeedToDouble(oldSpeedY), convertSpeedToDouble(oldSpeedZ),
3754                 fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
3755     }
3756 
3757     /**
3758      * Runs precision ECI-frame inertial navigation equations.
3759      *
3760      * @param timeInterval time interval between epochs.
3761      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3762      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3763      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3764      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3765      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3766      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3767      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3768      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
3769      *                     resolved along ECI-frame axes.
3770      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
3771      *                     resolved along ECI-frame axes.
3772      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
3773      *                     resolved along ECI-frame axes.
3774      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3775      *                     resolved along body-frame axes, averaged over time interval and
3776      *                     expressed in meters per squared second (m/s^2).
3777      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
3778      *                     resolved along body-frame axes, averaged over time interval and
3779      *                     expressed in meters per squared second (m/s^2).
3780      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
3781      *                     resolved along body-frame axes, averaged over time interval and
3782      *                     expressed in meters per squared second (m/s^2).
3783      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
3784      *                     resolved along body-frame axes, averaged over time interval and
3785      *                     expressed in radians per second (rad/s).
3786      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
3787      *                     resolved along body-frame axes, averaged over time interval and
3788      *                     expressed in radians per second (rad/s).
3789      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
3790      *                     resolved along body-frame axes, averaged over time interval and
3791      *                     expressed in radians per second (rad/s).
3792      * @param result       instance where new estimated ECI frame containing new body position,
3793      *                     velocity and coordinate transformation matrix will be stored.
3794      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3795      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3796      *                                                       body-to-ECI-frame coordinate transformation matrix are
3797      *                                                       invalid.
3798      */
3799     public static void navigateECI(
3800             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
3801             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
3802             final double fx, final double fy, final double fz,
3803             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
3804             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
3805         navigateECI(convertTimeToDouble(timeInterval), oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
3806                 fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
3807     }
3808 
3809     /**
3810      * Runs precision ECI-frame inertial navigation equations.
3811      *
3812      * @param timeInterval time interval between epochs expressed in seconds (s).
3813      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3814      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3815      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3816      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3817      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3818      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3819      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3820      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
3821      *                     resolved along ECI-frame axes.
3822      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
3823      *                     resolved along ECI-frame axes.
3824      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
3825      *                     resolved along ECI-frame axes.
3826      * @param kinematics   body kinematics containing specific forces and angular rates applied to
3827      *                     the body.
3828      * @param result       instance where new estimated ECI frame containing new body position,
3829      *                     velocity and coordinate transformation matrix will be stored.
3830      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3831      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3832      *                                                       body-to-ECI-frame coordinate transformation matrix are
3833      *                                                       invalid.
3834      */
3835     public static void navigateECI(
3836             final double timeInterval, final double oldX, final double oldY, final double oldZ,
3837             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
3838             final BodyKinematics kinematics, final ECIFrame result) throws InertialNavigatorException,
3839             InvalidSourceAndDestinationFrameTypeException {
3840         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
3841                 kinematics.getFx(), kinematics.getFy(), kinematics.getFz(),
3842                 kinematics.getAngularRateX(), kinematics.getAngularRateY(), kinematics.getAngularRateZ(), result);
3843     }
3844 
3845     /**
3846      * Runs precision ECI-frame inertial navigation equations.
3847      *
3848      * @param timeInterval time interval between epochs expressed in seconds (s).
3849      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3850      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3851      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3852      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3853      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3854      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3855      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3856      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
3857      *                     resolved along ECI-frame axes.
3858      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
3859      *                     resolved along ECI-frame axes.
3860      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
3861      *                     resolved along ECI-frame axes.
3862      * @param kinematics   body kinematics containing specific forces and angular rates applied to
3863      *                     the body.
3864      * @param result       instance where new estimated ECI frame containing new body position,
3865      *                     velocity and coordinate transformation matrix will be stored.
3866      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3867      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3868      *                                                       body-to-ECI-frame coordinate transformation matrix are
3869      *                                                       invalid.
3870      */
3871     public static void navigateECI(
3872             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
3873             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
3874             final BodyKinematics kinematics, final ECIFrame result) throws InertialNavigatorException,
3875             InvalidSourceAndDestinationFrameTypeException {
3876         navigateECI(convertTimeToDouble(timeInterval), oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
3877                 kinematics, result);
3878     }
3879 
3880     /**
3881      * Runs precision ECI-frame inertial navigation equations.
3882      *
3883      * @param timeInterval time interval between epochs expressed in seconds (s).
3884      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3885      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3886      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3887      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3888      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3889      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3890      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3891      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3892      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3893      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3894      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3895      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3896      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3897      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3898      *                     resolved along body-frame axes, averaged over time interval.
3899      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
3900      *                     resolved along body-frame axes, averaged over time interval.
3901      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
3902      *                     resolved along body-frame axes, averaged over time interval.
3903      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
3904      *                     resolved along body-frame axes, averaged over time interval and
3905      *                     expressed in radians per second (rad/s).
3906      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
3907      *                     resolved along body-frame axes, averaged over time interval and
3908      *                     expressed in radians per second (rad/s).
3909      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
3910      *                     resolved along body-frame axes, averaged over time interval and
3911      *                     expressed in radians per second (rad/s).
3912      * @param result       instance where new estimated ECI frame containing new body position,
3913      *                     velocity and coordinate transformation matrix will be stored.
3914      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3915      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3916      *                                                       body-to-ECI-frame coordinate transformation matrix are
3917      *                                                       invalid.
3918      */
3919     public static void navigateECI(
3920             final double timeInterval, final double oldX, final double oldY, final double oldZ,
3921             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
3922             final Acceleration fx, final Acceleration fy, final Acceleration fz,
3923             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
3924             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
3925         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz,
3926                 convertAccelerationToDouble(fx), convertAccelerationToDouble(fy), convertAccelerationToDouble(fz),
3927                 angularRateX, angularRateY, angularRateZ, result);
3928     }
3929 
3930     /**
3931      * Runs precision ECI-frame inertial navigation equations.
3932      *
3933      * @param timeInterval time interval between epochs.
3934      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3935      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3936      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3937      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3938      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3939      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3940      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3941      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3942      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3943      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3944      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3945      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3946      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3947      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3948      *                     resolved along body-frame axes, averaged over time interval.
3949      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
3950      *                     resolved along body-frame axes, averaged over time interval.
3951      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
3952      *                     resolved along body-frame axes, averaged over time interval.
3953      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
3954      *                     resolved along body-frame axes, averaged over time interval and
3955      *                     expressed in radians per second (rad/s).
3956      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
3957      *                     resolved along body-frame axes, averaged over time interval and
3958      *                     expressed in radians per second (rad/s).
3959      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
3960      *                     resolved along body-frame axes, averaged over time interval and
3961      *                     expressed in radians per second (rad/s).
3962      * @param result       instance where new estimated ECI frame containing new body position,
3963      *                     velocity and coordinate transformation matrix will be stored.
3964      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
3965      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
3966      *                                                       body-to-ECI-frame coordinate transformation matrix are
3967      *                                                       invalid.
3968      */
3969     public static void navigateECI(
3970             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
3971             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
3972             final Acceleration fx, final Acceleration fy, final Acceleration fz,
3973             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
3974             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
3975         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz,
3976                 convertAccelerationToDouble(fx), convertAccelerationToDouble(fy), convertAccelerationToDouble(fz),
3977                 angularRateX, angularRateY, angularRateZ, result);
3978     }
3979 
3980     /**
3981      * Runs precision ECI-frame inertial navigation equations.
3982      *
3983      * @param timeInterval time interval between epochs expressed in seconds (s).
3984      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
3985      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3986      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
3987      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3988      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
3989      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
3990      * @param oldC         previous body-to-ECI-frame coordinate transformation.
3991      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
3992      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3993      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
3994      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3995      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
3996      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
3997      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
3998      *                     resolved along body-frame axes, averaged over time interval and
3999      *                     expressed in meters per squared second (m/s^2).
4000      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4001      *                     resolved along body-frame axes, averaged over time interval and
4002      *                     expressed in meters per squared second (m/s^2).
4003      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4004      *                     resolved along body-frame axes, averaged over time interval and
4005      *                     expressed in meters per squared second (m/s^2).
4006      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4007      *                     resolved along body-frame axes, averaged over time interval.
4008      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4009      *                     resolved along body-frame axes, averaged over time interval.
4010      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4011      *                     resolved along body-frame axes, averaged over time interval.
4012      * @param result       instance where new estimated ECI frame containing new body position,
4013      *                     velocity and coordinate transformation matrix will be stored.
4014      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4015      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4016      *                                                       body-to-ECI-frame coordinate transformation matrix are
4017      *                                                       invalid.
4018      */
4019     public static void navigateECI(
4020             final double timeInterval, final double oldX, final double oldY, final double oldZ,
4021             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
4022             final double fx, final double fy, final double fz,
4023             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
4024             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
4025         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
4026                 convertAngularSpeedToDouble(angularRateX), convertAngularSpeedToDouble(angularRateY),
4027                 convertAngularSpeedToDouble(angularRateZ), result);
4028     }
4029 
4030     /**
4031      * Runs precision ECI-frame inertial navigation equations.
4032      *
4033      * @param timeInterval time interval between epochs.
4034      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
4035      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4036      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
4037      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4038      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
4039      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4040      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4041      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
4042      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4043      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
4044      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4045      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
4046      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4047      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4048      *                     resolved along body-frame axes, averaged over time interval and
4049      *                     expressed in meters per squared second (m/s^2).
4050      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4051      *                     resolved along body-frame axes, averaged over time interval and
4052      *                     expressed in meters per squared second (m/s^2).
4053      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4054      *                     resolved along body-frame axes, averaged over time interval and
4055      *                     expressed in meters per squared second (m/s^2).
4056      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4057      *                     resolved along body-frame axes, averaged over time interval.
4058      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4059      *                     resolved along body-frame axes, averaged over time interval.
4060      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4061      *                     resolved along body-frame axes, averaged over time interval.
4062      * @param result       instance where new estimated ECI frame containing new body position,
4063      *                     velocity and coordinate transformation matrix will be stored.
4064      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4065      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4066      *                                                       body-to-ECI-frame coordinate transformation matrix are
4067      *                                                       invalid.
4068      */
4069     public static void navigateECI(
4070             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
4071             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
4072             final double fx, final double fy, final double fz,
4073             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
4074             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
4075         navigateECI(convertTimeToDouble(timeInterval), oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
4076                 angularRateX, angularRateY, angularRateZ, result);
4077     }
4078 
4079     /**
4080      * Runs precision ECI-frame inertial navigation equations.
4081      *
4082      * @param timeInterval time interval between epochs expressed in seconds (s).
4083      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
4084      *                     frame, resolved along ECI-frame axes.
4085      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
4086      *                     frame, resolved along ECI-frame axes.
4087      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
4088      *                     frame, resolved along ECI-frame axes.
4089      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4090      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
4091      *                     resolved along ECI-frame axes.
4092      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
4093      *                     resolved along ECI-frame axes.
4094      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
4095      *                     resolved along ECI-frame axes.
4096      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4097      *                     resolved along body-frame axes, averaged over time interval and
4098      *                     expressed in meters per squared second (m/s^2).
4099      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4100      *                     resolved along body-frame axes, averaged over time interval and
4101      *                     expressed in meters per squared second (m/s^2).
4102      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4103      *                     resolved along body-frame axes, averaged over time interval and
4104      *                     expressed in meters per squared second (m/s^2).
4105      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4106      *                     resolved along body-frame axes, averaged over time interval and
4107      *                     expressed in radians per second (rad/s).
4108      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4109      *                     resolved along body-frame axes, averaged over time interval and
4110      *                     expressed in radians per second (rad/s).
4111      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4112      *                     resolved along body-frame axes, averaged over time interval and
4113      *                     expressed in radians per second (rad/s).
4114      * @param result       instance where new estimated ECI frame containing new body position,
4115      *                     velocity and coordinate transformation matrix will be stored.
4116      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4117      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4118      *                                                       body-to-ECI-frame coordinate transformation matrix are
4119      *                                                       invalid.
4120      */
4121     public static void navigateECI(
4122             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
4123             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
4124             final double fx, final double fy, final double fz,
4125             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
4126             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
4127         navigateECI(timeInterval,
4128                 convertDistanceToDouble(oldX), convertDistanceToDouble(oldY), convertDistanceToDouble(oldZ), oldC,
4129                 convertSpeedToDouble(oldSpeedX), convertSpeedToDouble(oldSpeedY), convertSpeedToDouble(oldSpeedZ),
4130                 fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
4131     }
4132 
4133     /**
4134      * Runs precision ECI-frame inertial navigation equations.
4135      *
4136      * @param timeInterval time interval between epochs.
4137      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
4138      *                     frame, resolved along ECI-frame axes.
4139      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
4140      *                     frame, resolved along ECI-frame axes.
4141      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
4142      *                     frame, resolved along ECI-frame axes.
4143      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4144      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
4145      *                     resolved along ECI-frame axes.
4146      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
4147      *                     resolved along ECI-frame axes.
4148      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
4149      *                     resolved along ECI-frame axes.
4150      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4151      *                     resolved along body-frame axes, averaged over time interval and
4152      *                     expressed in meters per squared second (m/s^2).
4153      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4154      *                     resolved along body-frame axes, averaged over time interval and
4155      *                     expressed in meters per squared second (m/s^2).
4156      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4157      *                     resolved along body-frame axes, averaged over time interval and
4158      *                     expressed in meters per squared second (m/s^2).
4159      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4160      *                     resolved along body-frame axes, averaged over time interval and
4161      *                     expressed in radians per second (rad/s).
4162      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4163      *                     resolved along body-frame axes, averaged over time interval and
4164      *                     expressed in radians per second (rad/s).
4165      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4166      *                     resolved along body-frame axes, averaged over time interval and
4167      *                     expressed in radians per second (rad/s).
4168      * @param result       instance where new estimated ECI frame containing new body position,
4169      *                     velocity and coordinate transformation matrix will be stored.
4170      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4171      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4172      *                                                       body-to-ECI-frame coordinate transformation matrix are
4173      *                                                       invalid.
4174      */
4175     public static void navigateECI(
4176             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
4177             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
4178             final double fx, final double fy, final double fz,
4179             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
4180             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
4181         navigateECI(convertTimeToDouble(timeInterval), oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
4182                 fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
4183     }
4184 
4185     /**
4186      * Runs precision ECI-frame inertial navigation equations.
4187      *
4188      * @param timeInterval time interval between epochs expressed in seconds (s).
4189      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
4190      *                     frame, resolved along ECI-frame axes.
4191      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
4192      *                     frame, resolved along ECI-frame axes.
4193      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
4194      *                     frame, resolved along ECI-frame axes.
4195      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4196      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
4197      *                     resolved along ECI-frame axes.
4198      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
4199      *                     resolved along ECI-frame axes.
4200      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
4201      *                     resolved along ECI-frame axes.
4202      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4203      *                     resolved along body-frame axes, averaged over time interval.
4204      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4205      *                     resolved along body-frame axes, averaged over time interval.
4206      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4207      *                     resolved along body-frame axes, averaged over time interval.
4208      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4209      *                     resolved along body-frame axes, averaged over time interval.
4210      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4211      *                     resolved along body-frame axes, averaged over time interval.
4212      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4213      *                     resolved along body-frame axes, averaged over time interval.
4214      * @param result       instance where new estimated ECI frame containing new body position,
4215      *                     velocity and coordinate transformation matrix will be stored.
4216      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4217      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4218      *                                                       body-to-ECI-frame coordinate transformation matrix are
4219      *                                                       invalid.
4220      */
4221     public static void navigateECI(
4222             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
4223             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
4224             final Acceleration fx, final Acceleration fy, final Acceleration fz,
4225             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
4226             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
4227         navigateECI(timeInterval,
4228                 convertDistanceToDouble(oldX), convertDistanceToDouble(oldY), convertDistanceToDouble(oldZ), oldC,
4229                 convertSpeedToDouble(oldSpeedX), convertSpeedToDouble(oldSpeedY), convertSpeedToDouble(oldSpeedZ),
4230                 convertAccelerationToDouble(fx), convertAccelerationToDouble(fy), convertAccelerationToDouble(fz),
4231                 convertAngularSpeedToDouble(angularRateX), convertAngularSpeedToDouble(angularRateY),
4232                 convertAngularSpeedToDouble(angularRateZ), result);
4233     }
4234 
4235     /**
4236      * Runs precision ECI-frame inertial navigation equations.
4237      *
4238      * @param timeInterval time interval between epochs.
4239      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
4240      *                     frame, resolved along ECI-frame axes.
4241      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
4242      *                     frame, resolved along ECI-frame axes.
4243      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
4244      *                     frame, resolved along ECI-frame axes.
4245      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4246      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
4247      *                     resolved along ECI-frame axes.
4248      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
4249      *                     resolved along ECI-frame axes.
4250      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
4251      *                     resolved along ECI-frame axes.
4252      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4253      *                     resolved along body-frame axes, averaged over time interval.
4254      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4255      *                     resolved along body-frame axes, averaged over time interval.
4256      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4257      *                     resolved along body-frame axes, averaged over time interval.
4258      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4259      *                     resolved along body-frame axes, averaged over time interval.
4260      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4261      *                     resolved along body-frame axes, averaged over time interval.
4262      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4263      *                     resolved along body-frame axes, averaged over time interval.
4264      * @param result       instance where new estimated ECI frame containing new body position,
4265      *                     velocity and coordinate transformation matrix will be stored.
4266      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4267      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4268      *                                                       body-to-ECI-frame coordinate transformation matrix are
4269      *                                                       invalid.
4270      */
4271     public static void navigateECI(
4272             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
4273             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
4274             final Acceleration fx, final Acceleration fy, final Acceleration fz,
4275             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
4276             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
4277         navigateECI(convertTimeToDouble(timeInterval), oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
4278                 fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
4279     }
4280 
4281     /**
4282      * Runs precision ECI-frame inertial navigation equations.
4283      *
4284      * @param timeInterval time interval between epochs expressed in seconds (s).
4285      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
4286      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4287      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
4288      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4289      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
4290      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4291      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4292      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
4293      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4294      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
4295      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4296      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
4297      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4298      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4299      *                     resolved along body-frame axes, averaged over time interval.
4300      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4301      *                     resolved along body-frame axes, averaged over time interval.
4302      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4303      *                     resolved along body-frame axes, averaged over time interval.
4304      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4305      *                     resolved along body-frame axes, averaged over time interval.
4306      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4307      *                     resolved along body-frame axes, averaged over time interval.
4308      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4309      *                     resolved along body-frame axes, averaged over time interval.
4310      * @param result       instance where new estimated ECI frame containing new body position,
4311      *                     velocity and coordinate transformation matrix will be stored.
4312      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4313      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4314      *                                                       body-to-ECI-frame coordinate transformation matrix are
4315      *                                                       invalid.
4316      */
4317     public static void navigateECI(
4318             final double timeInterval, final double oldX, final double oldY, final double oldZ,
4319             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
4320             final Acceleration fx, final Acceleration fy, final Acceleration fz,
4321             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
4322             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
4323         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz,
4324                 convertAccelerationToDouble(fx), convertAccelerationToDouble(fy), convertAccelerationToDouble(fz),
4325                 convertAngularSpeedToDouble(angularRateX), convertAngularSpeedToDouble(angularRateY),
4326                 convertAngularSpeedToDouble(angularRateZ), result);
4327     }
4328 
4329     /**
4330      * Runs precision ECI-frame inertial navigation equations.
4331      *
4332      * @param timeInterval time interval between epochs.
4333      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
4334      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4335      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
4336      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4337      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
4338      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4339      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4340      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
4341      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4342      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
4343      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4344      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
4345      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4346      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4347      *                     resolved along body-frame axes, averaged over time interval.
4348      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4349      *                     resolved along body-frame axes, averaged over time interval.
4350      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4351      *                     resolved along body-frame axes, averaged over time interval.
4352      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4353      *                     resolved along body-frame axes, averaged over time interval.
4354      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4355      *                     resolved along body-frame axes, averaged over time interval.
4356      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4357      *                     resolved along body-frame axes, averaged over time interval.
4358      * @param result       instance where new estimated ECI frame containing new body position,
4359      *                     velocity and coordinate transformation matrix will be stored.
4360      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4361      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4362      *                                                       body-to-ECI-frame coordinate transformation matrix are
4363      *                                                       invalid.
4364      */
4365     public static void navigateECI(
4366             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
4367             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
4368             final Acceleration fx, final Acceleration fy, final Acceleration fz,
4369             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
4370             final ECIFrame result) throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
4371         navigateECI(convertTimeToDouble(timeInterval), oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
4372                 angularRateX, angularRateY, angularRateZ, result);
4373     }
4374 
4375     /**
4376      * Runs precision ECI-frame inertial navigation equations.
4377      *
4378      * @param timeInterval time interval between epochs expressed in seconds (s).
4379      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
4380      *                     frame, resolved along ECI-frame axes.
4381      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
4382      *                     frame, resolved along ECI-frame axes.
4383      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
4384      *                     frame, resolved along ECI-frame axes.
4385      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4386      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
4387      *                     resolved along ECI-frame axes.
4388      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
4389      *                     resolved along ECI-frame axes.
4390      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
4391      *                     resolved along ECI-frame axes.
4392      * @param kinematics   body kinematics containing specific forces and angular rates applied to
4393      *                     the body.
4394      * @param result       instance where new estimated ECI frame containing new body position,
4395      *                     velocity and coordinate transformation matrix will be stored.
4396      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4397      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4398      *                                                       body-to-ECI-frame coordinate transformation matrix are
4399      *                                                       invalid.
4400      */
4401     public static void navigateECI(
4402             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
4403             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
4404             final BodyKinematics kinematics, final ECIFrame result) throws InertialNavigatorException,
4405             InvalidSourceAndDestinationFrameTypeException {
4406         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
4407                 kinematics.getFx(), kinematics.getFy(), kinematics.getFz(),
4408                 kinematics.getAngularRateX(), kinematics.getAngularRateY(), kinematics.getAngularRateZ(), result);
4409     }
4410 
4411     /**
4412      * Runs precision ECI-frame inertial navigation equations.
4413      *
4414      * @param timeInterval time interval between epochs.
4415      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
4416      *                     frame, resolved along ECI-frame axes.
4417      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
4418      *                     frame, resolved along ECI-frame axes.
4419      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
4420      *                     frame, resolved along ECI-frame axes.
4421      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4422      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
4423      *                     resolved along ECI-frame axes.
4424      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
4425      *                     resolved along ECI-frame axes.
4426      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
4427      *                     resolved along ECI-frame axes.
4428      * @param kinematics   body kinematics containing specific forces and angular rates applied to
4429      *                     the body.
4430      * @param result       instance where new estimated ECI frame containing new body position,
4431      *                     velocity and coordinate transformation matrix will be stored.
4432      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4433      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4434      *                                                       body-to-ECI-frame coordinate transformation matrix are
4435      *                                                       invalid.
4436      */
4437     public static void navigateECI(
4438             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
4439             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
4440             final BodyKinematics kinematics, final ECIFrame result) throws InertialNavigatorException,
4441             InvalidSourceAndDestinationFrameTypeException {
4442         navigateECI(convertTimeToDouble(timeInterval), oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ,
4443                 kinematics, result);
4444     }
4445 
4446     /**
4447      * Runs precision ECI-frame inertial navigation equations.
4448      *
4449      * @param timeInterval time interval between epochs expressed in seconds (s).
4450      * @param oldFrame     previous ECI frame containing body position, velocity and
4451      *                     coordinate transformation matrix.
4452      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4453      *                     resolved along body-frame axes, averaged over time interval and
4454      *                     expressed in meters per squared second (m/s^2).
4455      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4456      *                     resolved along body-frame axes, averaged over time interval and
4457      *                     expressed in meters per squared second (m/s^2).
4458      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4459      *                     resolved along body-frame axes, averaged over time interval and
4460      *                     expressed in meters per squared second (m/s^2).
4461      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4462      *                     resolved along body-frame axes, averaged over time interval and
4463      *                     expressed in radians per second (rad/s).
4464      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4465      *                     resolved along body-frame axes, averaged over time interval and
4466      *                     expressed in radians per second (rad/s).
4467      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4468      *                     resolved along body-frame axes, averaged over time interval and
4469      *                     expressed in radians per second (rad/s).
4470      * @param result       instance where new estimated ECI frame containing new body position,
4471      *                     velocity and coordinate transformation matrix will be stored.
4472      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
4473      */
4474     public static void navigateECI(
4475             final double timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
4476             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
4477             throws InertialNavigatorException {
4478         try {
4479             navigateECI(timeInterval, oldFrame.getX(), oldFrame.getY(), oldFrame.getZ(),
4480                     oldFrame.getCoordinateTransformation(), oldFrame.getVx(), oldFrame.getVy(), oldFrame.getVz(),
4481                     fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
4482         } catch (final InvalidSourceAndDestinationFrameTypeException ignore) {
4483             // never happens
4484         }
4485     }
4486 
4487     /**
4488      * Runs precision ECI-frame inertial navigation equations.
4489      *
4490      * @param timeInterval time interval between epochs.
4491      * @param oldFrame     previous ECI frame containing body position, velocity and
4492      *                     coordinate transformation matrix.
4493      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4494      *                     resolved along body-frame axes, averaged over time interval and
4495      *                     expressed in meters per squared second (m/s^2).
4496      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4497      *                     resolved along body-frame axes, averaged over time interval and
4498      *                     expressed in meters per squared second (m/s^2).
4499      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4500      *                     resolved along body-frame axes, averaged over time interval and
4501      *                     expressed in meters per squared second (m/s^2).
4502      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4503      *                     resolved along body-frame axes, averaged over time interval and
4504      *                     expressed in radians per second (rad/s).
4505      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4506      *                     resolved along body-frame axes, averaged over time interval and
4507      *                     expressed in radians per second (rad/s).
4508      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4509      *                     resolved along body-frame axes, averaged over time interval and
4510      *                     expressed in radians per second (rad/s).
4511      * @param result       instance where new estimated ECI frame containing new body position,
4512      *                     velocity and coordinate transformation matrix will be stored.
4513      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
4514      */
4515     public static void navigateECI(
4516             final Time timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
4517             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
4518             throws InertialNavigatorException {
4519         navigateECI(convertTimeToDouble(timeInterval), oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ,
4520                 result);
4521     }
4522 
4523     /**
4524      * Runs precision ECI-frame inertial navigation equations.
4525      *
4526      * @param timeInterval time interval between epochs expressed in seconds (s).
4527      * @param oldFrame     previous ECI frame containing body position, velocity and
4528      *                     coordinate transformation matrix.
4529      * @param kinematics   body kinematics containing specific forces and angular rates applied to
4530      *                     the body.
4531      * @param result       instance where new estimated ECI frame containing new body position,
4532      *                     velocity and coordinate transformation matrix will be stored.
4533      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
4534      */
4535     public static void navigateECI(
4536             final double timeInterval, final ECIFrame oldFrame, final BodyKinematics kinematics, final ECIFrame result)
4537             throws InertialNavigatorException {
4538         try {
4539             navigateECI(timeInterval, oldFrame.getX(), oldFrame.getY(), oldFrame.getZ(),
4540                     oldFrame.getCoordinateTransformation(), oldFrame.getVx(), oldFrame.getVy(), oldFrame.getVz(),
4541                     kinematics, result);
4542         } catch (final InvalidSourceAndDestinationFrameTypeException ignore) {
4543             // never happens
4544         }
4545     }
4546 
4547     /**
4548      * Runs precision ECI-frame inertial navigation equations.
4549      *
4550      * @param timeInterval time interval between epochs.
4551      * @param oldFrame     previous ECI frame containing body position, velocity and
4552      *                     coordinate transformation matrix.
4553      * @param kinematics   body kinematics containing specific forces and angular rates applied to
4554      *                     the body.
4555      * @param result       instance where new estimated ECI frame containing new body position,
4556      *                     velocity and coordinate transformation matrix will be stored.
4557      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
4558      */
4559     public static void navigateECI(
4560             final Time timeInterval, final ECIFrame oldFrame, final BodyKinematics kinematics, final ECIFrame result)
4561             throws InertialNavigatorException {
4562         navigateECI(convertTimeToDouble(timeInterval), oldFrame, kinematics, result);
4563     }
4564 
4565     /**
4566      * Runs precision ECI-frame inertial navigation equations.
4567      *
4568      * @param timeInterval time interval between epochs expressed in seconds (s).
4569      * @param oldFrame     previous ECI frame containing body position, velocity and
4570      *                     coordinate transformation matrix.
4571      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4572      *                     resolved along body-frame axes, averaged over time interval.
4573      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4574      *                     resolved along body-frame axes, averaged over time interval.
4575      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4576      *                     resolved along body-frame axes, averaged over time interval.
4577      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4578      *                     resolved along body-frame axes, averaged over time interval and
4579      *                     expressed in radians per second (rad/s).
4580      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4581      *                     resolved along body-frame axes, averaged over time interval and
4582      *                     expressed in radians per second (rad/s).
4583      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4584      *                     resolved along body-frame axes, averaged over time interval and
4585      *                     expressed in radians per second (rad/s).
4586      * @param result       instance where new estimated ECI frame containing new body position,
4587      *                     velocity and coordinate transformation matrix will be stored.
4588      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
4589      */
4590     public static void navigateECI(
4591             final double timeInterval, final ECIFrame oldFrame,
4592             final Acceleration fx, final Acceleration fy, final Acceleration fz,
4593             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
4594             throws InertialNavigatorException {
4595         try {
4596             navigateECI(timeInterval, oldFrame.getX(), oldFrame.getY(), oldFrame.getZ(),
4597                     oldFrame.getCoordinateTransformation(),
4598                     oldFrame.getVx(), oldFrame.getVy(), oldFrame.getVz(), fx, fy, fz,
4599                     angularRateX, angularRateY, angularRateZ, result);
4600         } catch (final InvalidSourceAndDestinationFrameTypeException ignore) {
4601             // never happens
4602         }
4603     }
4604 
4605     /**
4606      * Runs precision ECI-frame inertial navigation equations.
4607      *
4608      * @param timeInterval time interval between epochs.
4609      * @param oldFrame     previous ECI frame containing body position, velocity and
4610      *                     coordinate transformation matrix.
4611      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4612      *                     resolved along body-frame axes, averaged over time interval.
4613      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4614      *                     resolved along body-frame axes, averaged over time interval.
4615      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4616      *                     resolved along body-frame axes, averaged over time interval.
4617      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4618      *                     resolved along body-frame axes, averaged over time interval and
4619      *                     expressed in radians per second (rad/s).
4620      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4621      *                     resolved along body-frame axes, averaged over time interval and
4622      *                     expressed in radians per second (rad/s).
4623      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4624      *                     resolved along body-frame axes, averaged over time interval and
4625      *                     expressed in radians per second (rad/s).
4626      * @param result       instance where new estimated ECI frame containing new body position,
4627      *                     velocity and coordinate transformation matrix will be stored.
4628      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
4629      */
4630     public static void navigateECI(
4631             final Time timeInterval, final ECIFrame oldFrame,
4632             final Acceleration fx, final Acceleration fy, final Acceleration fz,
4633             final double angularRateX, final double angularRateY, final double angularRateZ, final ECIFrame result)
4634             throws InertialNavigatorException {
4635         navigateECI(convertTimeToDouble(timeInterval), oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ,
4636                 result);
4637     }
4638 
4639     /**
4640      * Runs precision ECI-frame inertial navigation equations.
4641      *
4642      * @param timeInterval time interval between epochs expressed in seconds (s).
4643      * @param oldFrame     previous ECI frame containing body position, velocity and
4644      *                     coordinate transformation matrix.
4645      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4646      *                     resolved along body-frame axes, averaged over time interval and
4647      *                     expressed in meters per squared second (m/s^2).
4648      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4649      *                     resolved along body-frame axes, averaged over time interval and
4650      *                     expressed in meters per squared second (m/s^2).
4651      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4652      *                     resolved along body-frame axes, averaged over time interval and
4653      *                     expressed in meters per squared second (m/s^2).
4654      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4655      *                     resolved along body-frame axes, averaged over time interval.
4656      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4657      *                     resolved along body-frame axes, averaged over time interval.
4658      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4659      *                     resolved along body-frame axes, averaged over time interval.
4660      * @param result       instance where new estimated ECI frame containing new body position,
4661      *                     velocity and coordinate transformation matrix will be stored.
4662      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
4663      */
4664     public static void navigateECI(
4665             final double timeInterval, final ECIFrame oldFrame,
4666             final double fx, final double fy, final double fz,
4667             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
4668             final ECIFrame result) throws InertialNavigatorException {
4669         try {
4670             navigateECI(timeInterval, oldFrame.getX(), oldFrame.getY(), oldFrame.getZ(),
4671                     oldFrame.getCoordinateTransformation(), oldFrame.getVx(), oldFrame.getVy(), oldFrame.getVz(),
4672                     fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
4673         } catch (final InvalidSourceAndDestinationFrameTypeException ignore) {
4674             // never happens
4675         }
4676     }
4677 
4678     /**
4679      * Runs precision ECI-frame inertial navigation equations.
4680      *
4681      * @param timeInterval time interval between epochs.
4682      * @param oldFrame     previous ECI frame containing body position, velocity and
4683      *                     coordinate transformation matrix.
4684      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4685      *                     resolved along body-frame axes, averaged over time interval and
4686      *                     expressed in meters per squared second (m/s^2).
4687      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4688      *                     resolved along body-frame axes, averaged over time interval and
4689      *                     expressed in meters per squared second (m/s^2).
4690      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4691      *                     resolved along body-frame axes, averaged over time interval and
4692      *                     expressed in meters per squared second (m/s^2).
4693      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4694      *                     resolved along body-frame axes, averaged over time interval.
4695      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4696      *                     resolved along body-frame axes, averaged over time interval.
4697      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4698      *                     resolved along body-frame axes, averaged over time interval.
4699      * @param result       instance where new estimated ECI frame containing new body position,
4700      *                     velocity and coordinate transformation matrix will be stored.
4701      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
4702      */
4703     public static void navigateECI(
4704             final Time timeInterval, final ECIFrame oldFrame,
4705             final double fx, final double fy, final double fz,
4706             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
4707             final ECIFrame result) throws InertialNavigatorException {
4708         navigateECI(convertTimeToDouble(timeInterval), oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ,
4709                 result);
4710     }
4711 
4712     /**
4713      * Runs precision ECI-frame inertial navigation equations.
4714      *
4715      * @param timeInterval time interval between epochs expressed in seconds (s).
4716      * @param oldFrame     previous ECI frame containing body position, velocity and
4717      *                     coordinate transformation matrix.
4718      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4719      *                     resolved along body-frame axes, averaged over time interval.
4720      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4721      *                     resolved along body-frame axes, averaged over time interval.
4722      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4723      *                     resolved along body-frame axes, averaged over time interval.
4724      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4725      *                     resolved along body-frame axes, averaged over time interval.
4726      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4727      *                     resolved along body-frame axes, averaged over time interval.
4728      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4729      *                     resolved along body-frame axes, averaged over time interval.
4730      * @param result       instance where new estimated ECI frame containing new body position,
4731      *                     velocity and coordinate transformation matrix will be stored.
4732      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
4733      */
4734     public static void navigateECI(
4735             final double timeInterval, final ECIFrame oldFrame,
4736             final Acceleration fx, final Acceleration fy, final Acceleration fz,
4737             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
4738             final ECIFrame result) throws InertialNavigatorException {
4739         try {
4740             navigateECI(timeInterval, oldFrame.getX(), oldFrame.getY(), oldFrame.getZ(),
4741                     oldFrame.getCoordinateTransformation(), oldFrame.getVx(), oldFrame.getVy(), oldFrame.getVz(),
4742                     fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
4743         } catch (final InvalidSourceAndDestinationFrameTypeException ignore) {
4744             // never happens
4745         }
4746     }
4747 
4748     /**
4749      * Runs precision ECI-frame inertial navigation equations.
4750      *
4751      * @param timeInterval time interval between epochs.
4752      * @param oldFrame     previous ECI frame containing body position, velocity and
4753      *                     coordinate transformation matrix.
4754      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4755      *                     resolved along body-frame axes, averaged over time interval.
4756      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4757      *                     resolved along body-frame axes, averaged over time interval.
4758      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4759      *                     resolved along body-frame axes, averaged over time interval.
4760      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4761      *                     resolved along body-frame axes, averaged over time interval.
4762      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4763      *                     resolved along body-frame axes, averaged over time interval.
4764      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4765      *                     resolved along body-frame axes, averaged over time interval.
4766      * @param result       instance where new estimated ECI frame containing new body position,
4767      *                     velocity and coordinate transformation matrix will be stored.
4768      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
4769      */
4770     public static void navigateECI(
4771             final Time timeInterval, final ECIFrame oldFrame,
4772             final Acceleration fx, final Acceleration fy, final Acceleration fz,
4773             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ,
4774             final ECIFrame result) throws InertialNavigatorException {
4775         navigateECI(convertTimeToDouble(timeInterval), oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ,
4776                 result);
4777     }
4778 
4779     /**
4780      * Runs precision ECI-frame inertial navigation equations.
4781      *
4782      * @param timeInterval time interval between epochs expressed in seconds (s).
4783      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
4784      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4785      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
4786      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4787      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
4788      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4789      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4790      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
4791      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4792      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
4793      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4794      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
4795      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4796      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4797      *                     resolved along body-frame axes, averaged over time interval and
4798      *                     expressed in meters per squared second (m/s^2).
4799      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4800      *                     resolved along body-frame axes, averaged over time interval and
4801      *                     expressed in meters per squared second (m/s^2).
4802      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4803      *                     resolved along body-frame axes, averaged over time interval and
4804      *                     expressed in meters per squared second (m/s^2).
4805      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4806      *                     resolved along body-frame axes, averaged over time interval and
4807      *                     expressed in radians per second (rad/s).
4808      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4809      *                     resolved along body-frame axes, averaged over time interval and
4810      *                     expressed in radians per second (rad/s).
4811      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4812      *                     resolved along body-frame axes, averaged over time interval and
4813      *                     expressed in radians per second (rad/s).
4814      * @return estimated ECI frame containing new body position, velocity and coordinate
4815      * transformation matrix.
4816      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4817      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4818      *                                                       body-to-ECI-frame coordinate transformation matrix are
4819      *                                                       invalid.
4820      */
4821     public static ECIFrame navigateECIAndReturnNew(
4822             final double timeInterval, final double oldX, final double oldY, final double oldZ,
4823             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
4824             final double fx, final double fy, final double fz,
4825             final double angularRateX, final double angularRateY, final double angularRateZ)
4826             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
4827         final var result = new ECIFrame();
4828         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
4829                 angularRateX, angularRateY, angularRateZ, result);
4830         return result;
4831     }
4832 
4833     /**
4834      * Runs precision ECI-frame inertial navigation equations.
4835      *
4836      * @param timeInterval time interval between epochs.
4837      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
4838      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4839      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
4840      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4841      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
4842      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4843      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4844      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
4845      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4846      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
4847      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4848      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
4849      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4850      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4851      *                     resolved along body-frame axes, averaged over time interval and
4852      *                     expressed in meters per squared second (m/s^2).
4853      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4854      *                     resolved along body-frame axes, averaged over time interval and
4855      *                     expressed in meters per squared second (m/s^2).
4856      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4857      *                     resolved along body-frame axes, averaged over time interval and
4858      *                     expressed in meters per squared second (m/s^2).
4859      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4860      *                     resolved along body-frame axes, averaged over time interval and
4861      *                     expressed in radians per second (rad/s).
4862      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4863      *                     resolved along body-frame axes, averaged over time interval and
4864      *                     expressed in radians per second (rad/s).
4865      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4866      *                     resolved along body-frame axes, averaged over time interval and
4867      *                     expressed in radians per second (rad/s).
4868      * @return estimated ECI frame containing new body position, velocity and coordinate
4869      * transformation matrix.
4870      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4871      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4872      *                                                       body-to-ECI-frame coordinate transformation matrix are
4873      *                                                       invalid.
4874      */
4875     public static ECIFrame navigateECIAndReturnNew(
4876             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
4877             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
4878             final double fx, final double fy, final double fz,
4879             final double angularRateX, final double angularRateY, final double angularRateZ)
4880             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
4881         final var result = new ECIFrame();
4882         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
4883                 angularRateX, angularRateY, angularRateZ, result);
4884         return result;
4885     }
4886 
4887     /**
4888      * Runs precision ECI-frame inertial navigation equations.
4889      *
4890      * @param timeInterval time interval between epochs expressed in seconds (s).
4891      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
4892      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4893      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
4894      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4895      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
4896      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4897      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4898      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
4899      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4900      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
4901      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4902      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
4903      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4904      * @param kinematics   body kinematics containing specific forces and angular rates applied to
4905      *                     the body.
4906      * @return estimated ECI frame containing new body position, velocity and coordinate
4907      * transformation matrix.
4908      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4909      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4910      *                                                       body-to-ECI-frame coordinate transformation matrix are
4911      *                                                       invalid.
4912      */
4913     public static ECIFrame navigateECIAndReturnNew(
4914             final double timeInterval, final double oldX, final double oldY, final double oldZ,
4915             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
4916             final BodyKinematics kinematics) throws InertialNavigatorException,
4917             InvalidSourceAndDestinationFrameTypeException {
4918         final var result = new ECIFrame();
4919         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, kinematics, result);
4920         return result;
4921     }
4922 
4923     /**
4924      * Runs precision ECI-frame inertial navigation equations.
4925      *
4926      * @param timeInterval time interval between epochs.
4927      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
4928      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4929      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
4930      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4931      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
4932      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4933      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4934      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
4935      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4936      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
4937      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4938      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
4939      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4940      * @param kinematics   body kinematics containing specific forces and angular rates applied to
4941      *                     the body.
4942      * @return estimated ECI frame containing new body position, velocity and coordinate
4943      * transformation matrix.
4944      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4945      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4946      *                                                       body-to-ECI-frame coordinate transformation matrix are
4947      *                                                       invalid.
4948      */
4949     public static ECIFrame navigateECIAndReturnNew(
4950             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
4951             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
4952             final BodyKinematics kinematics) throws InertialNavigatorException,
4953             InvalidSourceAndDestinationFrameTypeException {
4954         final var result = new ECIFrame();
4955         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, kinematics, result);
4956         return result;
4957     }
4958 
4959     /**
4960      * Runs precision ECI-frame inertial navigation equations.
4961      *
4962      * @param timeInterval time interval between epochs expressed in seconds (s).
4963      * @param oldPosition  previous cartesian position of body frame with respect ECI
4964      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
4965      * @param oldC         previous body-to-ECI-frame coordinate transformation.
4966      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
4967      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4968      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
4969      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4970      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
4971      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
4972      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
4973      *                     resolved along body-frame axes, averaged over time interval and
4974      *                     expressed in meters per squared second (m/s^2).
4975      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
4976      *                     resolved along body-frame axes, averaged over time interval and
4977      *                     expressed in meters per squared second (m/s^2).
4978      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
4979      *                     resolved along body-frame axes, averaged over time interval and
4980      *                     expressed in meters per squared second (m/s^2).
4981      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
4982      *                     resolved along body-frame axes, averaged over time interval and
4983      *                     expressed in radians per second (rad/s).
4984      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
4985      *                     resolved along body-frame axes, averaged over time interval and
4986      *                     expressed in radians per second (rad/s).
4987      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
4988      *                     resolved along body-frame axes, averaged over time interval and
4989      *                     expressed in radians per second (rad/s).
4990      * @return estimated ECI frame containing new body position, velocity and coordinate
4991      * transformation matrix.
4992      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
4993      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
4994      *                                                       body-to-ECI-frame coordinate transformation matrix are
4995      *                                                       invalid.
4996      */
4997     public static ECIFrame navigateECIAndReturnNew(
4998             final double timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
4999             final double oldVx, final double oldVy, final double oldVz,
5000             final double fx, final double fy, final double fz,
5001             final double angularRateX, final double angularRateY, final double angularRateZ)
5002             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5003         final var result = new ECIFrame();
5004         navigateECI(timeInterval, oldPosition, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
5005                 angularRateX, angularRateY, angularRateZ, result);
5006         return result;
5007     }
5008 
5009     /**
5010      * Runs precision ECI-frame inertial navigation equations.
5011      *
5012      * @param timeInterval time interval between epochs.
5013      * @param oldPosition  previous cartesian position of body frame with respect ECI
5014      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5015      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5016      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
5017      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5018      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
5019      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5020      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
5021      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5022      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5023      *                     resolved along body-frame axes, averaged over time interval and
5024      *                     expressed in meters per squared second (m/s^2).
5025      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5026      *                     resolved along body-frame axes, averaged over time interval and
5027      *                     expressed in meters per squared second (m/s^2).
5028      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5029      *                     resolved along body-frame axes, averaged over time interval and
5030      *                     expressed in meters per squared second (m/s^2).
5031      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5032      *                     resolved along body-frame axes, averaged over time interval and
5033      *                     expressed in radians per second (rad/s).
5034      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5035      *                     resolved along body-frame axes, averaged over time interval and
5036      *                     expressed in radians per second (rad/s).
5037      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5038      *                     resolved along body-frame axes, averaged over time interval and
5039      *                     expressed in radians per second (rad/s).
5040      * @return estimated ECI frame containing new body position, velocity and coordinate
5041      * transformation matrix.
5042      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5043      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5044      *                                                       body-to-ECI-frame coordinate transformation matrix are
5045      *                                                       invalid.
5046      */
5047     public static ECIFrame navigateECIAndReturnNew(
5048             final Time timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
5049             final double oldVx, final double oldVy, final double oldVz,
5050             final double fx, final double fy, final double fz,
5051             final double angularRateX, final double angularRateY, final double angularRateZ)
5052             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5053         final var result = new ECIFrame();
5054         navigateECI(timeInterval, oldPosition, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
5055                 angularRateX, angularRateY, angularRateZ, result);
5056         return result;
5057     }
5058 
5059     /**
5060      * Runs precision ECI-frame inertial navigation equations.
5061      *
5062      * @param timeInterval time interval between epochs expressed in seconds (s).
5063      * @param oldPosition  previous cartesian position of body frame with respect ECI
5064      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5065      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5066      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
5067      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5068      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
5069      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5070      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
5071      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5072      * @param kinematics   body kinematics containing specific forces and angular rates applied to
5073      *                     the body.
5074      * @return estimated ECI frame containing new body position, velocity and coordinate
5075      * transformation matrix.
5076      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5077      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5078      *                                                       body-to-ECI-frame coordinate transformation matrix are
5079      *                                                       invalid.
5080      */
5081     public static ECIFrame navigateECIAndReturnNew(
5082             final double timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
5083             final double oldVx, final double oldVy, final double oldVz, final BodyKinematics kinematics)
5084             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5085         final var result = new ECIFrame();
5086         navigateECI(timeInterval, oldPosition, oldC, oldVx, oldVy, oldVz, kinematics, result);
5087         return result;
5088     }
5089 
5090     /**
5091      * Runs precision ECI-frame inertial navigation equations.
5092      *
5093      * @param timeInterval time interval between epochs.
5094      * @param oldPosition  previous cartesian position of body frame with respect ECI
5095      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5096      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5097      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
5098      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5099      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
5100      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5101      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
5102      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5103      * @param kinematics   body kinematics containing specific forces and angular rates applied to
5104      *                     the body.
5105      * @return estimated ECI frame containing new body position, velocity and coordinate
5106      * transformation matrix.
5107      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5108      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5109      *                                                       body-to-ECI-frame coordinate transformation matrix are
5110      *                                                       invalid.
5111      */
5112     public static ECIFrame navigateECIAndReturnNew(
5113             final Time timeInterval, final Point3D oldPosition, final CoordinateTransformation oldC,
5114             final double oldVx, final double oldVy, final double oldVz, final BodyKinematics kinematics)
5115             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5116         final var result = new ECIFrame();
5117         navigateECI(timeInterval, oldPosition, oldC, oldVx, oldVy, oldVz, kinematics, result);
5118         return result;
5119     }
5120 
5121     /**
5122      * Runs precision ECI-frame inertial navigation equations.
5123      *
5124      * @param timeInterval time interval between epochs expressed in seconds (s).
5125      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5126      *                     frame, resolved along ECI-frame axes.
5127      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5128      *                     frame, resolved along ECI-frame axes.
5129      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5130      *                     frame, resolved along ECI-frame axes.
5131      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5132      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
5133      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5134      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
5135      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5136      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
5137      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5138      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5139      *                     resolved along body-frame axes, averaged over time interval and
5140      *                     expressed in meters per squared second (m/s^2).
5141      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5142      *                     resolved along body-frame axes, averaged over time interval and
5143      *                     expressed in meters per squared second (m/s^2).
5144      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5145      *                     resolved along body-frame axes, averaged over time interval and
5146      *                     expressed in meters per squared second (m/s^2).
5147      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5148      *                     resolved along body-frame axes, averaged over time interval and
5149      *                     expressed in radians per second (rad/s).
5150      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5151      *                     resolved along body-frame axes, averaged over time interval and
5152      *                     expressed in radians per second (rad/s).
5153      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5154      *                     resolved along body-frame axes, averaged over time interval and
5155      *                     expressed in radians per second (rad/s).
5156      * @return estimated ECI frame containing new body position, velocity and coordinate
5157      * transformation matrix.
5158      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5159      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5160      *                                                       body-to-ECI-frame coordinate transformation matrix are
5161      *                                                       invalid.
5162      */
5163     public static ECIFrame navigateECIAndReturnNew(
5164             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
5165             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
5166             final double fx, final double fy, final double fz,
5167             final double angularRateX, final double angularRateY, final double angularRateZ)
5168             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5169         final var result = new ECIFrame();
5170         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
5171                 angularRateX, angularRateY, angularRateZ, result);
5172         return result;
5173     }
5174 
5175     /**
5176      * Runs precision ECI-frame inertial navigation equations.
5177      *
5178      * @param timeInterval time interval between epochs.
5179      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5180      *                     frame, resolved along ECI-frame axes.
5181      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5182      *                     frame, resolved along ECI-frame axes.
5183      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5184      *                     frame, resolved along ECI-frame axes.
5185      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5186      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
5187      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5188      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
5189      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5190      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
5191      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5192      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5193      *                     resolved along body-frame axes, averaged over time interval and
5194      *                     expressed in meters per squared second (m/s^2).
5195      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5196      *                     resolved along body-frame axes, averaged over time interval and
5197      *                     expressed in meters per squared second (m/s^2).
5198      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5199      *                     resolved along body-frame axes, averaged over time interval and
5200      *                     expressed in meters per squared second (m/s^2).
5201      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5202      *                     resolved along body-frame axes, averaged over time interval and
5203      *                     expressed in radians per second (rad/s).
5204      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5205      *                     resolved along body-frame axes, averaged over time interval and
5206      *                     expressed in radians per second (rad/s).
5207      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5208      *                     resolved along body-frame axes, averaged over time interval and
5209      *                     expressed in radians per second (rad/s).
5210      * @return estimated ECI frame containing new body position, velocity and coordinate
5211      * transformation matrix.
5212      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5213      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5214      *                                                       body-to-ECI-frame coordinate transformation matrix are
5215      *                                                       invalid.
5216      */
5217     public static ECIFrame navigateECIAndReturnNew(
5218             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
5219             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
5220             final double fx, final double fy, final double fz,
5221             final double angularRateX, final double angularRateY, final double angularRateZ)
5222             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5223         final var result = new ECIFrame();
5224         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
5225                 angularRateX, angularRateY, angularRateZ, result);
5226         return result;
5227     }
5228 
5229     /**
5230      * Runs precision ECI-frame inertial navigation equations.
5231      *
5232      * @param timeInterval time interval between epochs expressed in seconds (s).
5233      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5234      *                     frame, resolved along ECI-frame axes.
5235      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5236      *                     frame, resolved along ECI-frame axes.
5237      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5238      *                     frame, resolved along ECI-frame axes.
5239      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5240      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
5241      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5242      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
5243      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5244      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
5245      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5246      * @param kinematics   body kinematics containing specific forces and angular rates applied to
5247      *                     the body.
5248      * @return estimated ECI frame containing new body position, velocity and coordinate
5249      * transformation matrix.
5250      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5251      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5252      *                                                       body-to-ECI-frame coordinate transformation matrix are
5253      *                                                       invalid.
5254      */
5255     public static ECIFrame navigateECIAndReturnNew(
5256             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
5257             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
5258             final BodyKinematics kinematics) throws InertialNavigatorException,
5259             InvalidSourceAndDestinationFrameTypeException {
5260         final var result = new ECIFrame();
5261         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, kinematics, result);
5262         return result;
5263     }
5264 
5265     /**
5266      * Runs precision ECI-frame inertial navigation equations.
5267      *
5268      * @param timeInterval time interval between epochs.
5269      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5270      *                     frame, resolved along ECI-frame axes.
5271      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5272      *                     frame, resolved along ECI-frame axes.
5273      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5274      *                     frame, resolved along ECI-frame axes.
5275      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5276      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
5277      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5278      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
5279      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5280      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
5281      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5282      * @param kinematics   body kinematics containing specific forces and angular rates applied to
5283      *                     the body.
5284      * @return estimated ECI frame containing new body position, velocity and coordinate
5285      * transformation matrix.
5286      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5287      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5288      *                                                       body-to-ECI-frame coordinate transformation matrix are
5289      *                                                       invalid.
5290      */
5291     public static ECIFrame navigateECIAndReturnNew(
5292             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
5293             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
5294             final BodyKinematics kinematics) throws InertialNavigatorException,
5295             InvalidSourceAndDestinationFrameTypeException {
5296         final var result = new ECIFrame();
5297         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, kinematics, result);
5298         return result;
5299     }
5300 
5301     /**
5302      * Runs precision ECI-frame inertial navigation equations.
5303      *
5304      * @param timeInterval time interval between epochs expressed in seconds (s).
5305      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5306      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5307      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5308      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5309      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5310      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5311      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5312      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
5313      *                     resolved along ECI-frame axes.
5314      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
5315      *                     resolved along ECI-frame axes.
5316      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
5317      *                     resolved along ECI-frame axes.
5318      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5319      *                     resolved along body-frame axes, averaged over time interval and
5320      *                     expressed in meters per squared second (m/s^2).
5321      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5322      *                     resolved along body-frame axes, averaged over time interval and
5323      *                     expressed in meters per squared second (m/s^2).
5324      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5325      *                     resolved along body-frame axes, averaged over time interval and
5326      *                     expressed in meters per squared second (m/s^2).
5327      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5328      *                     resolved along body-frame axes, averaged over time interval and
5329      *                     expressed in radians per second (rad/s).
5330      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5331      *                     resolved along body-frame axes, averaged over time interval and
5332      *                     expressed in radians per second (rad/s).
5333      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5334      *                     resolved along body-frame axes, averaged over time interval and
5335      *                     expressed in radians per second (rad/s).
5336      * @return estimated ECI frame containing new body position, velocity and coordinate
5337      * transformation matrix.
5338      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5339      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5340      *                                                       body-to-ECI-frame coordinate transformation matrix are
5341      *                                                       invalid.
5342      */
5343     public static ECIFrame navigateECIAndReturnNew(
5344             final double timeInterval, final double oldX, final double oldY, final double oldZ,
5345             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
5346             final double fx, final double fy, final double fz,
5347             final double angularRateX, final double angularRateY, final double angularRateZ)
5348             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5349         final var result = new ECIFrame();
5350         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, fx, fy, fz,
5351                 angularRateX, angularRateY, angularRateZ, result);
5352         return result;
5353     }
5354 
5355     /**
5356      * Runs precision ECI-frame inertial navigation equations.
5357      *
5358      * @param timeInterval time interval between epochs.
5359      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5360      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5361      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5362      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5363      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5364      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5365      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5366      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
5367      *                     resolved along ECI-frame axes.
5368      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
5369      *                     resolved along ECI-frame axes.
5370      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
5371      *                     resolved along ECI-frame axes.
5372      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5373      *                     resolved along body-frame axes, averaged over time interval and
5374      *                     expressed in meters per squared second (m/s^2).
5375      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5376      *                     resolved along body-frame axes, averaged over time interval and
5377      *                     expressed in meters per squared second (m/s^2).
5378      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5379      *                     resolved along body-frame axes, averaged over time interval and
5380      *                     expressed in meters per squared second (m/s^2).
5381      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5382      *                     resolved along body-frame axes, averaged over time interval and
5383      *                     expressed in radians per second (rad/s).
5384      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5385      *                     resolved along body-frame axes, averaged over time interval and
5386      *                     expressed in radians per second (rad/s).
5387      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5388      *                     resolved along body-frame axes, averaged over time interval and
5389      *                     expressed in radians per second (rad/s).
5390      * @return estimated ECI frame containing new body position, velocity and coordinate
5391      * transformation matrix.
5392      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5393      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5394      *                                                       body-to-ECI-frame coordinate transformation matrix are
5395      *                                                       invalid.
5396      */
5397     public static ECIFrame navigateECIAndReturnNew(
5398             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
5399             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
5400             final double fx, final double fy, final double fz,
5401             final double angularRateX, final double angularRateY, final double angularRateZ)
5402             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5403         final var result = new ECIFrame();
5404         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, fx, fy, fz,
5405                 angularRateX, angularRateY, angularRateZ, result);
5406         return result;
5407     }
5408 
5409     /**
5410      * Runs precision ECI-frame inertial navigation equations.
5411      *
5412      * @param timeInterval time interval between epochs expressed in seconds (s).
5413      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5414      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5415      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5416      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5417      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5418      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5419      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5420      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
5421      *                     resolved along ECI-frame axes.
5422      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
5423      *                     resolved along ECI-frame axes.
5424      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
5425      *                     resolved along ECI-frame axes.
5426      * @param kinematics   body kinematics containing specific forces and angular rates applied to
5427      *                     the body.
5428      * @return estimated ECI frame containing new body position, velocity and coordinate
5429      * transformation matrix.
5430      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5431      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5432      *                                                       body-to-ECI-frame coordinate transformation matrix are
5433      *                                                       invalid.
5434      */
5435     public static ECIFrame navigateECIAndReturnNew(
5436             final double timeInterval, final double oldX, final double oldY, final double oldZ,
5437             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
5438             final BodyKinematics kinematics) throws InertialNavigatorException,
5439             InvalidSourceAndDestinationFrameTypeException {
5440         final var result = new ECIFrame();
5441         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, kinematics, result);
5442         return result;
5443     }
5444 
5445     /**
5446      * Runs precision ECI-frame inertial navigation equations.
5447      *
5448      * @param timeInterval time interval between epochs expressed in seconds (s).
5449      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5450      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5451      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5452      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5453      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5454      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5455      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5456      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
5457      *                     resolved along ECI-frame axes.
5458      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
5459      *                     resolved along ECI-frame axes.
5460      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
5461      *                     resolved along ECI-frame axes.
5462      * @param kinematics   body kinematics containing specific forces and angular rates applied to
5463      *                     the body.
5464      * @return estimated ECI frame containing new body position, velocity and coordinate
5465      * transformation matrix.
5466      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5467      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5468      *                                                       body-to-ECI-frame coordinate transformation matrix are
5469      *                                                       invalid.
5470      */
5471     public static ECIFrame navigateECIAndReturnNew(
5472             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
5473             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
5474             final BodyKinematics kinematics) throws InertialNavigatorException,
5475             InvalidSourceAndDestinationFrameTypeException {
5476         final var result = new ECIFrame();
5477         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, kinematics, result);
5478         return result;
5479     }
5480 
5481     /**
5482      * Runs precision ECI-frame inertial navigation equations.
5483      *
5484      * @param timeInterval time interval between epochs expressed in seconds (s).
5485      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5486      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5487      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5488      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5489      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5490      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5491      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5492      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
5493      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5494      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
5495      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5496      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
5497      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5498      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5499      *                     resolved along body-frame axes, averaged over time interval.
5500      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5501      *                     resolved along body-frame axes, averaged over time interval.
5502      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5503      *                     resolved along body-frame axes, averaged over time interval.
5504      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5505      *                     resolved along body-frame axes, averaged over time interval and
5506      *                     expressed in radians per second (rad/s).
5507      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5508      *                     resolved along body-frame axes, averaged over time interval and
5509      *                     expressed in radians per second (rad/s).
5510      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5511      *                     resolved along body-frame axes, averaged over time interval and
5512      *                     expressed in radians per second (rad/s).
5513      * @return estimated ECI frame containing new body position, velocity and coordinate
5514      * transformation matrix.
5515      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5516      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5517      *                                                       body-to-ECI-frame coordinate transformation matrix are
5518      *                                                       invalid.
5519      */
5520     public static ECIFrame navigateECIAndReturnNew(
5521             final double timeInterval, final double oldX, final double oldY, final double oldZ,
5522             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
5523             final Acceleration fx, final Acceleration fy, final Acceleration fz,
5524             final double angularRateX, final double angularRateY, final double angularRateZ)
5525             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5526         final var result = new ECIFrame();
5527         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
5528                 angularRateX, angularRateY, angularRateZ, result);
5529         return result;
5530     }
5531 
5532     /**
5533      * Runs precision ECI-frame inertial navigation equations.
5534      *
5535      * @param timeInterval time interval between epochs.
5536      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5537      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5538      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5539      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5540      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5541      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5542      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5543      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
5544      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5545      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
5546      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5547      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
5548      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5549      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5550      *                     resolved along body-frame axes, averaged over time interval.
5551      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5552      *                     resolved along body-frame axes, averaged over time interval.
5553      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5554      *                     resolved along body-frame axes, averaged over time interval.
5555      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5556      *                     resolved along body-frame axes, averaged over time interval and
5557      *                     expressed in radians per second (rad/s).
5558      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5559      *                     resolved along body-frame axes, averaged over time interval and
5560      *                     expressed in radians per second (rad/s).
5561      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5562      *                     resolved along body-frame axes, averaged over time interval and
5563      *                     expressed in radians per second (rad/s).
5564      * @return estimated ECI frame containing new body position, velocity and coordinate
5565      * transformation matrix.
5566      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5567      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5568      *                                                       body-to-ECI-frame coordinate transformation matrix are
5569      *                                                       invalid.
5570      */
5571     public static ECIFrame navigateECIAndReturnNew(
5572             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
5573             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
5574             final Acceleration fx, final Acceleration fy, final Acceleration fz,
5575             final double angularRateX, final double angularRateY, final double angularRateZ)
5576             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5577         final var result = new ECIFrame();
5578         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
5579                 angularRateX, angularRateY, angularRateZ, result);
5580         return result;
5581     }
5582 
5583     /**
5584      * Runs precision ECI-frame inertial navigation equations.
5585      *
5586      * @param timeInterval time interval between epochs expressed in seconds (s).
5587      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5588      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5589      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5590      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5591      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5592      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5593      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5594      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
5595      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5596      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
5597      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5598      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
5599      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5600      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5601      *                     resolved along body-frame axes, averaged over time interval and
5602      *                     expressed in meters per squared second (m/s^2).
5603      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5604      *                     resolved along body-frame axes, averaged over time interval and
5605      *                     expressed in meters per squared second (m/s^2).
5606      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5607      *                     resolved along body-frame axes, averaged over time interval and
5608      *                     expressed in meters per squared second (m/s^2).
5609      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5610      *                     resolved along body-frame axes, averaged over time interval.
5611      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5612      *                     resolved along body-frame axes, averaged over time interval.
5613      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5614      *                     resolved along body-frame axes, averaged over time interval.
5615      * @return estimated ECI frame containing new body position, velocity and coordinate
5616      * transformation matrix.
5617      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5618      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5619      *                                                       body-to-ECI-frame coordinate transformation matrix are
5620      *                                                       invalid.
5621      */
5622     public static ECIFrame navigateECIAndReturnNew(
5623             final double timeInterval, final double oldX, final double oldY, final double oldZ,
5624             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
5625             final double fx, final double fy, final double fz,
5626             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
5627             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5628         final var result = new ECIFrame();
5629         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
5630                 angularRateX, angularRateY, angularRateZ, result);
5631         return result;
5632     }
5633 
5634     /**
5635      * Runs precision ECI-frame inertial navigation equations.
5636      *
5637      * @param timeInterval time interval between epochs.
5638      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5639      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5640      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5641      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5642      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5643      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5644      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5645      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
5646      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5647      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
5648      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5649      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
5650      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5651      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5652      *                     resolved along body-frame axes, averaged over time interval and
5653      *                     expressed in meters per squared second (m/s^2).
5654      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5655      *                     resolved along body-frame axes, averaged over time interval and
5656      *                     expressed in meters per squared second (m/s^2).
5657      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5658      *                     resolved along body-frame axes, averaged over time interval and
5659      *                     expressed in meters per squared second (m/s^2).
5660      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5661      *                     resolved along body-frame axes, averaged over time interval.
5662      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5663      *                     resolved along body-frame axes, averaged over time interval.
5664      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5665      *                     resolved along body-frame axes, averaged over time interval.
5666      * @return estimated ECI frame containing new body position, velocity and coordinate
5667      * transformation matrix.
5668      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5669      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5670      *                                                       body-to-ECI-frame coordinate transformation matrix are
5671      *                                                       invalid.
5672      */
5673     public static ECIFrame navigateECIAndReturnNew(
5674             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
5675             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
5676             final double fx, final double fy, final double fz,
5677             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
5678             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5679         final var result = new ECIFrame();
5680         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
5681                 angularRateX, angularRateY, angularRateZ, result);
5682         return result;
5683     }
5684 
5685     /**
5686      * Runs precision ECI-frame inertial navigation equations.
5687      *
5688      * @param timeInterval time interval between epochs expressed in seconds (s).
5689      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5690      *                     frame, resolved along ECI-frame axes.
5691      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5692      *                     frame, resolved along ECI-frame axes.
5693      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5694      *                     frame, resolved along ECI-frame axes.
5695      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5696      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
5697      *                     resolved along ECI-frame axes.
5698      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
5699      *                     resolved along ECI-frame axes.
5700      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
5701      *                     resolved along ECI-frame axes.
5702      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5703      *                     resolved along body-frame axes, averaged over time interval and
5704      *                     expressed in meters per squared second (m/s^2).
5705      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5706      *                     resolved along body-frame axes, averaged over time interval and
5707      *                     expressed in meters per squared second (m/s^2).
5708      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5709      *                     resolved along body-frame axes, averaged over time interval and
5710      *                     expressed in meters per squared second (m/s^2).
5711      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5712      *                     resolved along body-frame axes, averaged over time interval and
5713      *                     expressed in radians per second (rad/s).
5714      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5715      *                     resolved along body-frame axes, averaged over time interval and
5716      *                     expressed in radians per second (rad/s).
5717      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5718      *                     resolved along body-frame axes, averaged over time interval and
5719      *                     expressed in radians per second (rad/s).
5720      * @return estimated ECI frame containing new body position, velocity and coordinate
5721      * transformation matrix.
5722      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5723      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5724      *                                                       body-to-ECI-frame coordinate transformation matrix are
5725      *                                                       invalid.
5726      */
5727     public static ECIFrame navigateECIAndReturnNew(
5728             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
5729             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
5730             final double fx, final double fy, final double fz,
5731             final double angularRateX, final double angularRateY, final double angularRateZ)
5732             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5733         final var result = new ECIFrame();
5734         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, fx, fy, fz,
5735                 angularRateX, angularRateY, angularRateZ, result);
5736         return result;
5737     }
5738 
5739     /**
5740      * Runs precision ECI-frame inertial navigation equations.
5741      *
5742      * @param timeInterval time interval between epochs.
5743      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5744      *                     frame, resolved along ECI-frame axes.
5745      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5746      *                     frame, resolved along ECI-frame axes.
5747      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5748      *                     frame, resolved along ECI-frame axes.
5749      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5750      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
5751      *                     resolved along ECI-frame axes.
5752      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
5753      *                     resolved along ECI-frame axes.
5754      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
5755      *                     resolved along ECI-frame axes.
5756      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5757      *                     resolved along body-frame axes, averaged over time interval and
5758      *                     expressed in meters per squared second (m/s^2).
5759      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5760      *                     resolved along body-frame axes, averaged over time interval and
5761      *                     expressed in meters per squared second (m/s^2).
5762      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5763      *                     resolved along body-frame axes, averaged over time interval and
5764      *                     expressed in meters per squared second (m/s^2).
5765      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5766      *                     resolved along body-frame axes, averaged over time interval and
5767      *                     expressed in radians per second (rad/s).
5768      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5769      *                     resolved along body-frame axes, averaged over time interval and
5770      *                     expressed in radians per second (rad/s).
5771      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5772      *                     resolved along body-frame axes, averaged over time interval and
5773      *                     expressed in radians per second (rad/s).
5774      * @return estimated ECI frame containing new body position, velocity and coordinate
5775      * transformation matrix.
5776      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5777      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5778      *                                                       body-to-ECI-frame coordinate transformation matrix are
5779      *                                                       invalid.
5780      */
5781     public static ECIFrame navigateECIAndReturnNew(
5782             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
5783             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
5784             final double fx, final double fy, final double fz,
5785             final double angularRateX, final double angularRateY, final double angularRateZ)
5786             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5787         final var result = new ECIFrame();
5788         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, fx, fy, fz,
5789                 angularRateX, angularRateY, angularRateZ, result);
5790         return result;
5791     }
5792 
5793     /**
5794      * Runs precision ECI-frame inertial navigation equations.
5795      *
5796      * @param timeInterval time interval between epochs expressed in seconds (s).
5797      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5798      *                     frame, resolved along ECI-frame axes.
5799      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5800      *                     frame, resolved along ECI-frame axes.
5801      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5802      *                     frame, resolved along ECI-frame axes.
5803      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5804      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
5805      *                     resolved along ECI-frame axes.
5806      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
5807      *                     resolved along ECI-frame axes.
5808      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
5809      *                     resolved along ECI-frame axes.
5810      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5811      *                     resolved along body-frame axes, averaged over time interval.
5812      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5813      *                     resolved along body-frame axes, averaged over time interval.
5814      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5815      *                     resolved along body-frame axes, averaged over time interval.
5816      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5817      *                     resolved along body-frame axes, averaged over time interval.
5818      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5819      *                     resolved along body-frame axes, averaged over time interval.
5820      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5821      *                     resolved along body-frame axes, averaged over time interval.
5822      * @return estimated ECI frame containing new body position, velocity and coordinate
5823      * transformation matrix.
5824      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5825      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5826      *                                                       body-to-ECI-frame coordinate transformation matrix are
5827      *                                                       invalid.
5828      */
5829     public static ECIFrame navigateECIAndReturnNew(
5830             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
5831             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
5832             final Acceleration fx, final Acceleration fy, final Acceleration fz,
5833             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
5834             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5835         final var result = new ECIFrame();
5836         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, fx, fy, fz,
5837                 angularRateX, angularRateY, angularRateZ, result);
5838         return result;
5839     }
5840 
5841     /**
5842      * Runs precision ECI-frame inertial navigation equations.
5843      *
5844      * @param timeInterval time interval between epochs.
5845      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5846      *                     frame, resolved along ECI-frame axes.
5847      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5848      *                     frame, resolved along ECI-frame axes.
5849      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5850      *                     frame, resolved along ECI-frame axes.
5851      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5852      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
5853      *                     resolved along ECI-frame axes.
5854      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
5855      *                     resolved along ECI-frame axes.
5856      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
5857      *                     resolved along ECI-frame axes.
5858      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5859      *                     resolved along body-frame axes, averaged over time interval.
5860      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5861      *                     resolved along body-frame axes, averaged over time interval.
5862      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5863      *                     resolved along body-frame axes, averaged over time interval.
5864      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5865      *                     resolved along body-frame axes, averaged over time interval.
5866      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5867      *                     resolved along body-frame axes, averaged over time interval.
5868      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5869      *                     resolved along body-frame axes, averaged over time interval.
5870      * @return estimated ECI frame containing new body position, velocity and coordinate
5871      * transformation matrix.
5872      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5873      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5874      *                                                       body-to-ECI-frame coordinate transformation matrix are
5875      *                                                       invalid.
5876      */
5877     public static ECIFrame navigateECIAndReturnNew(
5878             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
5879             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
5880             final Acceleration fx, final Acceleration fy, final Acceleration fz,
5881             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
5882             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5883         final var result = new ECIFrame();
5884         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, fx, fy, fz,
5885                 angularRateX, angularRateY, angularRateZ, result);
5886         return result;
5887     }
5888 
5889     /**
5890      * Runs precision ECI-frame inertial navigation equations.
5891      *
5892      * @param timeInterval time interval between epochs expressed in seconds (s).
5893      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5894      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5895      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5896      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5897      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5898      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5899      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5900      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
5901      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5902      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
5903      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5904      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
5905      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5906      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5907      *                     resolved along body-frame axes, averaged over time interval.
5908      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5909      *                     resolved along body-frame axes, averaged over time interval.
5910      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5911      *                     resolved along body-frame axes, averaged over time interval.
5912      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5913      *                     resolved along body-frame axes, averaged over time interval.
5914      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5915      *                     resolved along body-frame axes, averaged over time interval.
5916      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5917      *                     resolved along body-frame axes, averaged over time interval.
5918      * @return estimated ECI frame containing new body position, velocity and coordinate
5919      * transformation matrix.
5920      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5921      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5922      *                                                       body-to-ECI-frame coordinate transformation matrix are
5923      *                                                       invalid.
5924      */
5925     public static ECIFrame navigateECIAndReturnNew(
5926             final double timeInterval, final double oldX, final double oldY, final double oldZ,
5927             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
5928             final Acceleration fx, final Acceleration fy, final Acceleration fz,
5929             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
5930             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5931         final var result = new ECIFrame();
5932         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
5933                 angularRateX, angularRateY, angularRateZ, result);
5934         return result;
5935     }
5936 
5937     /**
5938      * Runs precision ECI-frame inertial navigation equations.
5939      *
5940      * @param timeInterval time interval between epochs.
5941      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5942      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5943      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5944      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5945      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5946      *                     frame, resolved along ECI-frame axes and expressed in meters (m).
5947      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5948      * @param oldVx        previous velocity x-coordinate of body frame with respect ECI frame,
5949      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5950      * @param oldVy        previous velocity y-coordinate of body frame with respect ECI frame,
5951      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5952      * @param oldVz        previous velocity z-coordinate of body frame with respect ECI frame,
5953      *                     resolved along ECI-frame axes and expressed in meters per second (m/s).
5954      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
5955      *                     resolved along body-frame axes, averaged over time interval.
5956      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
5957      *                     resolved along body-frame axes, averaged over time interval.
5958      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
5959      *                     resolved along body-frame axes, averaged over time interval.
5960      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
5961      *                     resolved along body-frame axes, averaged over time interval.
5962      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
5963      *                     resolved along body-frame axes, averaged over time interval.
5964      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
5965      *                     resolved along body-frame axes, averaged over time interval.
5966      * @return estimated ECI frame containing new body position, velocity and coordinate
5967      * transformation matrix.
5968      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
5969      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
5970      *                                                       body-to-ECI-frame coordinate transformation matrix are
5971      *                                                       invalid.
5972      */
5973     public static ECIFrame navigateECIAndReturnNew(
5974             final Time timeInterval, final double oldX, final double oldY, final double oldZ,
5975             final CoordinateTransformation oldC, final double oldVx, final double oldVy, final double oldVz,
5976             final Acceleration fx, final Acceleration fy, final Acceleration fz,
5977             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
5978             throws InertialNavigatorException, InvalidSourceAndDestinationFrameTypeException {
5979         final var result = new ECIFrame();
5980         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldVx, oldVy, oldVz, fx, fy, fz,
5981                 angularRateX, angularRateY, angularRateZ, result);
5982         return result;
5983     }
5984 
5985     /**
5986      * Runs precision ECI-frame inertial navigation equations.
5987      *
5988      * @param timeInterval time interval between epochs expressed in seconds (s).
5989      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
5990      *                     frame, resolved along ECI-frame axes.
5991      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
5992      *                     frame, resolved along ECI-frame axes.
5993      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
5994      *                     frame, resolved along ECI-frame axes.
5995      * @param oldC         previous body-to-ECI-frame coordinate transformation.
5996      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
5997      *                     resolved along ECI-frame axes.
5998      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
5999      *                     resolved along ECI-frame axes.
6000      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
6001      *                     resolved along ECI-frame axes.
6002      * @param kinematics   body kinematics containing specific forces and angular rates applied to
6003      *                     the body.
6004      * @return estimated ECI frame containing new body position, velocity and coordinate
6005      * transformation matrix.
6006      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
6007      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
6008      *                                                       body-to-ECI-frame coordinate transformation matrix are
6009      *                                                       invalid.
6010      */
6011     public static ECIFrame navigateECIAndReturnNew(
6012             final double timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
6013             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
6014             final BodyKinematics kinematics) throws InertialNavigatorException,
6015             InvalidSourceAndDestinationFrameTypeException {
6016         final var result = new ECIFrame();
6017         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, kinematics, result);
6018         return result;
6019     }
6020 
6021     /**
6022      * Runs precision ECI-frame inertial navigation equations.
6023      *
6024      * @param timeInterval time interval between epochs.
6025      * @param oldX         previous cartesian x-coordinate position of body frame with respect ECI
6026      *                     frame, resolved along ECI-frame axes.
6027      * @param oldY         previous cartesian y-coordinate position of body frame with respect ECI
6028      *                     frame, resolved along ECI-frame axes.
6029      * @param oldZ         previous cartesian z-coordinate position of body frame with respect ECI
6030      *                     frame, resolved along ECI-frame axes.
6031      * @param oldC         previous body-to-ECI-frame coordinate transformation.
6032      * @param oldSpeedX    previous velocity x-coordinate of body frame with respect ECI frame,
6033      *                     resolved along ECI-frame axes.
6034      * @param oldSpeedY    previous velocity y-coordinate of body frame with respect ECI frame,
6035      *                     resolved along ECI-frame axes.
6036      * @param oldSpeedZ    previous velocity z-coordinate of body frame with respect ECI frame,
6037      *                     resolved along ECI-frame axes.
6038      * @param kinematics   body kinematics containing specific forces and angular rates applied to
6039      *                     the body.
6040      * @return estimated ECI frame containing new body position, velocity and coordinate
6041      * transformation matrix.
6042      * @throws InertialNavigatorException                    if navigation fails due to numerical instabilities.
6043      * @throws InvalidSourceAndDestinationFrameTypeException if source or destination frame types of previous
6044      *                                                       body-to-ECI-frame coordinate transformation matrix are
6045      *                                                       invalid.
6046      */
6047     public static ECIFrame navigateECIAndReturnNew(
6048             final Time timeInterval, final Distance oldX, final Distance oldY, final Distance oldZ,
6049             final CoordinateTransformation oldC, final Speed oldSpeedX, final Speed oldSpeedY, final Speed oldSpeedZ,
6050             final BodyKinematics kinematics) throws InertialNavigatorException,
6051             InvalidSourceAndDestinationFrameTypeException {
6052         final var result = new ECIFrame();
6053         navigateECI(timeInterval, oldX, oldY, oldZ, oldC, oldSpeedX, oldSpeedY, oldSpeedZ, kinematics, result);
6054         return result;
6055     }
6056 
6057     /**
6058      * Runs precision ECI-frame inertial navigation equations.
6059      *
6060      * @param timeInterval time interval between epochs expressed in seconds (s).
6061      * @param oldFrame     previous ECI frame containing body position, velocity and
6062      *                     coordinate transformation matrix.
6063      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
6064      *                     resolved along body-frame axes, averaged over time interval and
6065      *                     expressed in meters per squared second (m/s^2).
6066      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
6067      *                     resolved along body-frame axes, averaged over time interval and
6068      *                     expressed in meters per squared second (m/s^2).
6069      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
6070      *                     resolved along body-frame axes, averaged over time interval and
6071      *                     expressed in meters per squared second (m/s^2).
6072      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
6073      *                     resolved along body-frame axes, averaged over time interval and
6074      *                     expressed in radians per second (rad/s).
6075      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
6076      *                     resolved along body-frame axes, averaged over time interval and
6077      *                     expressed in radians per second (rad/s).
6078      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
6079      *                     resolved along body-frame axes, averaged over time interval and
6080      *                     expressed in radians per second (rad/s).
6081      * @return estimated ECI frame containing new body position, velocity and coordinate
6082      * transformation matrix.
6083      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
6084      */
6085     public static ECIFrame navigateECIAndReturnNew(
6086             final double timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
6087             final double angularRateX, final double angularRateY, final double angularRateZ)
6088             throws InertialNavigatorException {
6089         final var result = new ECIFrame();
6090         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
6091         return result;
6092     }
6093 
6094     /**
6095      * Runs precision ECI-frame inertial navigation equations.
6096      *
6097      * @param timeInterval time interval between epochs.
6098      * @param oldFrame     previous ECI frame containing body position, velocity and
6099      *                     coordinate transformation matrix.
6100      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
6101      *                     resolved along body-frame axes, averaged over time interval and
6102      *                     expressed in meters per squared second (m/s^2).
6103      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
6104      *                     resolved along body-frame axes, averaged over time interval and
6105      *                     expressed in meters per squared second (m/s^2).
6106      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
6107      *                     resolved along body-frame axes, averaged over time interval and
6108      *                     expressed in meters per squared second (m/s^2).
6109      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
6110      *                     resolved along body-frame axes, averaged over time interval and
6111      *                     expressed in radians per second (rad/s).
6112      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
6113      *                     resolved along body-frame axes, averaged over time interval and
6114      *                     expressed in radians per second (rad/s).
6115      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
6116      *                     resolved along body-frame axes, averaged over time interval and
6117      *                     expressed in radians per second (rad/s).
6118      * @return estimated ECI frame containing new body position, velocity and coordinate
6119      * transformation matrix.
6120      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
6121      */
6122     public static ECIFrame navigateECIAndReturnNew(
6123             final Time timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
6124             final double angularRateX, final double angularRateY, final double angularRateZ)
6125             throws InertialNavigatorException {
6126         final var result = new ECIFrame();
6127         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
6128         return result;
6129     }
6130 
6131     /**
6132      * Runs precision ECI-frame inertial navigation equations.
6133      *
6134      * @param timeInterval time interval between epochs expressed in seconds (s).
6135      * @param oldFrame     previous ECI frame containing body position, velocity and
6136      *                     coordinate transformation matrix.
6137      * @param kinematics   body kinematics containing specific forces and angular rates applied to
6138      *                     the body.
6139      * @return estimated ECI frame containing new body position, velocity and coordinate
6140      * transformation matrix.
6141      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
6142      */
6143     public static ECIFrame navigateECIAndReturnNew(
6144             final double timeInterval, final ECIFrame oldFrame, final BodyKinematics kinematics)
6145             throws InertialNavigatorException {
6146         final var result = new ECIFrame();
6147         navigateECI(timeInterval, oldFrame, kinematics, result);
6148         return result;
6149     }
6150 
6151     /**
6152      * Runs precision ECI-frame inertial navigation equations.
6153      *
6154      * @param timeInterval time interval between epochs.
6155      * @param oldFrame     previous ECI frame containing body position, velocity and
6156      *                     coordinate transformation matrix.
6157      * @param kinematics   body kinematics containing specific forces and angular rates applied to
6158      *                     the body.
6159      * @return estimated ECI frame containing new body position, velocity and coordinate
6160      * transformation matrix.
6161      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
6162      */
6163     public static ECIFrame navigateECIAndReturnNew(
6164             final Time timeInterval, final ECIFrame oldFrame, final BodyKinematics kinematics)
6165             throws InertialNavigatorException {
6166         final var result = new ECIFrame();
6167         navigateECI(timeInterval, oldFrame, kinematics, result);
6168         return result;
6169     }
6170 
6171     /**
6172      * Runs precision ECI-frame inertial navigation equations.
6173      *
6174      * @param timeInterval time interval between epochs expressed in seconds (s).
6175      * @param oldFrame     previous ECI frame containing body position, velocity and
6176      *                     coordinate transformation matrix.
6177      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
6178      *                     resolved along body-frame axes, averaged over time interval.
6179      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
6180      *                     resolved along body-frame axes, averaged over time interval.
6181      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
6182      *                     resolved along body-frame axes, averaged over time interval.
6183      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
6184      *                     resolved along body-frame axes, averaged over time interval and
6185      *                     expressed in radians per second (rad/s).
6186      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
6187      *                     resolved along body-frame axes, averaged over time interval and
6188      *                     expressed in radians per second (rad/s).
6189      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
6190      *                     resolved along body-frame axes, averaged over time interval and
6191      *                     expressed in radians per second (rad/s).
6192      * @return estimated ECI frame containing new body position, velocity and coordinate
6193      * transformation matrix.
6194      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
6195      */
6196     public static ECIFrame navigateECIAndReturnNew(
6197             final double timeInterval, final ECIFrame oldFrame,
6198             final Acceleration fx, final Acceleration fy, final Acceleration fz,
6199             final double angularRateX, final double angularRateY, final double angularRateZ)
6200             throws InertialNavigatorException {
6201         final var result = new ECIFrame();
6202         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
6203         return result;
6204     }
6205 
6206     /**
6207      * Runs precision ECI-frame inertial navigation equations.
6208      *
6209      * @param timeInterval time interval between epochs.
6210      * @param oldFrame     previous ECI frame containing body position, velocity and
6211      *                     coordinate transformation matrix.
6212      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
6213      *                     resolved along body-frame axes, averaged over time interval.
6214      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
6215      *                     resolved along body-frame axes, averaged over time interval.
6216      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
6217      *                     resolved along body-frame axes, averaged over time interval.
6218      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
6219      *                     resolved along body-frame axes, averaged over time interval and
6220      *                     expressed in radians per second (rad/s).
6221      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
6222      *                     resolved along body-frame axes, averaged over time interval and
6223      *                     expressed in radians per second (rad/s).
6224      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
6225      *                     resolved along body-frame axes, averaged over time interval and
6226      *                     expressed in radians per second (rad/s).
6227      * @return estimated ECI frame containing new body position, velocity and coordinate
6228      * transformation matrix.
6229      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
6230      */
6231     public static ECIFrame navigateECIAndReturnNew(
6232             final Time timeInterval, final ECIFrame oldFrame,
6233             final Acceleration fx, final Acceleration fy, final Acceleration fz,
6234             final double angularRateX, final double angularRateY, final double angularRateZ)
6235             throws InertialNavigatorException {
6236         final var result = new ECIFrame();
6237         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
6238         return result;
6239     }
6240 
6241     /**
6242      * Runs precision ECI-frame inertial navigation equations.
6243      *
6244      * @param timeInterval time interval between epochs expressed in seconds (s).
6245      * @param oldFrame     previous ECI frame containing body position, velocity and
6246      *                     coordinate transformation matrix.
6247      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
6248      *                     resolved along body-frame axes, averaged over time interval and
6249      *                     expressed in meters per squared second (m/s^2).
6250      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
6251      *                     resolved along body-frame axes, averaged over time interval and
6252      *                     expressed in meters per squared second (m/s^2).
6253      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
6254      *                     resolved along body-frame axes, averaged over time interval and
6255      *                     expressed in meters per squared second (m/s^2).
6256      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
6257      *                     resolved along body-frame axes, averaged over time interval.
6258      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
6259      *                     resolved along body-frame axes, averaged over time interval.
6260      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
6261      *                     resolved along body-frame axes, averaged over time interval.
6262      * @return estimated ECI frame containing new body position, velocity and coordinate
6263      * transformation matrix.
6264      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
6265      */
6266     public static ECIFrame navigateECIAndReturnNew(
6267             final double timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
6268             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
6269             throws InertialNavigatorException {
6270         final var result = new ECIFrame();
6271         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
6272         return result;
6273     }
6274 
6275     /**
6276      * Runs precision ECI-frame inertial navigation equations.
6277      *
6278      * @param timeInterval time interval between epochs.
6279      * @param oldFrame     previous ECI frame containing body position, velocity and
6280      *                     coordinate transformation matrix.
6281      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
6282      *                     resolved along body-frame axes, averaged over time interval and
6283      *                     expressed in meters per squared second (m/s^2).
6284      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
6285      *                     resolved along body-frame axes, averaged over time interval and
6286      *                     expressed in meters per squared second (m/s^2).
6287      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
6288      *                     resolved along body-frame axes, averaged over time interval and
6289      *                     expressed in meters per squared second (m/s^2).
6290      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
6291      *                     resolved along body-frame axes, averaged over time interval.
6292      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
6293      *                     resolved along body-frame axes, averaged over time interval.
6294      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
6295      *                     resolved along body-frame axes, averaged over time interval.
6296      * @return estimated ECI frame containing new body position, velocity and coordinate
6297      * transformation matrix.
6298      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
6299      */
6300     public static ECIFrame navigateECIAndReturnNew(
6301             final Time timeInterval, final ECIFrame oldFrame, final double fx, final double fy, final double fz,
6302             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
6303             throws InertialNavigatorException {
6304         final var result = new ECIFrame();
6305         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
6306         return result;
6307     }
6308 
6309     /**
6310      * Runs precision ECI-frame inertial navigation equations.
6311      *
6312      * @param timeInterval time interval between epochs expressed in seconds (s).
6313      * @param oldFrame     previous ECI frame containing body position, velocity and
6314      *                     coordinate transformation matrix.
6315      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
6316      *                     resolved along body-frame axes, averaged over time interval.
6317      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
6318      *                     resolved along body-frame axes, averaged over time interval.
6319      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
6320      *                     resolved along body-frame axes, averaged over time interval.
6321      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
6322      *                     resolved along body-frame axes, averaged over time interval.
6323      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
6324      *                     resolved along body-frame axes, averaged over time interval.
6325      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
6326      *                     resolved along body-frame axes, averaged over time interval.
6327      * @return estimated ECI frame containing new body position, velocity and coordinate
6328      * transformation matrix.
6329      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
6330      */
6331     public static ECIFrame navigateECIAndReturnNew(
6332             final double timeInterval, final ECIFrame oldFrame,
6333             final Acceleration fx, final Acceleration fy, final Acceleration fz,
6334             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
6335             throws InertialNavigatorException {
6336         final var result = new ECIFrame();
6337         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
6338         return result;
6339     }
6340 
6341     /**
6342      * Runs precision ECI-frame inertial navigation equations.
6343      *
6344      * @param timeInterval time interval between epochs.
6345      * @param oldFrame     previous ECI frame containing body position, velocity and
6346      *                     coordinate transformation matrix.
6347      * @param fx           specific force x-coordinate of body frame with respect ECI frame,
6348      *                     resolved along body-frame axes, averaged over time interval.
6349      * @param fy           specific force y-coordinate of body frame with respect ECI frame,
6350      *                     resolved along body-frame axes, averaged over time interval.
6351      * @param fz           specific force z-coordinate of body frame with respect ECI frame,
6352      *                     resolved along body-frame axes, averaged over time interval.
6353      * @param angularRateX angular rate x-coordinate of body frame with respect ECI frame,
6354      *                     resolved along body-frame axes, averaged over time interval.
6355      * @param angularRateY angular rate y-coordinate of body frame with respect ECI frame,
6356      *                     resolved along body-frame axes, averaged over time interval.
6357      * @param angularRateZ angular rate z-coordinate of body frame with respect ECI frame,
6358      *                     resolved along body-frame axes, averaged over time interval.
6359      * @return estimated ECI frame containing new body position, velocity and coordinate
6360      * transformation matrix.
6361      * @throws InertialNavigatorException if navigation fails due to numerical instabilities.
6362      */
6363     public static ECIFrame navigateECIAndReturnNew(
6364             final Time timeInterval, final ECIFrame oldFrame,
6365             final Acceleration fx, final Acceleration fy, final Acceleration fz,
6366             final AngularSpeed angularRateX, final AngularSpeed angularRateY, final AngularSpeed angularRateZ)
6367             throws InertialNavigatorException {
6368         final var result = new ECIFrame();
6369         navigateECI(timeInterval, oldFrame, fx, fy, fz, angularRateX, angularRateY, angularRateZ, result);
6370         return result;
6371     }
6372 
6373     /**
6374      * Checks whether provided coordinate transformation matrix is valid or not.
6375      * Only body to ECI transformation matrices are considered to be valid.
6376      *
6377      * @param c coordinate transformation matrix to be checked.
6378      * @return true if provided value is valid, false otherwise.
6379      */
6380     public static boolean isValidBodyToEciCoordinateTransformationMatrix(final CoordinateTransformation c) {
6381         return ECIFrame.isValidCoordinateTransformation(c);
6382     }
6383 
6384     /**
6385      * Converts provided time instance into its corresponding value expressed in
6386      * seconds.
6387      *
6388      * @param time time instance to be converted.
6389      * @return converted value expressed in seconds.
6390      */
6391     private static double convertTimeToDouble(final com.irurueta.units.Time time) {
6392         return TimeConverter.convert(time.getValue().doubleValue(), time.getUnit(), TimeUnit.SECOND);
6393     }
6394 
6395     /**
6396      * Converts provided distance instance into its corresponding value expressed in
6397      * meters.
6398      *
6399      * @param distance distance instance to be converted.
6400      * @return converted value expressed in meters.
6401      */
6402     private static double convertDistanceToDouble(final Distance distance) {
6403         return DistanceConverter.convert(distance.getValue().doubleValue(), distance.getUnit(), DistanceUnit.METER);
6404     }
6405 
6406     /**
6407      * Converts provided speed instance into its corresponding value expressed in
6408      * meters per second.
6409      *
6410      * @param speed speed instance to be converted.
6411      * @return converted value expressed in meters per second.
6412      */
6413     private static double convertSpeedToDouble(final Speed speed) {
6414         return SpeedConverter.convert(speed.getValue().doubleValue(), speed.getUnit(), SpeedUnit.METERS_PER_SECOND);
6415     }
6416 
6417     /**
6418      * Converts provided acceleration instance into its corresponding value expressed
6419      * in meters per squared second.
6420      *
6421      * @param acceleration acceleration instance to be converted.
6422      * @return converted value expressed in meters per squared second.
6423      */
6424     private static double convertAccelerationToDouble(final Acceleration acceleration) {
6425         return AccelerationConverter.convert(acceleration.getValue().doubleValue(), acceleration.getUnit(),
6426                 AccelerationUnit.METERS_PER_SQUARED_SECOND);
6427     }
6428 
6429     /**
6430      * Converts provided angular speed into its corresponding value expressed in
6431      * radians per second.
6432      *
6433      * @param angularSpeed angular speed instance to be converted.
6434      * @return converted value expressed in radians per second.
6435      */
6436     private static double convertAngularSpeedToDouble(final AngularSpeed angularSpeed) {
6437         return AngularSpeedConverter.convert(angularSpeed.getValue().doubleValue(), angularSpeed.getUnit(),
6438                 AngularSpeedUnit.RADIANS_PER_SECOND);
6439     }
6440 }