/// <summary> /// Solves the navigation problem by the range-difference method (nonlinear method). /// </summary> /// <param name="A">Matrix of vectors { X, Y, Z }</param> /// <param name="T">Vector of time</param> /// <returns>Vector { X, Y, Z }</returns> /// <param name="eps">Epsilon (0, 1)</param> private static double[] RDM4(double[][] A, double[] T, double eps = 1e-8) { // Params int count = A.GetLength(0); double[] V = new double[count]; double[][] B; double[] F, S; // Roots for (int i = 0; i < maxIterations; i++) { // Ax = b B = RDMS.Left(A, T, V); F = RDMS.Right(A, T, V); S = Vector.Solve(B, F); V = Vector.Add(V, S); // Stop point if (RDMS.Convergence(S, eps)) { break; } } // Vector { X, Y, Z } return(Vector.Resize(V, 3)); }
// ************************************************************** // ALGORITHMS // ************************************************************** // * RDM implementation for 5 (or more) time-synchronized // receivers by solving a linearized system of equations [1]. // -------------------------------------------------------------- // * RDM implementation for 2, 3 and 4 time-synchronized // receivers by solving a nonlinear system of equations [2,3]. // // // ************************************************************** // REFERENCES // ************************************************************** // [1] I.V. Grin, R.A. Ershov, O.A. Morozov, V.R. Fidelman - // "Evaluation of radio source’s coordinates based on solution // of linearized system of equations by range-difference method" // -------------------------------------------------------------- // [2] V.B. Burdin, V.A. Tyurin, S.A. Tyurin, V.M. Asiryan - // "The estimation of target positioning by means of the // range-difference method" // -------------------------------------------------------------- // [3] E.P. Voroshilin, M.V. Mironov, V.A. Gromov - // "The estimation of radio source positioning by means of the // range-difference method using the multiposition passive // satellite system" // ************************************************************** /// <summary> /// Solves the navigation problem by the range-difference method (linear method). /// </summary> /// <param name="A">Matrix of vectors { X, Y, Z }</param> /// <param name="T">Vector of time</param> /// <returns>Vector { X, Y, Z }</returns> private static double[] RDM5(double[][] A, double[] T) { // Roots double[][] B = RDMS.Left(A, T); double[] F = RDMS.Right(A, T); double[] S = Vector.Solve(B, F); // Vector { X, Y, Z } return(Vector.Resize(S, 3)); }