<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="nlm-ta">Sensors</journal-id>
<journal-title>Sensors</journal-title>
<issn pub-type="epub">1424-8220</issn>
<publisher>
<publisher-name>Molecular Diversity Preservation International (MDPI)</publisher-name></publisher></journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3390/s120100839</article-id>
<article-id pub-id-type="publisher-id">sensors-12-00839</article-id>
<article-categories>
<subj-group>
<subject>Article</subject></subj-group></article-categories>
<title-group>
<article-title>A Low-Complexity Geometric Bilateration Method for Localization in Wireless Sensor Networks and Its Comparison with Least-Squares Methods</article-title></title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Cota-Ruiz</surname><given-names>Juan</given-names></name><xref ref-type="aff" rid="af1-sensors-12-00839"><sup>1</sup></xref><xref ref-type="corresp" rid="c1-sensors-12-00839">★</xref></contrib>
<contrib contrib-type="author">
<name><surname>Rosiles</surname><given-names>Jose-Gerardo</given-names></name><xref ref-type="aff" rid="af2-sensors-12-00839"><sup>2</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Sifuentes</surname><given-names>Ernesto</given-names></name><xref ref-type="aff" rid="af1-sensors-12-00839"><sup>1</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Rivas-Perea</surname><given-names>Pablo</given-names></name><xref ref-type="aff" rid="af3-sensors-12-00839"><sup>3</sup></xref></contrib></contrib-group>
<aff id="af1-sensors-12-00839">
<label>1</label> Department of Electrical and Computer Engineering, Autonomous University of Ciudad Juárez (UACJ), Ave. del Charro # 450 Nte. C.P.32310, Ciudad Juárez, Chihuahua, México; E-Mail: <email>esifuent@uacj.mx</email></aff>
<aff id="af2-sensors-12-00839">
<label>2</label> Rosiles Consulting, El Paso, TX 79938, USA; E-Mail: <email>rosiles@ieee.org</email></aff>
<aff id="af3-sensors-12-00839">
<label>3</label> Department of Computer Science, Baylor University, One Bear Place #97356, Waco, TX 76798, USA; E-Mail: Pablo Rivas <email>Perea@baylor.edu</email></aff>
<author-notes>
<corresp id="c1-sensors-12-00839">
<label>★</label> Author to whom correspondence should be addressed; E-Mail: <email>jcota@uacj.mx</email>; Tel.: +52-656-688-4841.</corresp></author-notes>
<pub-date pub-type="collection">
<year>2012</year></pub-date>
<pub-date pub-type="epub">
<day>12</day>
<month>1</month>
<year>2012</year></pub-date>
<volume>12</volume>
<issue>1</issue>
<fpage>839</fpage>
<lpage>862</lpage>
<history>
<date date-type="received">
<day>12</day>
<month>12</month>
<year>2011</year></date>
<date date-type="rev-recd">
<day>9</day>
<month>1</month>
<year>2012</year></date>
<date date-type="accepted">
<day>10</day>
<month>1</month>
<year>2012</year></date></history>
<permissions>
<copyright-statement>© 2012 by the authors; licensee MDPI, Basel, Switzerland</copyright-statement>
<copyright-year>2012</copyright-year>
<license>
<p>This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution license (http://creativecommons.org/licenses/by/3.0/).</p></license></permissions>
<abstract>
<p>This research presents a distributed and formula-based bilateration algorithm that can be used to provide initial set of locations. In this scheme each node uses distance estimates to anchors to solve a set of circle-circle intersection (CCI) problems, solved through a purely geometric formulation. The resulting CCIs are processed to pick those that cluster together and then take the average to produce an initial node location. The algorithm is compared in terms of accuracy and computational complexity with a Least-Squares localization algorithm, based on the Levenberg–Marquardt methodology. Results in accuracy <italic>vs.</italic> computational performance show that the bilateration algorithm is competitive compared with well known optimized localization algorithms.</p></abstract>
<kwd-group>
<kwd>distributed-localization</kwd>
<kwd>wireless sensor networks</kwd>
<kwd>Least Squares (LS)</kwd>
<kwd>optimization</kwd>
<kwd>bilateration</kwd></kwd-group></article-meta></front>
<body>
<sec sec-type="intro">
<label>1.</label>
<title>Introduction</title>
<p>Recent advances in microelectronics have led to the development of autonomous tiny devices called sensor nodes. Such devices, in spite of their physical limitations, contain the essential components of a computer, such as memory, I/O ports, sensors, and wireless transceivers which are typically battery-powered. Once deployed (randomly or not) over a certain area, sensor nodes have the ability to be in touch via wireless communications with neighboring nodes forming a wireless sensor network (WSN). The great advantage of using WSNs is that they can be applied in important areas such as disaster and relief, military affairs, medical care, environmental monitoring, target tracking, and so on [<xref ref-type="bibr" rid="b1-sensors-12-00839">1</xref>–<xref ref-type="bibr" rid="b3-sensors-12-00839">3</xref>]. However, most of WSN applications are based on local events. This means that each sensor node needs to detect and share local phenomenons with neighboring nodes, implying that the location of such events (<italic>i.e.</italic>, sensor locations) are crucial for the WSN application. In this way, sensor self-positioning represents the first startup process in most WSN projects. It is well known that using a GPS in each sensor node represents the primary solution to infer position estimates. However, this option is not suitable to be considered in all nodes if parameters like size, price, and energy-consumption in a sensor node are of concern [<xref ref-type="bibr" rid="b4-sensors-12-00839">4</xref>]. In order to optimize such parameters, a good option consists of reducing to a small fraction of sensors with GPS, and the remainder sensors (<italic>i.e.</italic>, unknown sensors), commonly above 90% of total deployed sensors, should use alternatives to estimate its own positions like radio-frequency transmissions or connectivity with neighboring sensors [<xref ref-type="bibr" rid="b5-sensors-12-00839">5</xref>–<xref ref-type="bibr" rid="b7-sensors-12-00839">7</xref>].</p>
<p>In order to provide position estimates many localization algorithms have been proposed, coming from different perspectives as described in [<xref ref-type="bibr" rid="b8-sensors-12-00839">8</xref>,<xref ref-type="bibr" rid="b9-sensors-12-00839">9</xref>]. Basically, localization algorithms can be categorized according to range-based <italic>vs.</italic> range-free methods, anchor-based <italic>vs.</italic> anchor-free models, and distributed <italic>vs.</italic> centralized processing [<xref ref-type="bibr" rid="b10-sensors-12-00839">10</xref>,<xref ref-type="bibr" rid="b11-sensors-12-00839">11</xref>]. Range-based methods consist of estimating node locations (using a localization algorithm) based on ranging information among sensor nodes. Range estimation between pairs of nodes is achieved using techniques of Time-of-Arrival (ToA), Receive-Signal-Strength (RSS), or Angle-of-Arrival (AoA) [<xref ref-type="bibr" rid="b12-sensors-12-00839">12</xref>]. This approach has the disadvantage of requiring extra-hardware in each sensor board, increasing the cost per sensor. However, as far as is known, this approach provides the best cost-accuracy performance in localization algorithms. A less expensive but more inaccurate alternative consists of using just connectivity among sensor nodes to estimate node locations, called range-free [<xref ref-type="bibr" rid="b13-sensors-12-00839">13</xref>]. On the other hand, if position estimates are obtained by considering absolute references (e.g., sensors with GPS or Anchors), the resulted position estimates (also with absolute positions) will be closely related to such reference positions, called an anchor-based model. By the contrary, if no reference positions are used to estimate locations, relative coordinates will be obtained, called an anchor-free model.</p>
<p>One of the most interesting and relevant aspects in WSN localization is associated with the way to compute the location of sensor nodes. For example, if all pairwise distance measurements among sensor nodes are sent to a central node to compute position estimates, the localization algorithm becomes centralized. This kind of central processing has the advantage of global mapping, but it has basically two important disadvantages which demerit its use in many cases when robustness and saving-energy have high priority in a WSN [<xref ref-type="bibr" rid="b14-sensors-12-00839">14</xref>]. Some important centralized schemes are the next. In [<xref ref-type="bibr" rid="b15-sensors-12-00839">15</xref>] an iterative descent procedure (<italic>i.e.</italic>, Gauss–Newton method) is used in a centralized way to solve the Non-Linear Least-Square (NLLS) problem. Another interesting centralized scheme was proposed in [<xref ref-type="bibr" rid="b16-sensors-12-00839">16</xref>] where the WSN localization problem is modeled as linear or semidefinite program (SDP), and a convex optimization is used to solve problem.</p>
<p>In contrast, when each sensor node estimates its own location using available information of neighboring nodes (e.g., range, connectivity, location, <italic>etc</italic>.), the localization process becomes distributed. Distributed processing is much less energy consuming in WSNs than centralized processing because centralized schemes need to collect relevant information from all nodes in the network which implies re-transmissions in multi-hop environments. Also, distributed algorithms are tolerant to node failures due to node redundancy. Thus, basically a distributed algorithm allows robustness, saving-energy, and scalability [<xref ref-type="bibr" rid="b14-sensors-12-00839">14</xref>,<xref ref-type="bibr" rid="b17-sensors-12-00839">17</xref>,<xref ref-type="bibr" rid="b18-sensors-12-00839">18</xref>], which overcomes the limitations imposed by the centralized approach. In [<xref ref-type="bibr" rid="b19-sensors-12-00839">19</xref>], a robust least squares scheme (RLS) for multi-hop node localization is proposed. This approach reduces the effects of error propagation by introducing a regularization parameter in the covariance matrix. However, the computational cost to mitigate the adverse effects of error propagation is too high at energy-constrained nodes. Similarly, [<xref ref-type="bibr" rid="b20-sensors-12-00839">20</xref>] proposes two weighted least squares techniques to gain robustness when a non-optimal propagation model is considered however they failed to introduce a covariance matrix in the localization process that can effectively decrease the computational complexity. On the other hand, the authors of [<xref ref-type="bibr" rid="b21-sensors-12-00839">21</xref>] propose a Quality of Trilateration method (QoT) for node localization. This approach provides a quantitative evaluation of different geometric forms of trilaterations. However, it seems to be that the main idea of this methodology depends on the quality or resolution of geometric forms (<italic>i.e.</italic>, like image processing) which is impractical to be implemented in resource-constrained devices with limited memory and processing capabilities (<italic>i.e.</italic>, nodes).</p>
<p>In this paper, we analyze a range-based bilateration algorithm (BL) that can be used in a distributed way to provide initial estimates for unknown sensors in a wireless sensor network (our analysis consider that each unknown sensor can determine its initial position communicating directly with several anchors). In this case, each node uses a set of two anchors and their respective ranges at a time to solve a set of circle intersection problems using a geometric formulation. The solutions from these geometric problems are processed to pick those that cluster around the location estimate and then take the average to produce an initial node location. Finally, we present a computational/accuracy comparison between the BL algorithm, based on closed-formulas, and a classical Least Squares (LS) approach for localization, based on the iterative Levenberg–Marquardt algorithm (LM).</p>
<p>The outline of this paper is as follows. In Section 2 we examine a popular ranging technique for WSNs used in our simulations. In Section 3 we explore the localization problem from the Least Squares point of view. In Section 4 we analyze in detail the BL algorithm. In Sections 5 and 6 we evaluate the accuracy and computational-complexity performance respectively between the bilateration algorithm <italic>vs.</italic> LS schemes. Finally, we present our conclusions.</p></sec>
<sec>
<label>2.</label>
<title>Ranging Techniques</title>
<p>This section presents a brief overview of an existing ranging technique used to estimate the true distance between two sensor nodes using power measurements, called Received Signal Strength (RSS). This technique is popular because sensor nodes do not require special hardware support to estimate distances. As a first approximation, considering the free space path loss model, the distance <italic>d<sub>ij</sub></italic> between two sensors <italic>s<sub>i</sub></italic> and <italic>s<sub>j</sub></italic> can be estimated by assuming that the power signal decreases in a way that is inversely proportional to the square of the distance 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>/</mml:mo>
<mml:msubsup>
<mml:mi>d</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula>. However, in real environments the signal power is attenuated by a factor <italic>d</italic><sup>−η<italic><sub>p</sub></italic></sup>. The path-loss factor η<italic><sub>p</sub></italic> is closely related to geometrical and environmental factors, and it varies from 2 to 4 for practical situations [<xref ref-type="bibr" rid="b22-sensors-12-00839">22</xref>]. In noiseless environments the power signal traveling from a sensor <italic>s<sub>j</sub></italic> to a sensor <italic>s<sub>i</sub></italic> can be measured according to the relation [<xref ref-type="bibr" rid="b23-sensors-12-00839">23</xref>]
<disp-formula id="FD1">
<label>(1)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo> </mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>η</mml:mo></mml:mrow>
<mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:msup></mml:mrow></mml:math></disp-formula>where the path-loss factor (η<italic><sub>p</sub></italic>) depends directly on the environmental conditions. <italic>P</italic><sub>0</sub> is the received power at the short reference distance of <italic>d</italic><sub>0</sub> = 1<italic>m</italic> from the transmitter. Also, <italic>P</italic><sub>0</sub> can be computed by the Friis free space equation [<xref ref-type="bibr" rid="b24-sensors-12-00839">24</xref>]. The log-distance path loss model
<disp-formula id="FD2">
<label>(2)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>P</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">dB</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:mn>10</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mo>η</mml:mo></mml:mrow>
<mml:mi>p</mml:mi></mml:msub>
<mml:mtext>log</mml:mtext>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi></mml:msub></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:math></disp-formula>measures the average large-scale path loss between sensors <italic>s<sub>i</sub></italic> and <italic>s<sub>j</sub></italic>. The actual path-loss (in dB) is a normally distributed random variable:
<disp-formula id="FD3">
<label>(3)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">ij</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup>
<mml:mo>∼</mml:mo>
<mml:mi>𝒩</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>P</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">ij</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">SH</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where σ<italic><sub>SH</sub></italic> is given in dB and reflects the degradations on signal propagation due to reflection, refraction, diffraction, and shadowing. It can be seen that the linear measurements and distance estimates have a log-normal distribution with a multiplicative effect on the measurements. The noisy range measurement <italic>R<sub>ij</sub></italic> can be obtained from <xref ref-type="disp-formula" rid="FD2">Equations (2)</xref> and <xref ref-type="disp-formula" rid="FD3">(3)</xref> as
<disp-formula id="FD4">
<label>(4)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mn>10</mml:mn></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">ij</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow>
<mml:mrow>
<mml:mn>10</mml:mn>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mo>η</mml:mo></mml:mrow>
<mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:msup></mml:mrow></mml:math></disp-formula></p></sec>
<sec>
<label>3.</label>
<title>Least-Squares Multilateration Localization Algorithms</title>
<p>In this section, we describe multilateration schemes that provide solutions to the Least-Square (LS) problem for location estimates using noisy ranging information derived from ToA or RSS ranging techniques. Consider a set of <italic>N</italic> wireless sensor nodes <bold>S</bold> = {<italic>s</italic><sub>1</sub>, <italic>s</italic><sub>2</sub>,..., <italic>s<sub>N</sub></italic>}, randomly distributed over a 2-D region whose locations are unknown. We represent these unknown locations with vectors <bold>z</bold><italic><sub>i</sub></italic> = [<italic>x<sub>i</sub>, y<sub>i</sub></italic>]<italic><sup>T</sup></italic>. Further, we assume the presence of a set <bold>A</bold> = {<italic>a</italic><sub>1</sub><italic>,a</italic><sub>2</sub><italic>,...,a<sub>M</sub></italic>} of <italic>M</italic> reference or anchor nodes with known position <bold>q</bold><italic><sub>j</sub></italic> = [<italic>x<sub>j</sub>, y<sub>j</sub></italic>]<italic>T</italic>. Anchor nodes, <italic>a<sub>i</sub></italic>, are equipped with GPS or a similar scheme to self localize. Also, for practical situations <italic>M ≪ N</italic> with <italic>M &gt;</italic> 2. We develop our discussion assuming a 2-D scenario, but it can be easily generalized to the 3-D case.</p>
<p>Moreover, we assume that any sensor can estimate pairwise ranges with its neighbors using time-of-arrival (ToA) or radio signal strength (RSS) techniques [<xref ref-type="bibr" rid="b24-sensors-12-00839">24</xref>]. Denote the range estimate between the node <italic>s<sub>i</sub></italic> and anchor <italic>a<sub>j</sub></italic> as
<disp-formula id="FD5">
<label>(5)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>e</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi></mml:msub></mml:mrow></mml:math></disp-formula>where <italic>d<sub>ij</sub></italic> is the true distance between <italic>a<sub>j</sub></italic> and <italic>s<sub>i</sub></italic>, and <italic>e<sub>ij</sub></italic> represents the measurement error introduced by environmental noise, propagation distortion, and the ranging technique. Then the solution to the localization problem for a node <italic>s<sub>i</sub></italic> consists of minimizing the sum of certain weighted error-distance function <italic>e<sub>w</sub></italic>(<italic>·</italic>) as follows:
<disp-formula id="FD6">
<label>(6)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mtext>arg min</mml:mtext></mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi></mml:munder>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>M</mml:mi></mml:munderover>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi></mml:mrow>
<mml:mi>w</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="bold">x</mml:mi></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mtext>arg min</mml:mtext></mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi></mml:munder>
<mml:mo> </mml:mo>
<mml:mi>𝒡</mml:mi>
<mml:mo> </mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where <bold>p</bold><italic><sub>i</sub></italic> = [<italic>x<sub>i</sub>,y<sub>i</sub></italic>]<italic><sup>T</sup></italic> represents the most likely position for the sensor <italic>s<sub>i</sub></italic> that minimizes <italic>𝒡</italic>, ‖ · ‖ represents the Euclidean norm, and <italic>e<sub>w</sub></italic>(<italic>x</italic>) represents a function that provides a specific weight to the argument <italic>x</italic> (<italic>i.e.</italic>, error distance). For example, the function <italic>e</italic><sub>2</sub>(<italic>x</italic>) = (<italic>x</italic>)<sup>2</sup>, the LS formulation, is commonly used to solve <xref ref-type="disp-formula" rid="FD6">Equation (6)</xref> due its tractability and efficiency in both mathematical and computational analysis. The LS problem can be solved either by closed-form solutions or by iterative methods. Next we describe both methodologies in detail.</p>
<sec>
<label>3.1.</label>
<title>Closed-Form LS Multilateration</title>
<p>Closed-Form methods have the advantage of fast time processing, which is useful for constrained devices (<italic>i.e.</italic>, motes) where the energy conservation represents one of the major concerns. However, this approach is also subject to inaccurate estimates due to noisy ranging measurements, so in most cases this approach is not a suitable option in real WSN scenarios where current ranging techniques are not able to provide the required accuracy on the ranging measurements. For example, Spherical Intersection (SX), Spherical Interpolation (SI), and Global Spherical Least Squares (GSLS) [<xref ref-type="bibr" rid="b25-sensors-12-00839">25</xref>] can solve a nonlinear set of equations using closed-formulas. These approaches provide good accuracy in the estimated positions under conditions like small biases and small standard deviations, but they also provide meaningless estimates under noisy environments [<xref ref-type="bibr" rid="b26-sensors-12-00839">26</xref>]. A more robust closed-form scheme consists of using the classical LS multilateration discussed next [<xref ref-type="bibr" rid="b19-sensors-12-00839">19</xref>,<xref ref-type="bibr" rid="b27-sensors-12-00839">27</xref>,<xref ref-type="bibr" rid="b28-sensors-12-00839">28</xref>].</p>
<p>Consider that a sensor <italic>s<sub>i</sub></italic> with Cartesian position <bold>p</bold><italic><sub>i</sub></italic> = [<italic>x<sub>i</sub>, y<sub>i</sub></italic>]<italic><sup>T</sup></italic> has already estimated its range <italic>R<sub>ij</sub></italic> to <italic>M</italic> anchors. For each anchor <italic>a<sub>j</sub></italic> with position <bold>q</bold><italic><sub>j</sub></italic> = [<italic>x<sub>j</sub>, y<sub>j</sub></italic>]<italic><sup>T</sup></italic>, an equation 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:math></inline-formula> is generated as shown the next formulas:
<disp-formula id="FD7">
<label>(7)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd/>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>2</mml:mn></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mo>⇔</mml:mo></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>2</mml:mn></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>⋮</mml:mo></mml:mtd>
<mml:mtd/>
<mml:mtd>
<mml:mo>⋮</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mi>M</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">iM</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd/>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>M</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>M</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula></p>
<p>The system of <xref ref-type="disp-formula" rid="FD7">Equations (7)</xref> can be linearized by subtracting the first equation (<italic>j</italic> = 1) from the last <italic>M −</italic> 1 equations arriving to a linear system that can be represented in a matrix form as
<disp-formula id="FD8">
<label>(8)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">Ap</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="bold">b</mml:mi></mml:mrow></mml:math></disp-formula>where
<disp-formula id="FD9">
<label>(9)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mo>=</mml:mo>
<mml:mo>−</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>⋮</mml:mo></mml:mtd>
<mml:mtd>
<mml:mo>⋮</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>M</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>M</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>M</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>×</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD10">
<label>(10)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi mathvariant="bold">b</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>2</mml:mn></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>3</mml:mn></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>3</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>3</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>⋮</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">iM</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>M</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>M</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>M</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>×</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></disp-formula></p>
<p>Now the least squares solution to <xref ref-type="disp-formula" rid="FD8">Equation (8)</xref> is to determine an estimate for <bold>p</bold><italic><sub>i</sub></italic> that minimizes
<disp-formula id="FD11">
<label>(11)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:munder>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">Ap</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="bold">b</mml:mi></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mi> </mml:mi>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo>=</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:munder>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Ap</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="bold">b</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Ap</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="bold">b</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula></p>
<p>After some manipulations we obtain the following:
<disp-formula id="FD12">
<label>(12)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:munder>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Ap</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi mathvariant="bold">b</mml:mi>
<mml:mo>+</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">b</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi mathvariant="bold">b</mml:mi></mml:mrow>
<mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>and the gradient of <italic>f</italic> at <bold>p</bold><italic><sub>i</sub></italic> is
<disp-formula id="FD13">
<label>(13)</label>
<mml:math display="block">
<mml:mrow>
<mml:mo>∇</mml:mo>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Ap</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi mathvariant="bold">b</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></disp-formula>which provides the estimate (<italic>i.e.</italic>, normal equations) to <xref ref-type="disp-formula" rid="FD8">Equation (8)</xref>:
<disp-formula id="FD14">
<label>(14)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">p</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi mathvariant="bold">b</mml:mi></mml:mrow></mml:math></disp-formula></p>
<p>Solving for <xref ref-type="disp-formula" rid="FD14">Equation (14)</xref> may not work properly if <bold>A</bold><italic><sup>T</sup></italic> <bold>A</bold> is close singular, so a recommended approach is to use a Tikhonov regularization as follows:</p>
<p>For <italic>μ &gt;</italic> 0 (e.g., close to zero)
<disp-formula id="FD15">
<label>(15)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mi>μ</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:munder>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">Ap</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="bold">b</mml:mi></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:mfrac>
<mml:mi>μ</mml:mi>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow>
<mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo>=</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:munder>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Ap</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi mathvariant="bold">b</mml:mi>
<mml:mo>+</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">b</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi mathvariant="bold">b</mml:mi>
<mml:mo>+</mml:mo>
<mml:mfrac>
<mml:mi>μ</mml:mi>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:msubsup>
<mml:mrow>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula></p>
<p>Then the gradient of <italic>f<sub>μ</sub></italic> at <bold>p</bold><italic><sub>i</sub></italic> is
<disp-formula id="FD16">
<label>(16)</label>
<mml:math display="block">
<mml:mrow>
<mml:mo>∇</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mi>μ</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Ap</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi mathvariant="bold">b</mml:mi>
<mml:mo>+</mml:mo>
<mml:mi>μ</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></disp-formula></p>
<p>Factorizing we arrive to a robust estimate for the LS problem where the idea is to modify eigenvalues to avoid working with zero eigenvalues [<xref ref-type="bibr" rid="b19-sensors-12-00839">19</xref>,<xref ref-type="bibr" rid="b29-sensors-12-00839">29</xref>].
<disp-formula id="FD17">
<label>(17)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">p</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mo>+</mml:mo>
<mml:mi>μ</mml:mi>
<mml:mi mathvariant="bold">I</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi mathvariant="bold">b</mml:mi></mml:mrow></mml:math></disp-formula></p></sec>
<sec>
<label>3.2.</label>
<title>Iterative LS Algorithms</title>
<p>Iterative methods are usually employed either when large-data set of information need to be processed or when an exact solution to a certain problem is not feasible (e.g., non-linear systems of equations) [<xref ref-type="bibr" rid="b30-sensors-12-00839">30</xref>]. Optimization techniques represent a good alternative to solve such non-linear equations using an iterative procedure. Optimization algorithms that solve Non-Linear Least-Square (NLLS) problems (<italic>i.e.</italic>, the WSN localization problem) have been extensively proposed where the Newton or Quasi-Newton methods are iteratively used to minimizing some residuals [<xref ref-type="bibr" rid="b15-sensors-12-00839">15</xref>,<xref ref-type="bibr" rid="b31-sensors-12-00839">31</xref>,<xref ref-type="bibr" rid="b32-sensors-12-00839">32</xref>]. The next paragraphs describe two well known iterative algorithms that are used to solve the NLLS problem: the Levenberg–Marquardt (LM) and the Trust-Region-Reflective (TRR).</p>
<p>Assuming that a node denoted <bold>s</bold><italic><sub>i</sub></italic>, with Cartesian position <bold>p</bold><italic><sub>i</sub></italic> = [<italic>x<sub>i</sub>, y<sub>i</sub></italic>]<italic><sup>T</sup></italic>, estimates its distance <italic>R<sub>ij</sub></italic> to <italic>M</italic> anchors denoted <italic>a<sub>j</sub></italic>, with positions <bold>q</bold><italic><sub>j</sub></italic> = [<italic>x<sub>j</sub>, y<sub>j</sub></italic>]<italic><sup>T</sup></italic>, with <italic>j</italic> = 1, ..., <italic>M</italic>. Consider the following residual error vector:
<disp-formula id="FD18">
<label>(18)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi mathvariant="bold">R</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>2</mml:mn></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>⋮</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">iM</mml:mi></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mi>M</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>Therefore, to find the more likely position of <bold>p</bold><italic><sub>i</sub></italic>, the program
<disp-formula id="FD19">
<label>(19)</label>
<mml:math display="block">
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:munder>
<mml:mrow>
<mml:mo> </mml:mo>
<mml:mi>f</mml:mi>
<mml:mo> </mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:munder>
<mml:mrow>
<mml:mo> </mml:mo>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:mi mathvariant="bold">R</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">p</mml:mi>
<mml:mi mathvariant="bold">i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi mathvariant="bold">R</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi mathvariant="bold">i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>is solved, which is the least squares problem.</p>
<p>To solve <xref ref-type="disp-formula" rid="FD19">Equation (19)</xref> we employ the TRR algorithm and the LM algorithm. The TRR algorithm uses a sub-space trust-region method to minimize a function <italic>f</italic>(<italic>x</italic>). Here, approximations to <italic>f</italic> inside of a trust-region are iteratively required. The three main concerns in this algorithm are how to choose and compute the approximation to the function, how to choose and modify the trust region, and, finally, how to minimize over the sub-space trust-region. Even though the TRR algorithm provides an accurate solution for the WSN initial estimates, it is expensive (computationally speaking) for constrained sensor nodes [<xref ref-type="bibr" rid="b33-sensors-12-00839">33</xref>].</p>
<p>On the other hand, the LM algorithm uses the search direction approach (a mix between the Gauss–Newton direction and the steepest descent direction) to find the solution to <xref ref-type="disp-formula" rid="FD19">Equation (19)</xref>. This algorithm outperforms the simple gradient descent methodology [<xref ref-type="bibr" rid="b34-sensors-12-00839">34</xref>], and also it avoids dangerous operations with singular matrices as the pure Newton method does, so this methodology represents a good algorithm for comparison with the bilateration approach due to its robustness, speed, and accuracy [<xref ref-type="bibr" rid="b35-sensors-12-00839">35</xref>]. Following the procedure presented in [<xref ref-type="bibr" rid="b29-sensors-12-00839">29</xref>], <xref ref-type="disp-formula" rid="FD19">Equation (19)</xref> can be solved by the Line Search Levenberg–Marquardt methodology shown in <xref ref-type="table" rid="t5-sensors-12-00839">Algorithm 1</xref>, where ‖·‖ is the <italic>ℓ</italic>-2 norm, <bold>I</bold> is the identity matrix, <italic>R<sub>ij</sub></italic> is the estimated distance between the mote <italic>s<sub>i</sub></italic> and the anchor <italic>a<sub>j</sub></italic>, <bold>J</bold>(<bold>p</bold><italic><sub>k</sub></italic>) represents the Jacobian of <bold>R</bold>(<bold>p</bold><italic><sub>k</sub></italic>) at the iteration k, and <bold>M</bold><italic><sub>f</sub></italic>(<bold>p</bold><italic><sub>k</sub></italic>) is the merit function given by
<disp-formula id="FD20">
<label>(20)</label>
<mml:math display="block">
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">R</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo> </mml:mo>
<mml:mi mathvariant="bold">R</mml:mi>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>The derivative of the merit function at the iteration <italic>k</italic> is
<disp-formula id="FD21">
<label>(21)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:msup>
<mml:mi>M</mml:mi>
<mml:mo>′</mml:mo></mml:msup></mml:mrow>
<mml:mi>f</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">J</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi mathvariant="bold">R</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>Δ<italic><sub>LM</sub></italic> is the Levenberg–Marquardt direction,
<disp-formula id="FD22">
<label>(22)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>ρ</mml:mi>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">J</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi mathvariant="bold">R</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where ρ ∈ (0,1), and finally
<disp-formula id="FD23">
<label>(23)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>M</mml:mi></mml:mfrac>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>M</mml:mi></mml:munderover>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mrow></mml:math></disp-formula>provides the initial guess required for the TRR and LM iterative algorithms.</p>
<table-wrap id="t5-sensors-12-00839" position="anchor">
<label>Algorithm 1</label>
<caption>
<p>Levenberg–Marquardt methodology.</p></caption>
<table frame="hsides" rules="groups">
<tbody>
<tr>
<td align="left" valign="top"><bold>Require:</bold> an initial position <bold>p</bold><sub>0</sub></td></tr>
<tr>
<td align="left" valign="top"><bold>Ensure:</bold> a solution <bold>p</bold><sub><italic>k</italic>+1</sub></td></tr>
<tr>
<td align="left" valign="top">  1: <bold>Initialize:</bold> k = 0,τ = Threshold, ρ = 0.05</td></tr>
<tr>
<td align="left" valign="top">  2: <bold>do</bold></td></tr>
<tr>
<td align="left" valign="top">  3: Solve: (<bold>J</bold><italic><sup>T</sup></italic> (<bold>p</bold><italic><sub>k</sub></italic>)<bold>J</bold>(<bold>p</bold><italic><sub>k</sub></italic>) + <italic>μ<sub>k</sub></italic><bold>I</bold>)Δ<italic><sub>LM</sub></italic> = <italic>−</italic><bold>J</bold><italic><sup>T</sup></italic> (<bold>p</bold><italic><sub>k</sub></italic>)<bold>R</bold>(<bold>p</bold><italic><sub>k</sub></italic>)</td></tr>
<tr>
<td align="left" valign="top">  4: Find the sufficient decrease (Armijo’s condition):</td></tr>
<tr>
<td align="left" valign="top">  5: such that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>t</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula> <italic>for t</italic> = 0<italic>,</italic>1<italic>,...</italic></td></tr>
<tr>
<td align="left" valign="top">  6: satisfies <bold>M</bold><italic><sub>f</sub></italic>(<bold>p</bold><italic><sub>k</sub></italic> + α<italic><sub>k</sub></italic>Δ<italic><sub>LM</sub></italic>) ≤ <bold>M</bold><italic><sub>f</sub></italic> (<bold>p</bold><italic><sub>k</sub></italic>) + 10<italic><sup>−</sup></italic><sup>4</sup>α<italic><sub>k</sub></italic><bold>M</bold><italic><sup>′</sup><sub>f</sub></italic>(<bold>p</bold>)<italic><sup>T</sup></italic> Δ<italic><sub>LM</sub></italic></td></tr>
<tr>
<td align="left" valign="top">  7: Update position: <bold>p</bold><italic><sub>k</sub></italic><sub>+1</sub> = <bold>p</bold> + α<italic><sub>k</sub></italic>Δ<italic><sub>LM</sub></italic></td></tr>
<tr>
<td align="left" valign="top">  8: Update <italic>μ<sub>k</sub></italic>: <italic>μ<sub>k</sub></italic> = ρ‖<bold>J</bold><italic><sup>T</sup></italic>(<bold>p</bold><italic><sub>k</sub></italic>)<bold>R</bold>(<bold>p</bold><italic><sub>k</sub></italic>)‖</td></tr>
<tr>
<td align="left" valign="top">  9: <bold>while</bold>(‖<bold>p</bold><sub><italic>k</italic>+1</sub> − <bold>p</bold><italic><sub>k</sub></italic>‖ ≤ τ or <italic>k</italic> ≤ 100)</td></tr></tbody></table></table-wrap></sec></sec>
<sec>
<label>4.</label>
<title>A Bilateration Localization Method</title>
<p>In this section we present the bilateration method for WSN localization which can be used as the initialization step for iterative localization schemes. This algorithm avoids iterative procedures, gradient calculations, and matrix operations that increase the internal processing in a constrained device. This research was done independently of the work presented in [<xref ref-type="bibr" rid="b36-sensors-12-00839">36</xref>]. Even though both schemes share the same idea (<italic>i.e.</italic>, bilateration), the procedure and the scope of both works are different as shown in Subsection 4.1. We show that it is possible to obtain a position estimate by solving a set of bilateration problems between a sensor node and its neighboring anchors, and then fusing the solutions according to the geometrical relationships among the nodes. Our aim is to find a scheme that can be deployed on a computationally constrained node. We argue that bilateration is an attractive option as the localization problem is divided on smaller sub-problems which can be efficiently solved on a mote. Next we start our development by introducing the typical assumptions and definitions considered in a WSN localization problem.</p>
<p>Let us define anchor subsets <bold>A</bold><italic><sub>jk</sub></italic> ⊂ <bold>A</bold> such that <bold>A</bold><italic><sub>jk</sub></italic> = {<italic>a<sub>j</sub>, a<sub>k</sub></italic>} with <italic>j</italic> ≠ <italic>k</italic>. Hence, there is a total of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>Q</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:munder>
<mml:mi>M</mml:mi>
<mml:mn>2</mml:mn></mml:munder></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> anchor subsets. Without loss of generality, consider the case for one node <italic>s<sub>i</sub></italic> that receives from a subset <italic>A<sub>jk</sub></italic> the anchor positions <bold>q</bold><italic><sub>j</sub></italic> and <bold>q</bold><italic><sub>k</sub></italic>, and computes the respective ranges <italic>R<sub>ij</sub></italic> and <italic>R<sub>ik</sub></italic> using RSS or ToA measurements. A possible geometrical scenario for this configuration is shown in <xref ref-type="fig" rid="f1-sensors-12-00839">Figure 1</xref>. We can appreciate from this example that the range estimates <italic>R<sub>ij</sub></italic> is larger than <italic>d<sub>ij</sub></italic> and <italic>R<sub>ik</sub></italic> is shorter than <italic>d<sub>ik</sub></italic>. Now, consider the two range circles shown in the figure; one with its origin at <bold>q</bold><italic><sub>j</sub></italic> and radius <italic>R<sub>ij</sub></italic>, and the second with center in <bold>q</bold><italic><sub>k</sub></italic> and radius <italic>R<sub>ik</sub></italic>. Next, define the two circle intersection points as 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula>, where 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> is the reflection of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> with respect to the (imaginary) line that connects <bold>q</bold><italic><sub>j</sub></italic> and <bold>q</bold><italic><sub>k</sub></italic>. In this case, the superscript <italic>jk</italic> represents the anchor subset <italic>A<sub>jk</sub></italic>. To simplify our discussion, we drop the superscripts, and only use them when more than one anchor subset is involved in our discussion.</p>
<p>In our approach, node <italic>s<sub>i</sub></italic> determines the circle-circle intersections (<italic>CCI</italic>) <bold>g</bold><italic><sub>i</sub></italic> and <bold>ḡ</bold><italic><sub>i</sub></italic> by solving the closed-form expression reported in [<xref ref-type="bibr" rid="b37-sensors-12-00839">37</xref>]. For instance, consider the two right triangles formed by the coordinates (<bold>q</bold><italic><sub>j</sub></italic>,<bold>g</bold><italic><sub>i</sub></italic>,<bold>f</bold><italic><sub>t</sub></italic>) and (<bold>q</bold><italic><sub>k</sub></italic>,<bold>g</bold><italic><sub>i</sub></italic>, <bold>f</bold><italic><sub>t</sub></italic>) in <xref ref-type="fig" rid="f1-sensors-12-00839">Figure 1</xref>, which satisfy the following relationships:
<disp-formula id="FD24a">
<label>(24a)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">jt</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>h</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ij</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD24b">
<label>(24b)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">kt</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>h</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ik</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:math></disp-formula>respectively. The distance <italic>d<sub>jt</sub></italic> can be obtained by solving for <italic>h</italic><sup>2</sup> in <xref ref-type="disp-formula" rid="FD24a">Equations (24a)</xref> and <xref ref-type="disp-formula" rid="FD24b">(24b)</xref>:
<disp-formula id="FD25">
<label>(25)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ij</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">jt</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ik</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">kt</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:math></disp-formula>and letting <italic>d</italic> = ‖<bold>q</bold><italic><sub>j</sub></italic> − <bold>q</bold><italic><sub>k</sub></italic>‖ = <italic>d<sub>jt</sub></italic> + <italic>d<sub>kt</sub></italic> resulting in
<disp-formula id="FD26a">
<label>(26a)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mi>d</mml:mi>
<mml:mi mathvariant="italic">jt</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ik</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi mathvariant="italic">jt</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD26b">
<label>(26b)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ik</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msup>
<mml:mi>d</mml:mi>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>⋅</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi mathvariant="italic">jt</mml:mi></mml:msub></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD26c">
<label>(26c)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi mathvariant="italic">jt</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ik</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mi>d</mml:mi>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>⋅</mml:mo>
<mml:mi>d</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:math></disp-formula>where the position <bold>f</bold><italic><sub>t</sub></italic> = [<italic>x<sub>t</sub>, y<sub>t</sub></italic>]<italic><sup>T</sup></italic> is obtained as follows:
<disp-formula id="FD27">
<label>(27)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">f</mml:mi>
<mml:mi>t</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold">q</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi mathvariant="italic">jt</mml:mi></mml:msub></mml:mrow>
<mml:mi>d</mml:mi></mml:mfrac>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">q</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold">q</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>Finally, the circle intersection <bold>g</bold><italic><sub>i</sub></italic> = [<italic>x<sub>i</sub>,y<sub>i</sub></italic>]<italic><sup>T</sup></italic> is computed as
<disp-formula id="FD28a">
<label>(28a)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi></mml:msub>
<mml:mo>±</mml:mo>
<mml:mfrac>
<mml:mi>h</mml:mi>
<mml:mi>d</mml:mi></mml:mfrac>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD28b">
<label>(28b)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>t</mml:mi></mml:msub>
<mml:mo>∓</mml:mo>
<mml:mfrac>
<mml:mi>h</mml:mi>
<mml:mi>d</mml:mi></mml:mfrac>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where <bold>q</bold><italic><sub>j</sub></italic> = [<italic>x<sub>j</sub>,y<sub>j</sub></italic>]<italic><sup>T</sup></italic>, <bold>q</bold><italic><sub>k</sub></italic> = [<italic>x<sub>k</sub>, y<sub>k</sub></italic>]<italic><sup>T</sup></italic>, and <italic>h</italic> is easily obtained from <xref ref-type="disp-formula" rid="FD24a">Equation (24)</xref>. The complementary signs of <xref ref-type="disp-formula" rid="FD28a">Equations (28a)</xref> and <xref ref-type="disp-formula" rid="FD28b">(28b)</xref> are used to obtain the solution for <bold>ḡ</bold><italic><sub>i</sub></italic>.</p>
<p>Each node <italic>s<sub>i</sub></italic> applies the <italic>CCI</italic> procedure using all <italic>Q</italic> subsets <bold>A</bold><italic><sub>jk</sub></italic>. For instance, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi mathvariant="italic">jk</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi mathvariant="italic">jk</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> are obtained from the subset <bold>A</bold><italic><sub>jk</sub></italic>, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> are obtained from the subset <bold>A</bold><italic><sub>jℓ</sub></italic>, and so on. Hence, a sensor node will have 2<italic>Q</italic> possible initial position estimates where half are considered mirror solutions which should be eliminated through the selection process described next. Geometrically, we expect that the true location will be located around the region where solutions form a cluster (<italic>i.e.</italic>, half of the circle intersections should ideally intersect at the solution). Let us to consider the example shown in <xref ref-type="fig" rid="f2-sensors-12-00839">Figure 2</xref>.</p>
<p>There are three anchors named <italic>a<sub>j</sub>, a<sub>k</sub></italic> and <italic>a<sub>ℓ</sub></italic> and a node <italic>s<sub>i</sub></italic> that needs to be localized. The range estimate <italic>R<sub>ij</sub></italic> is larger than <italic>d<sub>ij</sub></italic>, the range estimate <italic>R<sub>ik</sub></italic> is shorter than <italic>d<sub>ik</sub></italic>, and the range estimate <italic>R<sub>iℓ</sub></italic> is shorter than <italic>d<sub>iℓ</sub></italic>. Hence, <italic>s<sub>i</sub></italic> computes a set of of six location candidates given by 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi mathvariant="italic">jk</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula>. As seen in the figure, all the mirror circle intersection estimates will tend to be isolated while the correct circle intersections will tend to cluster around the node location. For example, to decide between 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi mathvariant="italic">jk</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi mathvariant="italic">jk</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> candidate positions, generated using the anchors (<italic>a<sub>j</sub>, a<sub>k</sub></italic>), the sensor <italic>s<sub>i</sub></italic> obtains the minimum Square Euclidean sum from the location 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> to each pair of candidate positions as follows:
<disp-formula id="FD29">
<label>(29)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>ψ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mtext>min</mml:mtext>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mtext>min</mml:mtext>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>On the other hand, the sensor <italic>s<sub>i</sub></italic> also obtains the minimum Square Euclidean sum from the location 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> to each pair of candidate positions as follows:
<disp-formula id="FD30">
<label>(30)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>φ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mtext>min</mml:mtext>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mtext>min</mml:mtext>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>Finally, the lowest value of ψ and φ helps to decide between choosing 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi mathvariant="italic">jk</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> or 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula>. The process is repeated for all <italic>Q</italic> solution pairs to generate a set of disambiguated locations.</p>
<table-wrap id="t6-sensors-12-00839" position="anchor">
<label>Algorithm 2</label>
<caption>
<p>General code used by every sensor <italic>s<sub>i</sub></italic> to get its initial position estimate 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>0</mml:mn></mml:msubsup></mml:mrow></mml:math></inline-formula>.<xref ref-type="table-fn" rid="tfn1-sensors-12-00839"><sup>1</sup></xref></p></caption>
<table frame="hsides" rules="groups">
<tbody>
<tr>
<td align="left" valign="top"><bold>Require: q</bold><italic><sub>k</sub></italic>, <italic>R<sub>ik</sub></italic>, <italic>with</italic> {<italic>k</italic> ← 1, …, <italic>M</italic>}, and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>Q</mml:mi>
<mml:mo>←</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:munder>
<mml:mi>M</mml:mi>
<mml:mn>2</mml:mn></mml:munder></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula></td></tr>
<tr>
<td align="left" valign="top"><bold>Ensure:</bold> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>0</mml:mn></mml:msubsup></mml:mrow></mml:math></inline-formula></td></tr>
<tr>
<td align="left" valign="top">  1: <bold>Initialize: T</bold> ← [0,0]<italic><sup>T</sup></italic></td></tr>
<tr>
<td align="left" valign="top">  2: <bold>for</bold> each subset 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:munder>
<mml:mi>M</mml:mi>
<mml:mn>2</mml:mn></mml:munder></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> two-anchor subsets <bold>do</bold></td></tr>
<tr>
<td align="left" valign="top">  3:   ψ ← 0</td></tr>
<tr>
<td align="left" valign="top">  4:   φ ← 0</td></tr>
<tr>
<td align="left" valign="top">  5:   
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> ← <italic>CCI</italic> (<bold>q</bold><italic><sub>j</sub></italic>, <bold>q</bold><italic><sub>k</sub></italic>, <italic>R<sub>ij</sub></italic>, <italic>R<sub>ik</sub></italic>) {Return the two circle intersections}</td></tr>
<tr>
<td align="left" valign="top">  6:   <bold>for</bold> each subset 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>ℓ</mml:mi>
<mml:mi>m</mml:mi></mml:mrow></mml:msub>
<mml:mo>≠</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msub>
<mml:mo>∈</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:munder>
<mml:mi>M</mml:mi>
<mml:mn>2</mml:mn></mml:munder></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> two-anchor subsets <bold>do</bold></td></tr>
<tr>
<td align="left" valign="top">  7:     
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>ℓ</mml:mi>
<mml:mi>m</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>ℓ</mml:mi>
<mml:mi>m</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> ← <italic>CCI</italic> (<bold>q</bold><italic><sub>ℓ</sub></italic>, <bold>q</bold><italic><sub>m</sub></italic>, <italic>R<sub>iℓ</sub></italic>, <italic>R<sub>im</sub></italic>) {Return the two circle intersections}</td></tr>
<tr>
<td align="left" valign="top">  8:     
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>←</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi mathvariant="italic">jk</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>ℓ</mml:mi>
<mml:mi>m</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></td></tr>
<tr>
<td align="left" valign="top">  9:     
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>←</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>ℓ</mml:mi>
<mml:mi>m</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></td></tr>
<tr>
<td align="left" valign="top">  10:     ψ ← ψ+min (<italic>v</italic><sub>1</sub>,<italic>v</italic><sub>2</sub>) {Return the minimum between <italic>v</italic><sub>1</sub> and <italic>v</italic><sub>2</sub>}</td></tr>
<tr>
<td align="left" valign="top">  11:     
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>←</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>ℓ</mml:mi>
<mml:mi>m</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></td></tr>
<tr>
<td align="left" valign="top">  12:     
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>←</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>ℓ</mml:mi>
<mml:mi>m</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></td></tr>
<tr>
<td align="left" valign="top">  13:     φ ← φ+min (<italic>w</italic><sub>1</sub>,<italic>w</italic><sub>2</sub>) {Return the minimum between <italic>w</italic><sub>1</sub> and <italic>w</italic><sub>2</sub>}</td></tr>
<tr>
<td align="left" valign="top">  14:   <bold>end for</bold></td></tr>
<tr>
<td align="left" valign="top">  15:   <bold>if</bold> (ψ &lt; φ) <bold>then</bold></td></tr>
<tr>
<td align="left" valign="top">  16:     
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi mathvariant="bold">T</mml:mi>
<mml:mo>←</mml:mo>
<mml:mi mathvariant="bold">T</mml:mi>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi mathvariant="italic">jk</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula></td></tr>
<tr>
<td align="left" valign="top">  17:   <bold>else</bold></td></tr>
<tr>
<td align="left" valign="top">  18:     
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi mathvariant="bold">T</mml:mi>
<mml:mo>←</mml:mo>
<mml:mi mathvariant="bold">T</mml:mi>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula></td></tr>
<tr>
<td align="left" valign="top">  19:   <bold>end if</bold></td></tr>
<tr>
<td align="left" valign="top">  20: <bold>end for</bold></td></tr>
<tr>
<td align="left" valign="top">  21: 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>0</mml:mn></mml:msubsup>
<mml:mo>←</mml:mo>
<mml:mfrac>
<mml:mi mathvariant="bold">T</mml:mi>
<mml:mi>Q</mml:mi></mml:mfrac></mml:mrow></mml:math></inline-formula></td></tr></tbody></table>
<table-wrap-foot><fn id="tfn1-sensors-12-00839">
<label>1</label>
<p>The algorithm omits the special cases where there are no circle intersections. The procedure for these instances is described further in the text.</p></fn></table-wrap-foot></table-wrap>
<p>Referring to our example, once node <italic>s<sub>i</sub></italic> removes the mirror locations, then an estimate of the node position can be formed by taking the <italic>average</italic> of the disambiguated set 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi mathvariant="bold">G</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi mathvariant="italic">jk</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>ℓ</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula>.</p>
<p>The complete bilateration scheme is described in <xref ref-type="table" rid="t6-sensors-12-00839">Algorithm 2</xref>. This is a distributed localization algorithm in the sense that each node can implement it and determine its position estimate, given the anchor positions and the range estimates <italic>R<sub>ij</sub></italic> between each node and all the anchors. Since <xref ref-type="table" rid="t6-sensors-12-00839">Algorithm 2</xref> uses only anchor measurement, it can be used as an initialization step to generate a set of position estimates that can be used with algorithms that integrate more information from anchor and non-anchor nodes (<italic>i.e.</italic>, iterative distributed algorithms).</p>
<p>There are some anomalous cases which should be considered in the bilateration algorithm. In order to get its initial estimation 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold">p</mml:mi>
<mml:mi>i</mml:mi>
<mml:mn>0</mml:mn></mml:msubsup></mml:mrow></mml:math></inline-formula>, it is essential that every sensor <italic>s<sub>i</sub></italic> gets the two location estimations from each one of the <italic>Q</italic> subsets even if the solutions are not feasible. For example, assume the two special cases shown in <xref ref-type="fig" rid="f3-sensors-12-00839">Figure 3</xref>. If we consider the left-side case on the figure, <italic>R<sub>ik</sub></italic> is shorter than <italic>d<sub>ik</sub></italic>, and <italic>R<sub>ij</sub></italic> is shorter than <italic>d<sub>ij</sub></italic>, clearly the triangle inequalities are not satisfied since
<disp-formula id="FD31">
<label>(31)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ik</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&gt;</mml:mo></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&gt;</mml:mo></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ik</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ik</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&gt;</mml:mo></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">ij</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>As a consequence, the sensor <italic>s<sub>i</sub></italic> will not be able to find any solution to <xref ref-type="disp-formula" rid="FD28a">Equation (28)</xref>. In other words, if the two circles do not intersect with each other, it will not be feasible to find the circle intersections <bold>g</bold><italic><sub>i</sub></italic> and <bold>ḡ</bold><italic><sub>i</sub></italic>. Therefore, a relaxed estimation should be generated as described next. Considering that ‖<bold>q</bold><italic><sub>j</sub></italic> − <bold>q</bold><italic><sub>k</sub></italic>‖ is a constant distance between the anchors in set <bold>A</bold><italic><sub>jk</sub></italic>, the node <italic>s<sub>i</sub></italic> takes two steps to estimate the locations 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula>. First, a location <bold>x</bold><sub>1</sub> is obtained by fixing <italic>R<sub>ik</sub></italic> and making <italic>R<sub>ij</sub></italic> = |‖<bold>q</bold><italic><sub>j</sub></italic> − <bold>q</bold><italic><sub>k</sub></italic>‖ − <italic>R<sub>ik</sub></italic>| in order to satisfy the triangle inequality. Next, the sensor <italic>s<sub>i</sub></italic> should use the <italic>CCI</italic> procedure to solve for <bold>x</bold><sub>1</sub>. Similarly, a second location estimate <bold>x</bold><sub>2</sub> is obtained by fixing <italic>R<sub>ij</sub></italic>, choosing <italic>R<sub>ik</sub></italic> = |‖<bold>q</bold><italic><sub>j</sub></italic> − <bold>q</bold><italic><sub>k</sub></italic>‖ − <italic>R<sub>ij</sub></italic>| to satisfy the triangle inequality and solving the problem through the <italic>CCI</italic> procedure. Finally, both 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">g</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi mathvariant="italic">jk</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> are generated as the average 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow>
<mml:mn>2</mml:mn></mml:mfrac></mml:mrow></mml:math></inline-formula> implying that when the triangle inequality is not satisfied, there will be a single solution that falls over the line <italic>y</italic>. A similar procedure can be derived for the second case as depicted in <xref ref-type="fig" rid="f3-sensors-12-00839">Figure 3</xref>.</p>
<sec>
<label>4.1.</label>
<title>Comparison with the Previous Bilateration Scheme</title>
<p>As described before, the research reported in [<xref ref-type="bibr" rid="b36-sensors-12-00839">36</xref>] is focused on a distributed bilateration scheme that finds initial estimates. Using two anchors at a time, each sensor node <italic>s<sub>i</sub></italic> finds two possible candidates (<italic>i.e.</italic>, circle intersections). If sufficient anchors are available, the sensor node <italic>s<sub>i</sub></italic> averages the cloud of candidates which tend to be close to each other. The average of such candidates provides the initial estimate.</p>
<p>As can be seen the general idea for this approach is quite similar to our bilateration approach. However, there are relevant differences between the two schemes that should be taken into account. These differences make that our bilateration approach be an alternative for the scheme proposed in [<xref ref-type="bibr" rid="b36-sensors-12-00839">36</xref>]. For example, one of the differences is that [<xref ref-type="bibr" rid="b36-sensors-12-00839">36</xref>] does not take into account special cases when a sensor <italic>s<sub>i</sub></italic> is not able to compute circle intersections of two anchors (<italic>i.e.</italic>, the circles are not in touch) as shown <xref ref-type="fig" rid="f3-sensors-12-00839">Figure 3</xref>. Therefore, under this perspective this scheme is limited to naive scenarios in which estimated distances between sensors and anchors should have good accuracy. Thus, noisy RSS measurements, commonly used in realistic scenarios, may not provide useful information for this scheme. Hence, if a sensor <italic>s<sub>i</sub></italic> is not able to find sufficient circle intersections from two neighboring pair of anchors at time, the localization process will fail. In our case, the bilateration scheme is able to obtain initial estimates under the most severe scenarios (<italic>i.e.</italic>, not circle intersections).</p>
<p>Another important aspect to consider in [<xref ref-type="bibr" rid="b36-sensors-12-00839">36</xref>], is the use of a threshold, δ, which reduces the number of possible candidate positions, making this approach more selective. However, the value of δ is hard to determine in practice and also it does not guarantee good results in noisy environments. Additionally, in [<xref ref-type="bibr" rid="b36-sensors-12-00839">36</xref>] each sensor node <italic>s<sub>i</sub></italic> should create a table of its neighboring anchors. All anchors have a specific position inside of the table, and they are weighted by the sensor <italic>s<sub>i</sub></italic> according to the candidate positions that they generate. The value of δ is used to select a certain group of candidate positions. The anchors are weighted according to the candidates that they generated. Finally, all tables are broadcast by sensors. Once all sensors have received the anchor tables of their neighbors, they run a post-processing stage to determine which anchors are more reliable than others. These anchors are used to obtain initial estimates. As can be seen, the drawback of this approach are extra wireless transmissions required to share anchor tables among sensors. In our case we present an extension of the earlier BL algorithm which avoids any kind of wireless transmission with the goal to save energy. Finally, we should remark that we are using a sorting algorithm (lines 10,13, and 15–18 of the <xref ref-type="table" rid="t6-sensors-12-00839">Algorithm 2</xref>) to determine initial positions. Analysis results shown in next section demonstrate that the alternative BL algorithm is competitive in comparison with well known accurate and efficient algorithms based on least-squares methodologies.</p></sec></sec>
<sec sec-type="methods">
<label>5.</label>
<title>Accuracy Performance Between Closed-Formulas and Iterative Procedures in the WSN Localization Problem</title>
<p>In this section we analyze the accuracy performance of both methodologies, optimized and closed-formula schemes. Even though the strength of a closed-formula for solving the WSN localization problem is its low complexity compared with an iterative algorithm, closed-formulas can present large errors in the presence of inaccurate ranging measurements. However, in many cases it is desirable to sacrifice accuracy to save energy (<italic>i.e.</italic>, increase battery lifetime). On the other hand, the weakness for closed-form methods (<italic>i.e.</italic>, noise sensitivity) represents the strong point for iterative methods and vice versa. The goal of both methodologies seems to be in opposite directions. However, the main effort in WSN localization research is focused on developing an strategy that can join the strength of both methodologies to create an efficient algorithm that can save energy providing the best accuracy in the estimated positions.</p>
<p>Next we present an evaluation of accuracy between closed-formulas and iterative methodologies. For the former methods we are considering the classical LS Multilateration, the Min-max method (The Min-max approach is based on the intersection of rectangles instead of circle intersections. It provides a more simple technique than lateration schemes to obtain position estimates at the expenses of accuracy) [<xref ref-type="bibr" rid="b38-sensors-12-00839">38</xref>,<xref ref-type="bibr" rid="b39-sensors-12-00839">39</xref>], and the bilateration algorithm. For iterative methodologies we are considering two algorithms to solve the NLLS: the LM and the TRR algorithms.</p>
<p>For the simulations that follow, we consider 20 different sensor networks where each one is composed by <italic>N</italic> = 96 unknown sensors, randomly distributed over 100 m by 100 m area. Also, we add <italic>M</italic> = 4 non-collinear anchors with full-connectivity on every realization as shown in <xref ref-type="fig" rid="f4-sensors-12-00839">Figure 4</xref>.</p>
<p>For each network, we add noise to the true distances between anchors and nodes using the log-distance path loss model described in <xref ref-type="disp-formula" rid="FD4">Equation (4)</xref>. The estimated distances are simulated using σ<italic><sub>SH</sub></italic> = 6<italic><sub>dB</sub></italic> and η<italic><sub>P</sub></italic> = 2.6, typical parameters for the propagation models on outdoors scenarios, and <italic>P</italic><sub>0</sub> = <italic>−</italic>52<italic><sub>dB</sub></italic> is selected according to current commercial specifications for wireless motes [<xref ref-type="bibr" rid="b40-sensors-12-00839">40</xref>]. Finally, we assume that all nodes have the sensitivity to detect any RF signal coming from anchors.</p>
<p>To compare the accuracy performance between both methodologies it was necessary to use the same set of range measurements for each closed-form method and iterative algorithm. <xref ref-type="fig" rid="f5-sensors-12-00839">Figure 5</xref> summarizes the initial estimates obtained by both methodologies using the RMSE metric as shown the next equation:
<disp-formula id="FD32">
<label>(32)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi mathvariant="italic">RMSE</mml:mi>
<mml:mo>=</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>N</mml:mi></mml:mfrac>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:munderover>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>0</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">z</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:msqrt></mml:mrow></mml:math></disp-formula>where 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>0</mml:mn></mml:msubsup></mml:mrow></mml:math></inline-formula> represents an initial position estimate for a sensor <italic>s<sub>i</sub></italic> and <bold>z</bold><italic><sub>i</sub></italic> its true position.</p>
<p>As can be seen, the closed-form LS approach provides the least accurate initial estimates (mean = 22.7 <italic>m</italic> and standard deviation = 2.22 <italic>m</italic>) compared with iterative algorithms as expected due to the noisy ranging measurements. In a similar way, the Min-max scheme also provides large errors (mean = 19.7 <italic>m</italic> and standard deviation = 3.36 <italic>m</italic>). On the other hand, we can appreciate that both iterative algorithms, the LM and the TRR, provide practically the best and similar results for initial estimates (mean = 12.54 <italic>m</italic> and standard deviation = 0.69 <italic>m</italic>) as expected, and finally the bilateration algorithm presents very acceptable initial estimates compared with the last two algorithms (mean = 12.96 <italic>m</italic> and standard deviation = 0.84 <italic>m</italic>). However, we should consider that the computational complexity for the LM and the TRR algorithms is significantly larger than the bilateration algorithm. This discussion will be expanded in the next section.</p>
<p>Also, we tested the SX, SI and GSLS algorithms [<xref ref-type="bibr" rid="b25-sensors-12-00839">25</xref>] using the same set of networks. The estimated positions presented large errors under this scheme as indicated by [<xref ref-type="bibr" rid="b26-sensors-12-00839">26</xref>]. Then, these results were disregarded in our analysis.</p></sec>
<sec sec-type="methods">
<label>6.</label>
<title>Computational Complexity Analysis between the Bilateration and the LM Algorithm</title>
<p>The efficiency of an algorithm can be described in terms of the time or space complexity [<xref ref-type="bibr" rid="b41-sensors-12-00839">41</xref>]. Time complexity refers to the relation between the number of required computations for a given input. The space used for a given input provides the space complexity of an algorithm. The computational complexity of an algorithm could be described as the number of operations that it takes to find a solution [<xref ref-type="bibr" rid="b42-sensors-12-00839">42</xref>].</p>
<p>In this section we provide an operation count on the number of additions (ADDs), multipliers (MULs), divides (DIVs), and square roots (SQRTs) exactly in the way that DSP algorithms are described [<xref ref-type="bibr" rid="b43-sensors-12-00839">43</xref>]. This will allow an “apple-to-apple” comparison. Moreover, an accurate description lends itself to a cycle accurate description for any microprocessor and more significantly, the use of energy models based on computing cycles to estimate the energy consumption for a given algorithm. An energy analysis will be a discussion of a future work. In next subsections we present the computational complexity analysis for the iterative LS and the bilateration algorithm.</p>
<sec sec-type="methods">
<label>6.1.</label>
<title>Computational Analysis of the LM Algorithm</title>
<p>The LM algorithm could be considered as too expensive for motes given its iterative nature and the need to estimate first and second order information (<italic>i.e.</italic>, gradients, Jacobians, and Hessians). The number of iterations <italic>K</italic> is highly dependent on the initial point <bold>x</bold><sub>0</sub> and could be considered a random variable. On the other hand, if a good initial estimate, <bold>x</bold><sub>0</sub>, is provided, then the number of iterations is expected to be low given the convergence properties of LM.</p>
<p>We are interested in providing an algorithmic analysis that provides a detailed description in terms of additions and subtractions (jointly referred as ADDs), multiplications (MULs), divisions (DIVs), and square roots (SQRTs). For simplicity in the next paragraphs we let <bold>J</bold><italic><sub>k</sub></italic> ≡ <bold>J</bold>(<bold>x</bold><italic><sub>k</sub></italic>) and <bold>R</bold><italic><sub>k</sub></italic> ≡ <bold>R</bold>(<bold>x</bold><italic><sub>k</sub></italic>).</p>
<p>The square root is a relevant operation as the error function <bold>R</bold><italic><sub>k</sub></italic> and the Jacobian estimate requires <italic>ℓ</italic><sub>2</sub> norms to compute distances between sensor and anchors. We also note that the complexity of the operations is not the same in terms of the processing resources (hardware and software) they take. Abusing notation we have
<disp-formula id="FD33">
<label>(33)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtext>ADD</mml:mtext>
<mml:mo>&lt;</mml:mo>
<mml:mtext>MUL</mml:mtext>
<mml:mo>&lt;</mml:mo>
<mml:mtext>DIV</mml:mtext>
<mml:mo>&lt;</mml:mo>
<mml:mtext>SQRT</mml:mtext></mml:mrow></mml:math></disp-formula></p>
<p>This analysis also focuses on the most efficient implementation in terms of the proper operation sequencing in order to favor reuse of terms (<italic>i.e.</italic>, avoid computing the same quantity twice).</p>
<p>We perform the analysis for a single iteration of the LM algorithm, and the total cost for each operation is multiplied by <italic>K</italic>. We also note that <italic>K</italic> can be modeled as a random variable; the usefulness of this approach is discussed later. We assume there are <italic>M</italic> anchors which have broadcast their position to all the nodes. Each node will run the LM algorithm to find its initial position as described in Subsection 3.2. We identify three core operations: <italic>ℓ</italic><sub>2</sub> or Euclidean norm, the error vector <bold>R</bold><italic><sub>k</sub></italic> and an estimate of <bold>J</bold><italic><sub>k</sub></italic>.</p>
<p>The <italic>ℓ</italic><sub>2</sub> norm will be used to compute the magnitude of the difference between two vectors <bold>a</bold>, <bold>b</bold> ∈ ℝ<sup>2</sup> given by 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:mi mathvariant="bold">a</mml:mi>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="bold">b</mml:mi></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>a</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>a</mml:mi></mml:mrow>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mi>y</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mrow></mml:math></inline-formula>. This requires three ADDS, two MULs and one SQRT. The norm is used to compute <bold>R</bold><italic><sub>k</sub></italic> given in <xref ref-type="disp-formula" rid="FD18">Equation (18)</xref> and to estimate the Jacobian as follows:
<disp-formula id="FD34">
<label>(34)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">J</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mrow></mml:mfrac></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mrow></mml:mfrac></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>⋮</mml:mo></mml:mtd>
<mml:mtd>
<mml:mo>⋮</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>M</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>M</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>M</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mrow></mml:mfrac></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>M</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>M</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>M</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mrow></mml:mfrac></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
<mml:mo>×</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></disp-formula></p>
<p>For <bold>R</bold><italic><sub>k</sub></italic> we see that we require <italic>M</italic> ADDs and <italic>M ℓ</italic><sub>2</sub>-norms. Accounting for the norms, the error function requires 4<italic>M</italic> ADDs, 2<italic>M</italic> MULs, and <italic>M</italic> SQRTs. These numbers are recorder in <xref ref-type="table" rid="t1-sensors-12-00839">Table 1</xref>. A similar analysis follows for <bold>J</bold><italic><sub>k</sub></italic>. A direct look at <xref ref-type="disp-formula" rid="FD34">Equation (34)</xref> indicates that we have the same norm across rows, so we can compute them first and then we would need an additional 2<italic>M</italic> ADDs and 2<italic>M</italic> DIVs. However, a better approach would be to compute the terms 1/‖<bold>x</bold><italic><sub>j</sub> −</italic> <bold>x</bold><italic><sub>k</sub></italic>‖ first so that we would require <italic>M</italic> DIVs, 2<italic>M</italic> MULs, and 2<italic>M</italic> ADDs. We exchange <italic>M</italic> DIVs by 2<italic>M</italic> MULs under the typical case that MULs have a much lower complexity than DIVs, particularly for the case of floating point operations. The complexity for the Jacobian estimate is also shown on <xref ref-type="table" rid="t1-sensors-12-00839">Table 1</xref>.</p>
<p>Once these two quantities have been evaluated, their use trickles down through the algorithm. The costs for the different steps or operations is presented in the remaining part of <xref ref-type="table" rid="t1-sensors-12-00839">Table 1</xref>. We just make two more remarks on the algorithm complexity. First, note that the approximation to the Hessian matrix 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">J</mml:mi></mml:mrow>
<mml:mi>K</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">J</mml:mi></mml:mrow>
<mml:mi>K</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>
<disp-formula id="FD35">
<label>(35)</label>
<mml:math display="block">
<mml:mrow>
<mml:msup>
<mml:mo>∇</mml:mo>
<mml:mn>2</mml:mn></mml:msup>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">J</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">J</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>M</mml:mi></mml:munderover>
<mml:mrow>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>M</mml:mi></mml:munderover>
<mml:mrow>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>M</mml:mi></mml:munderover>
<mml:mrow>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>M</mml:mi></mml:munderover>
<mml:mrow>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></disp-formula>is of size 2 × 2 which makes its inversion trivial when computing the LM step Δ<italic><sub>LM</sub></italic>, as shown in <xref ref-type="table" rid="t5-sensors-12-00839">Algorithm 1</xref>.
<disp-formula id="FD36">
<label>(36)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>Δ</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">LM</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">J</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">J</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mi mathvariant="bold">I</mml:mi></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">J</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">R</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:math></disp-formula>where the gradient of the function 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">J</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">R</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is given by
<disp-formula id="FD37">
<label>(37)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∇</mml:mo></mml:mrow>
<mml:mi>f</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">J</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">R</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>M</mml:mi></mml:munderover>
<mml:mrow>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>⋅</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">kj</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>M</mml:mi></mml:munderover>
<mml:mrow>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>⋅</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">kj</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></disp-formula></p>
<p>Second, satisfying the sufficient decrease condition is also an iterative procedure where different values of α<italic><sub>k</sub></italic> are tested. We identify <italic>T</italic> as the number of iterations needed to satisfy this condition. As we discuss later, we will model <italic>T</italic> as a random variable.</p>
<p>The last row of the table provides the total which we identify as <italic>T<sub>ADD</sub></italic>, <italic>T<sub>MUL</sub></italic>, <italic>T<sub>DIV</sub></italic> and <italic>T<sub>SQRT</sub></italic> respectively. These numbers are the operations for a single iteration of the LM algorithm. Then, for <italic>K</italic> iterations we have the total number of operations to be <italic>K<sub>ADD</sub></italic> = <italic>K · T<sub>ADD</sub></italic>, <italic>K<sub>MUL</sub></italic> = <italic>K · T<sub>MUL</sub></italic>, <italic>K<sub>DIV</sub></italic> = <italic>K · T<sub>DIV</sub></italic>, and <italic>K<sub>SQRT</sub></italic> = <italic>K · T<sub>SQRT</sub></italic> .</p>
<p>Since the values of <italic>T</italic> and <italic>K</italic> are random variables, then a more convenient approach to quantify the number of operations would be to look at the average number of operations, <italic>i.e.</italic>, the expected value. It is intuitive to assume that <italic>T</italic> and <italic>K</italic> are independent, and that for a given network their distributions will be identical. Hence, we define
<disp-formula id="FD38">
<label>(38)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ADD</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi mathvariant="italic">ADD</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mi>K</mml:mi>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi mathvariant="italic">ADD</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mi>K</mml:mi>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>M</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>4</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mn>15</mml:mn>
<mml:mi>M</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>7</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD39">
<label>(39)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">MUL</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi mathvariant="italic">MUL</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mi>K</mml:mi>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi mathvariant="italic">MUL</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mi>K</mml:mi>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>M</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mn>10</mml:mn>
<mml:mi>M</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>15</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD40">
<label>(40)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">DIV</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi mathvariant="italic">DIV</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mi>K</mml:mi>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>M</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD41">
<label>(41)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">SQRT</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi mathvariant="italic">SQRT</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mi>K</mml:mi>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>M</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where ε{<italic>x</italic>} represents the expected value of the random variable <italic>x</italic>. Finally, we can quantify the total complexity of the LM algorithm by converting operations to a common denominator and compute a single representative number that can be used for comparison with other algorithms. The typical way to quantify operations is to use the number of processor cycles (on the average) required to complete each type of operation. Let us define <italic>N<sub>ADD</sub></italic>, <italic>N<sub>MUL</sub></italic>, <italic>N<sub>DIV</sub></italic>, and <italic>N<sub>SQRT</sub></italic> as the number of cycles required for floating addition (or subtraction), a multiplication, a division, and square root, respectively. We should note that these numbers depend on the micro-processor and hardware used by the mote and the compiler tools used to develop the software. Hence, in practice the best way to obtain these values is through code profiling using a cycle-accurate simulator. Moreover, as discussed in [<xref ref-type="bibr" rid="b44-sensors-12-00839">44</xref>], the number of task cycles can be used as part of models that measure energy consumption. Hence, as final measure of complexity for the LM algorithm we compute the total number of cycles as
<disp-formula id="FD42">
<label>(42)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi mathvariant="italic">LM</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi mathvariant="italic">ADD</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ADD</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi mathvariant="italic">MUL</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">MUL</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi mathvariant="italic">DIV</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">DIV</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi mathvariant="italic">SQRT</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">SQRT</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></disp-formula></p></sec>
<sec sec-type="methods">
<label>6.2.</label>
<title>Computational Analysis of the Bilateration Algorithm</title>
<p>The bilateration algorithm is very simple and non-iterative. For <italic>M</italic> anchors, a sensor node picks 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:munder>
<mml:mi>M</mml:mi>
<mml:mn>2</mml:mn></mml:munder></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> pairs of sensors and computes the intersections of the imaginary circles around each anchor with a radius given between the anchor and the sensor node. These intersections are computed using geometry with a procedure described by <xref ref-type="disp-formula" rid="FD24a">Equations (24</xref>–<xref ref-type="disp-formula" rid="FD28a">28)</xref>. Then, a cluster with half of the computed intersections is found, providing an indication of the area where the node position is located. The number of operations required to compute two intersections is presented in <xref ref-type="table" rid="t2-sensors-12-00839">Table 2</xref>.</p>
<p>Since this process is repeated 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi mathvariant="normal">Q</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:munder>
<mml:mi>M</mml:mi>
<mml:mn>2</mml:mn></mml:munder></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> times, then the final row reflects the total operations multiplied by this factor. As the intersections are computed, the search for the cluster is performed by <xref ref-type="disp-formula" rid="FD29">Equations (29)</xref> and <xref ref-type="disp-formula" rid="FD30">(30)</xref>. Since there are 2<italic>Q</italic> intersections, we need to select the <italic>Q</italic> that cluster together (<italic>i.e.</italic>, eliminate mirrors). The clustering is based on looking at the distance between all possible pairs of intersections and selecting those that exhibit the closets distances among themselves. This requires the calculation of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>Q</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mi>Q</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:mfrac></mml:mrow></mml:math></inline-formula> squared norms, and the use of a clustering or sorting algorithm to find the smallest <italic>Q</italic> elements from the list of <italic>S</italic> norm values. Taking advantage of the structure of the location points (<italic>i.e.</italic>, the two intersections from the same anchor pair are not compared), we can expect an average complexity of <italic>O</italic>(<italic>S</italic>) sorting steps using an algorithm like Quickselect algorithm [<xref ref-type="bibr" rid="b45-sensors-12-00839">45</xref>]. Hence the final computational cost for the bilateration algorithm is presented in <xref ref-type="table" rid="t3-sensors-12-00839">Table 3</xref>.</p>
<p>As with the LM algorithm, we close this subsection by providing an expression in terms of processor cycles. Using the same characterization for all main operations of the algorithm, we can provide a total cycle count that can be directly compared with other algorithms. Obviously, a lower cycle implies lower complexity when the hardware and software development tools are identical. The expression for total cycles is
<disp-formula id="FD43">
<label>(43)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi mathvariant="italic">BL</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi mathvariant="italic">ADD</mml:mi></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>11</mml:mn>
<mml:mi>Q</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>3</mml:mn>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi mathvariant="italic">MUL</mml:mi></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>12</mml:mn>
<mml:mi>Q</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi mathvariant="italic">DIV</mml:mi></mml:msub>
<mml:mo>.</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mi>Q</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi mathvariant="italic">SQRT</mml:mi></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>Q</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi mathvariant="italic">SORT</mml:mi></mml:msub></mml:mrow></mml:math></disp-formula></p>
<p>It is easy to see that the bilateration scheme uses a significantly less number of cycle for all operations. Experimental data in [<xref ref-type="bibr" rid="b45-sensors-12-00839">45</xref>] indicates that the cycle count for the complete sorting step with the <italic>QuickSelect</italic> algorithm with a pipelined architecture can be achieved within 2500 and 3000 clock cycles.</p>
<p>To complete the computational complexity analysis, we need the number of CPU cycles required for the four basic operations as floating point operations. These values are highly dependent on the architecture of the mote processor. An extensive study in [<xref ref-type="bibr" rid="b46-sensors-12-00839">46</xref>] provides good representative values for processors with some level of hardware support. The values are summarized on <xref ref-type="table" rid="t5-sensors-12-00839">Table 4</xref>, and it shows the relation between basic operations and CPU cycles.</p>
<p>Next, we use <xref ref-type="table" rid="t1-sensors-12-00839">Tables 1</xref> and <xref ref-type="table" rid="t2-sensors-12-00839">2</xref> to obtain the number of CPU cycles required by each initialization stage, BL and LM respectively. For the LM initialization stage we are using M = 4 anchors and the random variables <italic>T</italic> and <italic>k</italic>. We recall that <italic>k</italic> is the number of iterations spent by the LM algorithm to find a solution. These values are obtained through simulations where ε{<italic>T</italic>} = 2 and ε{<italic>k</italic>} = 13. In this way the total cycles required by the LM algorithm according to <xref ref-type="disp-formula" rid="FD42">Equation (42)</xref> is given by
<disp-formula id="FD44">
<label>(44)</label>
<mml:math display="block">
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi mathvariant="italic">LM</mml:mi></mml:msub></mml:mtd>
<mml:mtd>
<mml:mo>=</mml:mo>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>M</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>4</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mn>15</mml:mn>
<mml:mi>M</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>7</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>11</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>M</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>ε</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo stretchy="false">}</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mn>12</mml:mn>
<mml:mi>M</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>18</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>25</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>M</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>112</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>M</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>4</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>119</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mn>63063</mml:mn>
<mml:mo> </mml:mo>
<mml:mtext>cycles</mml:mtext></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>Similarly, the total number of cycles used by the BL stage is given by <xref ref-type="disp-formula" rid="FD43">Equation (43)</xref> as
<disp-formula id="FD45">
<label>(45)</label>
<mml:math display="block">
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi mathvariant="italic">BL</mml:mi></mml:msub>
<mml:mo>=</mml:mo></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>11</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>11</mml:mn>
<mml:mi>Q</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>3</mml:mn>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>25</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>12</mml:mn>
<mml:mi>Q</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>112</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mi>Q</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>119</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>Q</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>N</mml:mi>
<mml:mi mathvariant="italic">SORT</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mn>14198</mml:mn>
<mml:mo> </mml:mo>
<mml:mtext>cycles</mml:mtext></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>where <italic>Q</italic> = 6<italic>, S</italic> = 66, and <italic>N<sub>SORT</sub></italic> = 2750. The value for <italic>N<sub>SORT</sub></italic> represents the total number of cycles required to perform the sorting step of the BL algorithm. This step can be performed using efficiently the Quickselect algorithm [<xref ref-type="bibr" rid="b47-sensors-12-00839">47</xref>]. As expected, the LM algorithm consumes more energy in the initialization process than the BL scheme. However, the former represents a better choice when accuracy is required. Therefore, the BL can be an alternative localization scheme when a good tradeoff between accuracy and energy consumption is required on the initial estimates.</p></sec></sec>
<sec sec-type="conclusions">
<label>7.</label>
<title>Conclusions</title>
<p>In this research, we analyzed a localization algorithm that can be realistically deployed over real WSNs which can provide good accuracy performance with low computational complexity. The bilateration algorithm is a distributed scheme that can be used as an initialization stage to find an initial set of locations.</p>
<p>Most initialization algorithms demand very high computing power to provide a set of initial estimates for an N-node WSN. The analyzed algorithm is capable to provide competitive initial estimates at low processing power. This approach is basically formed by two stages. The first stage consists of finding all circle intersections formed by anchor positions and their respective range estimates to a sensor node, obtained by ranging techniques like <italic>ToA</italic> or <italic>RSS</italic>. The great advantage of this approach is to use “closed-formulas” to find all circle intersections (<italic>i.e.</italic>, candidate positions) using two anchors at a time. In the second stage, the algorithm uses a sorting algorithm to find the cluster of candidate positions that tend to be closer to each other around the true location. The cluster with the nearby candidate positions is averaged to finally obtain the initial location. This scheme can be used by any WSN localization algorithm that needs initial approximations. Also, it is implementable in constrained devices with low processing and memory capabilities (<italic>i.e.</italic>, motes). Results show that this initialization algorithm is well behaved (e.g., computational and accuracy performance) in comparison with other well known algorithms like LS methodologies.</p>
<p>Finally, we are interested in exploring iteratively, at the refinement process, the Levenberg–Marquardt approach for node localization. We believe that this methodology can play a crucial role in producing excellent position estimates with high accuracy and low energy consumption due to the rate of convergence associated with this optimization technique.</p></sec></body>
<back>
<ack>
<p>The authors wish to express their gratitude to the anonymous reviewers for their invaluable comments.</p></ack>
<ref-list>
<title>References</title>
<ref id="b1-sensors-12-00839"><label>1.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Zhong</surname><given-names>Z.</given-names></name><name><surname>Wang</surname><given-names>D.</given-names></name><name><surname>He</surname><given-names>T.</given-names></name></person-group><article-title>Sensor Node Localization Using Uncontrolled Events</article-title><conf-name>Proceedings of the 28th International Conference on Distributed Computing Systems (ICDCS ’08)</conf-name><conf-loc>Beijing, China</conf-loc><conf-date>17–20 June 2008</conf-date><fpage>438</fpage><lpage>445</lpage></citation></ref>
<ref id="b2-sensors-12-00839"><label>2.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Youssef</surname><given-names>A.</given-names></name><name><surname>Youssef</surname><given-names>M.</given-names></name></person-group><article-title>A Taxonomy of Localization Schemes for Wireless Sensor Networks</article-title><conf-name>Proceedings of the International Conference on Wireless Networks</conf-name><conf-loc>Las Vegas, NV, USA</conf-loc><conf-date>25–28 June 2007</conf-date></citation></ref>
<ref id="b3-sensors-12-00839"><label>3.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Chan</surname><given-names>F.</given-names></name><name><surname>So</surname><given-names>H.</given-names></name></person-group><article-title>Accurate distributed range-based positioning algorithm for wireless sensor networks</article-title><source>IEEE Trans. Signal Process</source><year>2009</year><volume>57</volume><fpage>4100</fpage><lpage>4105</lpage><pub-id pub-id-type="doi">10.1109/TSP.2009.2022354</pub-id></citation></ref>
<ref id="b4-sensors-12-00839"><label>4.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Niculescu</surname><given-names>D.</given-names></name><name><surname>Nath</surname><given-names>B.</given-names></name></person-group><article-title>DV based positioning in <italic>ad hoc</italic> networks</article-title><source>Telecommun. Syst</source><year>2003</year><volume>22</volume><fpage>267</fpage><lpage>280</lpage><pub-id pub-id-type="doi">10.1023/A:1023403323460</pub-id></citation></ref>
<ref id="b5-sensors-12-00839"><label>5.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>He</surname><given-names>T.</given-names></name><name><surname>Huang</surname><given-names>C.</given-names></name><name><surname>Blum</surname><given-names>B.</given-names></name><name><surname>Stankovic</surname><given-names>J.</given-names></name><name><surname>Abdelzaher</surname><given-names>T.</given-names></name></person-group><article-title>Range-free localization and its impact on large scale sensor networks</article-title><source>ACM Trans. Embed. Comput. Syst</source><year>2005</year><volume>4</volume><fpage>877</fpage><lpage>906</lpage><pub-id pub-id-type="doi">10.1145/1113830.1113837</pub-id></citation></ref>
<ref id="b6-sensors-12-00839"><label>6.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Stoleru</surname><given-names>R.</given-names></name><name><surname>Stankovic</surname><given-names>J.</given-names></name></person-group><article-title>Probability Grid: A Location Estimation Scheme for Wireless Sensor Networks</article-title><conf-name>Proceedings of the 2004 1st Annual IEEE Communications Society Conference on Sensor and Ad Hoc Communications and Networks (IEEE SECON ’04)</conf-name><conf-loc>Santa Clara, CA, USA</conf-loc><conf-date>4–7 October 2004</conf-date><fpage>430</fpage><lpage>438</lpage></citation></ref>
<ref id="b7-sensors-12-00839"><label>7.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Goldenberg</surname><given-names>D.</given-names></name><name><surname>Bihler</surname><given-names>P.</given-names></name><name><surname>Cao</surname><given-names>M.</given-names></name><name><surname>Fang</surname><given-names>J.</given-names></name><name><surname>Anderson</surname><given-names>B.</given-names></name><name><surname>Morse</surname><given-names>A.</given-names></name><name><surname>Yang</surname><given-names>Y.</given-names></name></person-group><article-title>Localization in Sparse Networks Using Sweeps</article-title><conf-name>Proceedings of the 12th Annual International Conference on Mobile Computing and Networking</conf-name><conf-loc>Los Angeles, CA, USA</conf-loc><conf-date>24–29 September 2006</conf-date><fpage>110</fpage><lpage>121</lpage></citation></ref>
<ref id="b8-sensors-12-00839"><label>8.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Akyildiz</surname><given-names>I.</given-names></name><name><surname>Su</surname><given-names>W.</given-names></name><name><surname>Sankarasubramaniam</surname><given-names>Y.</given-names></name><name><surname>Cayirci</surname><given-names>E.</given-names></name></person-group><article-title>A survey on sensor networks</article-title><source>IEEE Commun. Mag</source><year>2002</year><volume>40</volume><fpage>102</fpage><lpage>114</lpage></citation></ref>
<ref id="b9-sensors-12-00839"><label>9.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gezici</surname><given-names>S.</given-names></name></person-group><article-title>A survey on wireless position estimation</article-title><source>Wirel. Pers. Commun</source><year>2008</year><volume>44</volume><fpage>263</fpage><lpage>282</lpage><pub-id pub-id-type="doi">10.1007/s11277-007-9375-z</pub-id></citation></ref>
<ref id="b10-sensors-12-00839"><label>10.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Li</surname><given-names>M.</given-names></name><name><surname>Liu</surname><given-names>Y.</given-names></name></person-group><article-title>Rendered path: Range-free localization in anisotropic sensor networks with holes</article-title><source>IEEE/ACM Trans. Netw</source><year>2010</year><volume>18</volume><fpage>320</fpage><lpage>332</lpage><pub-id pub-id-type="doi">10.1109/TNET.2009.2024940</pub-id></citation></ref>
<ref id="b11-sensors-12-00839"><label>11.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Jordt</surname><given-names>G.</given-names></name><name><surname>Baldwin</surname><given-names>R.</given-names></name><name><surname>Raquet</surname><given-names>J.</given-names></name><name><surname>Mullins</surname><given-names>B.</given-names></name></person-group><article-title>Energy cost and error performance of range-aware, anchor-free localization algorithms</article-title><source>Ad Hoc Netw</source><year>2008</year><volume>6</volume><fpage>539</fpage><lpage>559</lpage><pub-id pub-id-type="doi">10.1016/j.adhoc.2007.04.004</pub-id></citation></ref>
<ref id="b12-sensors-12-00839"><label>12.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Mao</surname><given-names>G.</given-names></name><name><surname>Fidan</surname><given-names>B.</given-names></name><name><surname>Anderson</surname><given-names>B.</given-names></name></person-group><article-title>Wireless sensor network localization techniques</article-title><source>Comput. Netw</source><year>2007</year><volume>51</volume><fpage>2529</fpage><lpage>2553</lpage><pub-id pub-id-type="doi">10.1016/j.comnet.2006.11.018</pub-id></citation></ref>
<ref id="b13-sensors-12-00839"><label>13.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Stoleru</surname><given-names>R.</given-names></name><name><surname>He</surname><given-names>T.</given-names></name><name><surname>Stankovic</surname><given-names>J.</given-names></name></person-group><article-title>Range-Free Localization</article-title><source>Secure Localization and Time Synchronization for Wireless Sensor and Ad Hoc Networks</source><publisher-name>Springer</publisher-name><publisher-loc>Berlin, Germany</publisher-loc><year>2007</year><fpage>3</fpage><lpage>31</lpage></citation></ref>
<ref id="b14-sensors-12-00839"><label>14.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Yu</surname><given-names>K.</given-names></name><name><surname>Guo</surname><given-names>Y.</given-names></name></person-group><article-title>Robust Localization in Multihop Wireless Sensor Networks</article-title><conf-name>Proceedings of the Vehicular Technology Conference (VTC Spring 2008)</conf-name><conf-loc>Singapore</conf-loc><conf-date>11–14 May 2008</conf-date><fpage>2819</fpage><lpage>2823</lpage></citation></ref>
<ref id="b15-sensors-12-00839"><label>15.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Moses</surname><given-names>R.</given-names></name><name><surname>Krishnamurthy</surname><given-names>D.</given-names></name><name><surname>Patterson</surname><given-names>R.</given-names></name></person-group><article-title>A self-localization method for wireless sensor networks</article-title><source>EURASIP J. Appl. Signal Process</source><year>2003</year><volume>4</volume><fpage>348</fpage><lpage>358</lpage></citation></ref>
<ref id="b16-sensors-12-00839"><label>16.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Doherty</surname><given-names>L.</given-names></name><name><surname>El Ghaoui</surname><given-names>L.</given-names></name></person-group><article-title>Convex Position Estimation in Wireless Sensor Networks</article-title><conf-name>Proceedings of the 20th Annual Joint Conference of the IEEE Computer and Communications Societies (INFOCOM ’01)</conf-name><conf-loc>Anchorage, AK, USA</conf-loc><conf-date>22–26 April 2001</conf-date><volume>3</volume><fpage>1655</fpage><lpage>1663</lpage></citation></ref>
<ref id="b17-sensors-12-00839"><label>17.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Chan</surname><given-names>F.</given-names></name><name><surname>So</surname><given-names>H.</given-names></name></person-group><article-title>Efficient weighted multidimensional scaling for wireless sensor network localization</article-title><source>IEEE Trans. Signal Process</source><year>2009</year><volume>57</volume><fpage>4548</fpage><lpage>4553</lpage><pub-id pub-id-type="doi">10.1109/TSP.2009.2024869</pub-id></citation></ref>
<ref id="b18-sensors-12-00839"><label>18.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Weng</surname><given-names>Y.</given-names></name><name><surname>Xiao</surname><given-names>W.</given-names></name><name><surname>Xie</surname><given-names>L.</given-names></name></person-group><article-title>Diffusion-based em algorithm for distributed estimation of gaussian mixtures in wireless sensor networks</article-title><source>Sensors</source><year>2011</year><volume>11</volume><fpage>6297</fpage><lpage>6316</lpage><pub-id pub-id-type="doi">10.3390/s110606297</pub-id><pub-id pub-id-type="pmid">22163956</pub-id></citation></ref>
<ref id="b19-sensors-12-00839"><label>19.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Liu</surname><given-names>J.</given-names></name><name><surname>Zhang</surname><given-names>Y.</given-names></name><name><surname>Zhao</surname><given-names>F.</given-names></name></person-group><article-title>Robust Distributed Node Localization with Error Management</article-title><conf-name>Proceedings of the 7th ACM International Symposium on Mobile Ad Hoc Networking and Computing</conf-name><conf-loc>Florence, Italy</conf-loc><conf-date>22–25 May 2006</conf-date><fpage>250</fpage><lpage>261</lpage></citation></ref>
<ref id="b20-sensors-12-00839"><label>20.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>TarrÃo</surname><given-names>P.</given-names></name><name><surname>Bernardos</surname><given-names>A.M.</given-names></name><name><surname>Casar</surname><given-names>J.R.</given-names></name></person-group><article-title>Weighted least squares techniques for improved received signal strength based localization</article-title><source>Sensors</source><year>2011</year><volume>11</volume><fpage>8569</fpage><lpage>8592</lpage><pub-id pub-id-type="doi">10.3390/s110908569</pub-id><pub-id pub-id-type="pmid">22164092</pub-id></citation></ref>
<ref id="b21-sensors-12-00839"><label>21.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Yang</surname><given-names>Z.</given-names></name><name><surname>Liu</surname><given-names>Y.</given-names></name></person-group><article-title>Quality of trilateration: Confidence-based iterative localization</article-title><source>IEEE Trans. Parallel Distrib. Syst</source><year>2009</year><volume>21</volume><fpage>631</fpage><lpage>640</lpage></citation></ref>
<ref id="b22-sensors-12-00839"><label>22.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Patwari</surname><given-names>N.</given-names></name><name><surname>Ash</surname><given-names>J.</given-names></name><name><surname>Kyperountas</surname><given-names>S.</given-names></name><name><surname>Hero</surname><given-names>A.</given-names></name><name><surname>Moses</surname><given-names>R.</given-names></name><name><surname>Correal</surname><given-names>N.</given-names></name></person-group><article-title>Locating the nodes</article-title><source>IEEE Signal Process. Mag</source><year>2005</year><volume>22</volume><fpage>54</fpage><lpage>69</lpage><pub-id pub-id-type="doi">10.1109/MSP.2005.1458287</pub-id></citation></ref>
<ref id="b23-sensors-12-00839"><label>23.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Andersen</surname><given-names>J.</given-names></name><name><surname>Rappaport</surname><given-names>T.</given-names></name><name><surname>Yoshida</surname><given-names>S.</given-names></name></person-group><article-title>Propagation measurements and models for wireless communications channels</article-title><source>IEEE Commun. Mag</source><year>1995</year><volume>33</volume><fpage>42</fpage><lpage>49</lpage><pub-id pub-id-type="doi">10.1109/35.339880</pub-id></citation></ref>
<ref id="b24-sensors-12-00839"><label>24.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Rappaport</surname><given-names>T.S.</given-names></name></person-group><source>Wireless Communications: Principles and Practice</source><publisher-name>Prentice Hall PTR</publisher-name><publisher-loc>Upper Saddle River, NJ, USA</publisher-loc><year>1996</year><volume>207</volume></citation></ref>
<ref id="b25-sensors-12-00839"><label>25.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Huang</surname><given-names>Y.</given-names></name><name><surname>Benesty</surname><given-names>J.</given-names></name><name><surname>Chen</surname><given-names>J.</given-names></name></person-group><source>Acoustic MIMO Signal Processing</source><publisher-name>Springer</publisher-name><publisher-loc>Berlin, Germany</publisher-loc><year>2006</year></citation></ref>
<ref id="b26-sensors-12-00839"><label>26.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Huang</surname><given-names>Y.</given-names></name><name><surname>Benesty</surname><given-names>J.</given-names></name><name><surname>Elko</surname><given-names>G.</given-names></name><name><surname>Mersereati</surname><given-names>R.</given-names></name></person-group><article-title>Real-time passive source localization: A practical linear-correction least-squares approach</article-title><source>IEEE Trans. Speech Audio Process</source><year>2002</year><volume>9</volume><fpage>943</fpage><lpage>956</lpage></citation></ref>
<ref id="b27-sensors-12-00839"><label>27.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Chen</surname><given-names>H.</given-names></name><name><surname>Sezaki</surname><given-names>K.</given-names></name><name><surname>Deng</surname><given-names>P.</given-names></name><name><surname>So</surname><given-names>H.</given-names></name></person-group><article-title>An Improved DV-Hop Localization Algorithm for Wireless Sensor Networks</article-title><conf-name>Proceedings of the 3rd IEEE Conference on Industrial Electronics and Applications (ICIEA ’08)</conf-name><conf-loc>Singapore</conf-loc><conf-date>3–5 June 2008</conf-date><fpage>1557</fpage><lpage>1561</lpage></citation></ref>
<ref id="b28-sensors-12-00839"><label>28.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Verdone</surname><given-names>R.</given-names></name><name><surname>Dardari</surname><given-names>D.</given-names></name><name><surname>Mazzini</surname><given-names>G.</given-names></name><name><surname>Conti</surname><given-names>A.</given-names></name></person-group><source>Wireless Sensor and Actuator Networks: Technologies, Analysis and Design</source><publisher-name>Elsevier</publisher-name><publisher-loc>Amsterdam, The Netherlands</publisher-loc><year>2008</year><fpage>211</fpage></citation></ref>
<ref id="b29-sensors-12-00839"><label>29.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Dennis</surname><given-names>J.</given-names></name><name><surname>Schnabel</surname><given-names>R.</given-names></name></person-group><source>Numerical Methods for Unconstrained Optimization and Nonlinear Equations</source><publisher-name>Society for Industrial Mathematics</publisher-name><publisher-loc>Englewood Cliffs, NJ, USA</publisher-loc><year>1996</year><fpage>227</fpage></citation></ref>
<ref id="b30-sensors-12-00839"><label>30.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Nocedal</surname><given-names>J.</given-names></name><name><surname>Wright</surname><given-names>S.</given-names></name></person-group><source>Numerical Optimization</source><publisher-name>Springer</publisher-name><publisher-loc>Berlin, Germany</publisher-loc><year>2006</year><fpage>8</fpage></citation></ref>
<ref id="b31-sensors-12-00839"><label>31.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Cheng</surname><given-names>B.</given-names></name><name><surname>Vandenberghe</surname><given-names>L.</given-names></name><name><surname>Yao</surname><given-names>K.</given-names></name></person-group><article-title>Distributed algorithm for node localization in wireless <italic>ad-hoc networks</italic></article-title><source>ACM Trans. Sens. Netw</source><year>2009</year><volume>6</volume><fpage>1</fpage><lpage>20</lpage></citation></ref>
<ref id="b32-sensors-12-00839"><label>32.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Costa</surname><given-names>J.A.</given-names></name><name><surname>Patwari</surname><given-names>N.</given-names></name><name><surname>Hero</surname><given-names>A.O.</given-names><suffix>III</suffix></name></person-group><article-title>Distributed weighted-multidimensional scaling for node localization in sensor networks</article-title><source>ACM Trans. Sensor Netw</source><year>2006</year><volume>2</volume><fpage>39</fpage><lpage>64</lpage><pub-id pub-id-type="doi">10.1145/1138127.1138129</pub-id></citation></ref>
<ref id="b33-sensors-12-00839"><label>33.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Delbos</surname><given-names>F.</given-names></name><name><surname>Gilbert</surname><given-names>J.</given-names></name><name><surname>Glowinski</surname><given-names>R.</given-names></name><name><surname>Sinoquet</surname><given-names>D.</given-names></name></person-group><article-title>Constrained optimization in seismic reflection tomography: A Gauss–Newton augmented Lagrangian approach</article-title><source>Geophys. J. Int</source><year>2006</year><volume>164</volume><fpage>670</fpage><lpage>684</lpage><pub-id pub-id-type="doi">10.1111/j.1365-246X.2005.02729.x</pub-id></citation></ref>
<ref id="b34-sensors-12-00839"><label>34.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Roweis</surname><given-names>S.</given-names></name></person-group><source>Levenberg-Marquardt Optimization</source><publisher-name>University Of Toronto</publisher-name><publisher-loc>Toronto, ON, Canada</publisher-loc><year>1996</year></citation></ref>
<ref id="b35-sensors-12-00839"><label>35.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Ye</surname><given-names>N.</given-names></name></person-group><source>The Handbook of Data Mining</source><publisher-name>Lawrence Erlbaum</publisher-name><publisher-loc>Mahwah, NJ, USA</publisher-loc><year>2003</year></citation></ref>
<ref id="b36-sensors-12-00839"><label>36.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Li</surname><given-names>X.</given-names></name><name><surname>Hua</surname><given-names>B.</given-names></name><name><surname>Shang</surname><given-names>Y.</given-names></name><name><surname>Xiong</surname><given-names>Y.</given-names></name></person-group><article-title>A robust localization algorithm in wireless sensor networks</article-title><source>Front. Comput. Sci. China</source><year>2008</year><volume>2</volume><fpage>438</fpage><lpage>450</lpage><pub-id pub-id-type="doi">10.1007/s11704-008-0018-7</pub-id></citation></ref>
<ref id="b37-sensors-12-00839"><label>37.</label><citation citation-type="web"><person-group person-group-type="author"><name><surname>Bourke</surname><given-names>P.</given-names></name></person-group><article-title>Intersection of Two Circles, 1997</article-title><comment>Available online: <ext-link xlink:href="http://local.wasp.uwa.edu.au/~pbourke/geometry/2circle/" ext-link-type="uri">http://local.wasp.uwa.edu.au/~pbourke/geometry/2circle/</ext-link> (accessed on 9 January 2010).</comment></citation></ref>
<ref id="b38-sensors-12-00839"><label>38.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Savvides</surname><given-names>A.</given-names></name><name><surname>Park</surname><given-names>H.</given-names></name><name><surname>Srivastava</surname><given-names>M.</given-names></name></person-group><article-title>The Bits and Flops of the N-Hop Multilateration Primitive for Node Localization Problems</article-title><conf-name>Proceedings of the 1st ACM International Workshop on Wireless Sensor Networks and Applications</conf-name><conf-loc>Atlanta, GA, USA</conf-loc><conf-date>28 September 2002</conf-date><fpage>112</fpage><lpage>121</lpage></citation></ref>
<ref id="b39-sensors-12-00839"><label>39.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Langendoen</surname><given-names>K.</given-names></name><name><surname>Reijers</surname><given-names>N.</given-names></name></person-group><article-title>Distributed localization in wireless sensor networks: A quantitative comparison</article-title><source>Comput. Netw</source><year>2003</year><volume>43</volume><fpage>499</fpage><lpage>518</lpage><pub-id pub-id-type="doi">10.1016/S1389-1286(03)00356-6</pub-id></citation></ref>
<ref id="b40-sensors-12-00839"><label>40.</label><citation citation-type="web"><comment>XST-AN019a, A.N. XBee and XBee-PRO OEM RF Module Antenna Considerations, 2005.Available online: <ext-link xlink:href="http://www.digi.com" ext-link-type="uri">http://www.digi.com</ext-link> (accessed on 9 January 2010).</comment></citation></ref>
<ref id="b41-sensors-12-00839"><label>41.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Cormen</surname><given-names>T.</given-names></name></person-group><source>Introduction to Algorithms</source><publisher-name>The MIT Press</publisher-name><publisher-loc>Cambridge, MA, USA</publisher-loc><year>2001</year><fpage>23</fpage></citation></ref>
<ref id="b42-sensors-12-00839"><label>42.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Schörghofer</surname><given-names>N.</given-names></name></person-group><source>The Third Branch of Physics: Essays in Scientific Computing</source><publisher-name>Nobert</publisher-name><publisher-loc>Hamburg, Germany</publisher-loc><year>2005</year><fpage>53</fpage><lpage>71</lpage></citation></ref>
<ref id="b43-sensors-12-00839"><label>43.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wang</surname><given-names>A.</given-names></name><name><surname>Chandrakasan</surname><given-names>A.</given-names></name></person-group><article-title>Energy-efficient DSPs for wireless sensor networks</article-title><source>IEEE Signal Process. Mag</source><year>2002</year><volume>19</volume><fpage>68</fpage><lpage>78</lpage><pub-id pub-id-type="doi">10.1109/MSP.2002.1012351</pub-id></citation></ref>
<ref id="b44-sensors-12-00839"><label>44.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Sinha</surname><given-names>A.</given-names></name><name><surname>Chandrakasan</surname><given-names>A.</given-names></name></person-group><article-title>Energy Aware Software</article-title><conf-name>Proceedings of the 13th International Conference on VLSI Design</conf-name><conf-loc>Calcutta, India</conf-loc><conf-date>3–7 January 2000</conf-date><fpage>50</fpage><lpage>55</lpage></citation></ref>
<ref id="b45-sensors-12-00839"><label>45.</label><citation citation-type="web"><article-title>TI-Algorithms. Optimized Sort Algorithms for DSP, 2011</article-title><comment>Available online: <ext-link xlink:href="http://processors.wiki.ti.com/index.php/Optimized_Sort_Algorithms_For_DSP" ext-link-type="uri">http://processors.wiki.ti.com/index.php/Optimized_Sort_Algorithms_For_DSP</ext-link> (accessed on 9 January 2012).</comment></citation></ref>
<ref id="b46-sensors-12-00839"><label>46.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Dietz</surname><given-names>H.</given-names></name><name><surname>Dieter</surname><given-names>B.</given-names></name><name><surname>Fisher</surname><given-names>R.</given-names></name><name><surname>Chang</surname><given-names>K.</given-names></name></person-group><article-title>Floating-Point Computation with Just Enough Accuracy</article-title><conf-name>Proceedings of the Computational Science (ICCS ’06)</conf-name><conf-loc>Reading, UK</conf-loc><conf-date>28–31 May 2006</conf-date><fpage>226</fpage><lpage>233</lpage></citation></ref>
<ref id="b47-sensors-12-00839"><label>47.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Mansi</surname><given-names>R.</given-names></name></person-group><article-title>Enhanced quicksort algorithm</article-title><source>Int. Arab J. Inform. Technol</source><year>2010</year><volume>7</volume><fpage>161</fpage><lpage>166</lpage></citation></ref></ref-list>
<sec sec-type="display-objects">
<title>Figures and Tables</title>
<fig id="f1-sensors-12-00839" position="float">
<label>Figure 1.</label>
<caption>
<p>Sensor <italic>s<sub>i</sub></italic> finding its two feasible solutions (<bold>g</bold><italic><sub>i</sub></italic>,<bold>ḡ</bold><italic><sub>i</sub></italic>) based on the anchors locations (<bold>q</bold><italic><sub>k</sub></italic>,<bold>q</bold><italic><sub>j</sub></italic>) and their respective anchor range measurements (<italic>R<sub>ij</sub></italic>,<italic>R<sub>ik</sub></italic>).</p></caption>
<graphic xlink:href="sensors-12-00839f1.gif"/></fig>
<fig id="f2-sensors-12-00839" position="float">
<label>Figure 2.</label>
<caption>
<p>Sensor <italic>s<sub>i</sub></italic> getting its initial estimation 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mn>0</mml:mn></mml:msubsup></mml:mrow></mml:math></inline-formula> from three non-collinear anchors (<italic>a<sub>j</sub>, a<sub>k</sub>, a<sub>ℓ</sub></italic>).</p></caption>
<graphic xlink:href="sensors-12-00839f2.gif"/></fig>
<fig id="f3-sensors-12-00839" position="float">
<label>Figure 3.</label>
<caption>
<p>Possible cases where the triangle inequality is not satisfied. (<bold>a</bold>) Case A; (<bold>b</bold>) Case B.</p></caption>
<graphic xlink:href="sensors-12-00839f3.gif"/></fig>
<fig id="f4-sensors-12-00839" position="float">
<label>Figure 4.</label>
<caption>
<p>A typical WSN composed by 96 unknown sensors with true positions=‘⋄’, 4 non-collinear anchors =‘▴’, and 96 initial estimates=‘♦’. Each unknown sensor, using an initialization algorithm, estimates its initial position by using four reference positions (<italic>A</italic><sub>1</sub>, <italic>A</italic><sub>2</sub>, <italic>A</italic><sub>3</sub>, and <italic>A</italic><sub>4</sub>) and their respective estimated distances.</p></caption>
<graphic xlink:href="sensors-12-00839f4.gif"/></fig>
<fig id="f5-sensors-12-00839" position="float">
<label>Figure 5.</label>
<caption>
<p>Position estimates provided by different initialization algorithms.</p></caption>
<graphic xlink:href="sensors-12-00839f5.gif"/></fig>
<table-wrap id="t1-sensors-12-00839" position="float">
<label>Table 1.</label>
<caption>
<p>LM Cost Functions.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle"><bold>Title</bold></th>
<th align="center" valign="middle"><bold>ADD</bold></th>
<th align="center" valign="middle"><bold>MUL</bold></th>
<th align="center" valign="middle"><bold>DIV</bold></th>
<th align="center" valign="middle"><bold>SQRT</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top"><bold>R</bold><italic><sub>k</sub></italic></td>
<td align="center" valign="top">4<italic>M</italic></td>
<td align="center" valign="top">2<italic>M</italic></td>
<td align="center" valign="top">0</td>
<td align="center" valign="top"><italic>M</italic></td></tr>
<tr>
<td align="center" valign="top"><bold>J</bold><italic><sub>k</sub></italic></td>
<td align="center" valign="top">5<italic>M</italic></td>
<td align="center" valign="top">4<italic>M</italic></td>
<td align="center" valign="top"><italic>M</italic></td>
<td align="center" valign="top"><italic>M</italic></td></tr>
<tr>
<td align="center" valign="top"><bold>H</bold><italic><sub>k</sub></italic></td>
<td align="center" valign="top">3<italic>M −</italic> 3</td>
<td align="center" valign="top">3<italic>M</italic></td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top"><italic>M′<sub>f</sub></italic></td>
<td align="center" valign="top">2<italic>M−</italic>2</td>
<td align="center" valign="top">2<italic>M</italic></td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top"><italic>M<sub>f</sub></italic></td>
<td align="center" valign="top"><italic>M−</italic>1</td>
<td align="center" valign="top"><italic>M</italic> + 1</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top"><italic>μ<sub>k</sub></italic></td>
<td align="center" valign="top">3</td>
<td align="center" valign="top">3</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">1</td></tr>
<tr>
<td align="center" valign="top">
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">H</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula></td>
<td align="center" valign="top">3</td>
<td align="center" valign="top">6</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top">Δ<italic><sub>LM</sub></italic></td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">4</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top">Sufficient Decrease</td>
<td align="center" valign="top"><italic>T</italic> (<italic>M</italic> + 4)</td>
<td align="center" valign="top"><italic>T</italic> (<italic>M</italic> + 2)</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top">Update</td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">2</td></tr>
<tr>
<td align="center" valign="top">Stopping Condition</td>
<td align="center" valign="top">3</td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">1</td></tr>
<tr>
<td align="left" valign="bottom" colspan="5">
<hr/></td></tr>
<tr>
<td align="center" valign="middle">Total</td>
<td align="center" valign="middle">(<italic>M</italic> + 4)<italic>T</italic> + 15<italic>M</italic> + 7</td>
<td align="center" valign="middle">(<italic>M</italic> + 2)<italic>T</italic> + 12<italic>M</italic> + 18</td>
<td align="center" valign="middle"><italic>M</italic> + 1</td>
<td align="center" valign="middle">2<italic>M</italic> + 4</td></tr></tbody></table></table-wrap>
<table-wrap id="t2-sensors-12-00839" position="float">
<label>Table 2.</label>
<caption>
<p>Bilateration Cost Operations.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle"><bold>Operations</bold></th>
<th align="center" valign="middle"><bold>ADD</bold></th>
<th align="center" valign="middle"><bold>MUL</bold></th>
<th align="center" valign="middle"><bold>DIV</bold></th>
<th align="center" valign="middle"><bold>SQRT</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top"><italic>d</italic></td>
<td align="center" valign="top">3</td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">1</td></tr>
<tr>
<td align="center" valign="top"><italic>d<sub>jt</sub></italic></td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">5</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top"><italic>h</italic></td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">1</td></tr>
<tr>
<td align="center" valign="top">
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mi>h</mml:mi>
<mml:mi>d</mml:mi></mml:mfrac></mml:mrow></mml:math></inline-formula></td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top"><bold>f</bold><italic><sub>t</sub></italic></td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top"><bold>x</bold><italic><sub>i</sub></italic></td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top"><bold>x̄</bold><italic><sub>i</sub></italic></td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top"><bold>y</bold><italic><sub>i</sub></italic></td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top"><bold>ȳ</bold><italic><sub>i</sub></italic></td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top">Total (2 circle intersections)</td>
<td align="center" valign="top">11</td>
<td align="center" valign="top">12</td>
<td align="center" valign="top">3</td>
<td align="center" valign="top">2</td></tr>
<tr>
<td align="center" valign="top">Total <italic>Q</italic> node combinations</td>
<td align="center" valign="top">11<italic>Q</italic></td>
<td align="center" valign="top">12<italic>Q</italic></td>
<td align="center" valign="top">3<italic>Q</italic></td>
<td align="center" valign="top">2<italic>Q</italic></td></tr></tbody></table></table-wrap>
<table-wrap id="t3-sensors-12-00839" position="float">
<label>Table 3.</label>
<caption>
<p>Final Computational Cost for the Bilateration Scheme.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle"><bold>Action</bold></th>
<th align="center" valign="middle"><bold>ADD</bold></th>
<th align="center" valign="middle"><bold>MUL</bold></th>
<th align="center" valign="middle"><bold>DIV</bold></th>
<th align="center" valign="middle"><bold>SQRT</bold></th>
<th align="center" valign="middle"><bold>SORT</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top">Circle Intersections</td>
<td align="center" valign="top">11<italic>Q</italic></td>
<td align="center" valign="top">12<italic>Q</italic></td>
<td align="center" valign="top">3<italic>Q</italic></td>
<td align="center" valign="top">2<italic>Q</italic></td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top">Squared Norms</td>
<td align="center" valign="top">3S</td>
<td align="center" valign="top">2S</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top">Number of Comparisons</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top"><italic>O</italic>(<italic>S</italic>)</td></tr></tbody></table></table-wrap>
<table-wrap id="t4-sensors-12-00839" position="float">
<label>Table 4.</label>
<caption>
<p>Operation cycle counts.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle"><bold>ADD</bold></th>
<th align="center" valign="middle"><bold>MUL</bold></th>
<th align="center" valign="middle"><bold>DIV</bold></th>
<th align="center" valign="middle"><bold>SQRT</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="middle">11</td>
<td align="center" valign="middle">25</td>
<td align="center" valign="middle">112</td>
<td align="center" valign="middle">119</td></tr></tbody></table></table-wrap></sec></back></article>
