Advanced Dead Reckoning

Dead reckoning (DR) is navigation by calculation from a known position using course and distance traveled. This module covers the mathematics of error propagation, position uncertainty, and professional DR techniques used in aviation and maritime navigation.

Etymology and History

"Dead" reckoning derives from "deduced reckoning" (ded. reckoning → dead reckoning), not from navigating to your death.

Historical context: * 1500s: Columbus used DR across the Atlantic * 1700s: Traverse tables enabled precise plotting * 1900s: E6B flight computers mechanized DR * Today: DR provides backup to GPS and validates electronic fixes

DR is not obsolete. When GPS fails, satellites are jammed, or electronics die, DR is your survival skill. Every navigator must master it.

Core Principles

The DR Position

A DR position is estimated based on: 1. Last known (fixed) position 2. Course steered (direction) 3. Speed (rate of travel) 4. Time elapsed

\[\text{Position}_{DR} = \text{Position}_{last} + \text{(Course} \times \text{Distance)}\]

Fundamental Equations

Distance traveled:

\[d = v \times t\]

Where: - d = distance (nm, km, or m) - v = speed (knots, km/h, m/s) - t = time

Position update (simple rectangular):

\[\Delta \text{Lat} = d \times \cos(\text{Course})\]
\[\Delta \text{Lon} = \frac{d \times \sin(\text{Course})}{\cos(\text{Lat})}\]

The longitude correction \(\frac{1}{\cos(\text{Lat})}\) accounts for meridian convergence at higher latitudes.


Mathematical Error Analysis

Sources of Error

Source Typical Error Cumulative?

Compass deviation

±2-5°

Yes

Compass reading

±1-2°

Yes

Speed estimation

±3-10%

Yes

Current/wind (unknown)

Variable

Yes

Time measurement

±1%

Minimal

Initial position

±0-500m

No (constant)

Error Propagation Model

After traveling distance \(d\) on course \(\theta\) with angular error \(\sigma_\theta\) and distance error \(\sigma_d\):

Cross-track error (perpendicular to course):

\[\sigma_{cross} = d \times \sin(\sigma_\theta) \approx d \times \sigma_\theta \text{ (for small angles in radians)}\]

Along-track error (parallel to course):

\[\sigma_{along} = \sigma_d\]

Position error (combined):

\[\sigma_{position} = \sqrt{\sigma_{cross}^2 + \sigma_{along}^2}\]

The Circle of Uncertainty

Your DR position lies within a circle of uncertainty:

           × Actual position (unknown)
         ╱
       ╱
      ╭───────────────────╮
     ╱                     ╲
    │                       │
    │      ⊕ DR position    │  Radius = position error
    │                       │
     ╲                     ╱
      ╰───────────────────╯

Radius calculation:

For typical values: - Angular error: 3° = 0.052 radians - Distance error: 5%

After 10 km:

\[\sigma_{cross} = 10,000 \times 0.052 = 520\text{m}\]
\[\sigma_{along} = 10,000 \times 0.05 = 500\text{m}\]
\[\sigma_{position} = \sqrt{520^2 + 500^2} = 722\text{m}\]

Error Growth Over Multiple Legs

For n consecutive legs with independent errors:

\[\sigma_{total} = \sqrt{\sum_{i=1}^{n} \sigma_i^2}\]

This is not linear - errors compound by root-sum-square, not addition.

Example: 5-leg course, each leg 2km, 5% distance error
\[\sigma_{per leg} = 2000 \times 0.05 = 100\text{m}\]
\[\sigma_{total} = \sqrt{5 \times 100^2} = \sqrt{50000} = 224\text{m}\]

Not 500m (linear sum), but 224m (RSS sum).

However, angular errors compound differently - they cause drift in one direction, not random scatter.


Multi-Leg DR Plotting

Plotting Sheet Method

For each leg, record:

LEG | TIME START | COURSE | SPEED | TIME END | DISTANCE | DR POSITION
----|------------|--------|-------|----------|----------|------------
 1  | 0800       | 045°   | 5 kt  | 0830     | 2.5 nm   |
 2  | 0830       | 090°   | 4 kt  | 0915     | 3.0 nm   |
 3  | 0915       | 135°   | 6 kt  | 0945     | 3.0 nm   |

Rectangular Coordinates

Convert polar (course + distance) to rectangular (ΔN, ΔE):

\[\Delta N = d \times \cos(\theta)\]
\[\Delta E = d \times \sin(\theta)\]

Where θ is measured from north, clockwise.

Worked Example

Leg 1: Course 045°, Distance 2.5 nm

\[\Delta N_1 = 2.5 \times \cos(45°) = 2.5 \times 0.707 = 1.77\text{ nm}\]
\[\Delta E_1 = 2.5 \times \sin(45°) = 2.5 \times 0.707 = 1.77\text{ nm}\]

Leg 2: Course 090°, Distance 3.0 nm

\[\Delta N_2 = 3.0 \times \cos(90°) = 3.0 \times 0 = 0\text{ nm}\]
\[\Delta E_2 = 3.0 \times \sin(90°) = 3.0 \times 1 = 3.0\text{ nm}\]

Leg 3: Course 135°, Distance 3.0 nm

\[\Delta N_3 = 3.0 \times \cos(135°) = 3.0 \times (-0.707) = -2.12\text{ nm}\]
\[\Delta E_3 = 3.0 \times \sin(135°) = 3.0 \times 0.707 = 2.12\text{ nm}\]

Total displacement:

\[\Delta N_{total} = 1.77 + 0 + (-2.12) = -0.35\text{ nm (South)}\]
\[\Delta E_{total} = 1.77 + 3.0 + 2.12 = 6.89\text{ nm (East)}\]

Course Made Good:

\[\text{CMG} = \arctan\left(\frac{\Delta E}{\Delta N}\right) = \arctan\left(\frac{6.89}{-0.35}\right)\]

Since ΔN < 0 and ΔE > 0, we’re in the SE quadrant:

\[\text{CMG} = 180° - \arctan\left(\frac{6.89}{0.35}\right) = 180° - 87.1° = 92.9° \approx 093°\]

Wait, let me recalculate. If ΔN is negative (south) and ΔE is positive (east), the angle from north is:

\[\theta = \arctan\left(\frac{6.89}{-0.35}\right) = -87.1°\]

Since this is negative, add 180°:

\[\text{CMG} = -87.1° + 180° = 92.9° \text{ or } + 360° = 272.9°\]

Actually, for SE quadrant (ΔN<0, ΔE>0):

\[\text{CMG} = 180° - |\arctan\left(\frac{|\Delta E|}{|\Delta N|}\right)| = 180° - 87.1° = 92.9°\]

Hmm, that’s not right either. Let me be more careful.

With ΔN = -0.35 (south) and ΔE = 6.89 (east): The direction is almost due east, slightly south.

Using atan2:

\[\text{CMG} = \text{atan2}(6.89, -0.35) = 92.9° \text{ (from north, clockwise)}\]

That makes sense - almost 090° (east) with a slight southward component.

Distance Made Good:

\[\text{DMG} = \sqrt{(-0.35)^2 + 6.89^2} = \sqrt{0.12 + 47.47} = 6.90\text{ nm}\]

Traverse Table Method

Traditional traverse tables provide pre-computed values for ΔN and ΔE (called "Departure" and "Latitude") for each degree of course and distances.

Modern calculation replaces tables with calculators, but understanding the principle remains essential.


Set and Drift

Concept

Set = direction the current/wind pushes you (true direction) Drift = rate of current/wind (speed)

Your Course Made Good (CMG) differs from your Course Steered due to set and drift.

          N
          ↑
          │
     Set  │  Heading
   (water │ (through water)
   track) │ ↗
          │↗
          ↗ CMG (ground track)
         ╱
        ╱
       ↙ Current/Wind

Vector Triangle

\[\vec{V}_{ground} = \vec{V}_{heading} + \vec{V}_{current}\]

Where: - \(\vec{V}_{ground}\) = speed and direction over ground (CMG + Speed Made Good) - \(\vec{V}_{heading}\) = speed and direction through water/air (heading + boat/airspeed) - \(\vec{V}_{current}\) = current set and drift

Calculating Set and Drift

If you know your DR position and get a fix:

DR Position: 34°15.0'N, 119°30.0'W (at 1200)
Fix Position: 34°17.0'N, 119°25.0'W (at 1200)

Difference:
  ΔLat = 2.0' N = 2.0 nm north
  ΔLon = 5.0' E = 5.0 × cos(34.25°) = 4.13 nm east

Time since last fix: 2 hours

Set (direction of current):

\[\text{Set} = \arctan\left(\frac{\Delta E}{\Delta N}\right) = \arctan\left(\frac{4.13}{2.0}\right) = 64.2° \approx 064°\]

Drift (speed of current):

\[\text{Drift} = \frac{\sqrt{\Delta N^2 + \Delta E^2}}{\text{time}} = \frac{\sqrt{2^2 + 4.13^2}}{2} = \frac{4.59}{2} = 2.3\text{ knots}\]

Correcting for Known Current

To make good a desired course in a known current:

Vector Triangle Solution

Given: - Desired CMG: 090° at 6 knots - Current: Set 180°, Drift 2 knots - Boat speed: 8 knots

Find heading to steer.

Solution: Using the vector triangle:

\[\vec{V}_{heading} = \vec{V}_{ground} - \vec{V}_{current}\]

Convert to components:

\[\text{Ground: } N = 0, E = 6\]
\[\text{Current: } N = -2, E = 0 \text{ (180° = due south)}\]
\[\text{Heading: } N = 0 - (-2) = 2, E = 6 - 0 = 6\]
\[\text{Heading} = \arctan\left(\frac{6}{2}\right) = 71.6° \approx 072°\]

Check: The heading should be "into" the current to compensate. Current is from 180° (going south), so you steer north of your desired track (072° vs 090°). ✓


Aviation DR

Wind Triangle

In aviation, the wind triangle relates: - Heading (HDG) and True Airspeed (TAS): Direction and speed through the air - Track (TRK) and Ground Speed (GS): Direction and speed over the ground - Wind Direction (WD) and Wind Speed (WS): Wind velocity

         Wind
          ↓
    ┌───────────┐
    │           │
HDG │     ↘     │ TRK
TAS │      ↘    │ GS
    │       ↘   │
    └───────────┘

E6B Flight Computer

The E6B (manual or electronic) solves: 1. Wind side: Calculate heading and ground speed given true course, TAS, and wind 2. Calculator side: Time-speed-distance, fuel, unit conversions

Modern electronic versions (e.g., CX-3) add GPS integration but the math remains the same.

DR in IFR Flight

When radar and GPS fail, pilots revert to DR:

1. Note last known position (VOR fix, GPS waypoint)
2. Record time
3. Fly assigned heading
4. Track elapsed time
5. Estimate ground speed (TAS adjusted for wind)
6. Calculate position at regular intervals
7. Plot on chart
8. Report position to ATC

Maritime DR

Standard Plotting Symbols

⊕  = Fix (known position from visual, radar, GPS)
DR = DR position (calculated)
EP = Estimated Position (DR adjusted for current/leeway)
→  = Course line with heading
⇢  = Track line (actual path)

DR Plotting Rules

  1. Label all DR positions with time (e.g., "DR 1430")

  2. Plot DR every hour at minimum

  3. Plot DR at course changes

  4. Plot DR when fix obtained (compare DR vs fix)

  5. Label course and speed on track line

Running Fix

When only one landmark is visible:

Time 1000: Bearing to lighthouse = 045°
Time 1030: Bearing to same lighthouse = 090°

Procedure:
1. Plot line from lighthouse at 225° (back azimuth of 045°)
2. Plot line from lighthouse at 270° (back azimuth of 090°)
3. "Run forward" the 1000 line by course and distance traveled
4. Intersection of advanced 1000 line with 1030 line = fix
        LH (lighthouse)
        ╱╲
       ╱  ╲
    225°   270°
     ╱       ╲
    ╱    ↓    ╲ ← Advanced 1000 bearing
   ╱     ⊕    ╲   (moved along course/distance)
  ╱   Fix      ╲
 ╱  at 1030     ╲

Traverse Computation

The Traverse Method

For complex routes with many turns:

  1. List all course changes with distances

  2. Compute ΔN and ΔE for each leg

  3. Sum ΔN and ΔE separately

  4. Calculate final position from start

  5. Compute Course Made Good and Distance Made Good

Traverse Form

LEG | COURSE | DISTANCE | cos(C) | sin(C) | ΔN      | ΔE
----|--------|----------|--------|--------|---------|-------
 1  | 030°   | 5.0 km   | 0.866  | 0.500  | +4.330  | +2.500
 2  | 090°   | 3.0 km   | 0.000  | 1.000  | 0.000   | +3.000
 3  | 150°   | 4.0 km   | -0.866 | 0.500  | -3.464  | +2.000
 4  | 270°   | 2.0 km   | 0.000  | -1.000 | 0.000   | -2.000
----|--------|----------|--------|--------|---------|-------
                        TOTALS:           | +0.866  | +5.500

CMG = atan2(5.500, 0.866) = 81.0° = 081°
DMG = √(0.866² + 5.500²) = 5.57 km

Position Fixing to Reset DR

DR error grows continuously. Regular fixes reset the error:

Accuracy over time:
                                 ×
                              × × ×
                           ×  DR error grows
                        ×
                     ×
                  ×
               ×
            ×
FIX ──→ ⊕──────×──────────×─────────────×──────────────────
        ↑     ↑           ↑             ↑
      Start  10min      30min         60min
        0m   ~100m      ~300m         ~500m+ error

Fix methods: - Visual bearing intersection - Radar range/bearing - GPS (most accurate) - Celestial fix (noon sight, two-body fix) - Radio navigation (VOR, NDB)

Rule of thumb: Get a fix every 30-60 minutes, or whenever passing identifiable landmarks.


Estimated Position (EP)

The EP corrects DR for known influences:

\[\text{EP} = \text{DR} + \text{Set/Drift correction} + \text{Leeway correction}\]

Leeway: Sideways drift due to wind on boat’s topsides (not current).

            Wind
              ↓
          ┌───────┐
          │       │
    Course │   ↘   │ Track (actual)
          │    ↘  │
          │     ↘ │ ← Leeway angle (typically 3-7°)
          └───────┘

EP is more accurate than DR but less certain than a fix.


Python DR Calculator

import math

def dead_reckon(lat, lon, course, distance, unit='nm'):
    """
    Calculate new position from DR.

    Args:
        lat: Starting latitude (decimal degrees, positive = N)
        lon: Starting longitude (decimal degrees, positive = E)
        course: Course in degrees (true)
        distance: Distance traveled
        unit: 'nm' (nautical miles), 'km', or 'm'

    Returns:
        (new_lat, new_lon) in decimal degrees
    """
    # Convert to nautical miles if needed
    if unit == 'km':
        distance = distance / 1.852
    elif unit == 'm':
        distance = distance / 1852

    # Convert to radians
    lat_r = math.radians(lat)
    course_r = math.radians(course)

    # Calculate deltas
    # 1 nautical mile = 1 minute of latitude
    delta_lat = distance * math.cos(course_r) / 60  # degrees

    # Longitude correction for latitude
    delta_lon = (distance * math.sin(course_r)) / (60 * math.cos(lat_r))

    new_lat = lat + delta_lat
    new_lon = lon + delta_lon

    return new_lat, new_lon


def course_made_good(lat1, lon1, lat2, lon2):
    """Calculate course and distance between two points."""

    # Delta in minutes
    delta_lat = (lat2 - lat1) * 60  # nm (approximately)
    delta_lon = (lon2 - lon1) * 60 * math.cos(math.radians((lat1 + lat2) / 2))

    # Distance
    distance = math.sqrt(delta_lat**2 + delta_lon**2)

    # Course (using atan2 for correct quadrant)
    course = math.degrees(math.atan2(delta_lon, delta_lat))
    if course < 0:
        course += 360

    return course, distance


def error_circle_radius(distance, angular_error_deg=3, distance_error_pct=5):
    """
    Calculate position uncertainty radius.

    Args:
        distance: Distance traveled (any unit)
        angular_error_deg: Compass error in degrees
        distance_error_pct: Distance error as percentage

    Returns:
        Radius of uncertainty circle (same unit as distance)
    """
    angular_error_rad = math.radians(angular_error_deg)

    cross_track_error = distance * math.sin(angular_error_rad)
    along_track_error = distance * (distance_error_pct / 100)

    total_error = math.sqrt(cross_track_error**2 + along_track_error**2)

    return total_error


# Example usage
if __name__ == "__main__":
    # Starting position
    start_lat = 34.0
    start_lon = -118.0

    # Multi-leg traverse
    legs = [
        (45, 10, 'nm'),   # Course 045°, 10 nm
        (90, 5, 'nm'),    # Course 090°, 5 nm
        (180, 8, 'nm'),   # Course 180°, 8 nm
    ]

    lat, lon = start_lat, start_lon
    total_dist = 0

    print(f"Start: {lat:.4f}°N, {abs(lon):.4f}°W")

    for course, dist, unit in legs:
        lat, lon = dead_reckon(lat, lon, course, dist, unit)
        total_dist += dist
        print(f"After {course:03d}°/{dist}{unit}: {lat:.4f}°N, {abs(lon):.4f}°W")

    # Course made good
    cmg, dmg = course_made_good(start_lat, start_lon, lat, lon)
    print(f"\nCourse Made Good: {cmg:.1f}°")
    print(f"Distance Made Good: {dmg:.2f} nm")

    # Error estimate
    error = error_circle_radius(total_dist)
    print(f"\nPosition uncertainty: ±{error:.2f} nm ({error * 1.852:.2f} km)")

Exercises

Exercise 1: Basic DR Plot

Given: - Start position: 40°00.0’N, 074°00.0’W - Time: 0800 - Course: 090° True - Speed: 10 knots

Calculate DR position at 0900, 1000, and 1100.

Solution

At 10 knots, you travel 10 nm per hour.

0900 (1 hour, 10 nm):

ΔLat = 10 × cos(90°) = 10 × 0 = 0 nm = 0'

ΔLon = 10 × sin(90°) / cos(40°) = 10 × 1 / 0.766 = 13.05' E

Position: 40°00.0’N, 073°46.95’W (moved ~13' east)

Actually, let me recalculate more carefully.

Distance = 10 nm east. At latitude 40°, 1 minute of longitude = cos(40°) × 1 nm = 0.766 nm. So 10 nm = 10 / 0.766 = 13.05 minutes of longitude.

0900: 40°00.0’N, 073°46.95’W 1000: 40°00.0’N, 073°33.90’W (another 13.05' east) 1100: 40°00.0’N, 073°20.85’W (another 13.05' east)

Exercise 2: Multi-Leg Traverse

Given: - Start: 35°00.0’N, 120°00.0’W at 0600 - Leg 1: Course 045°, Speed 6 kt, for 1 hour - Leg 2: Course 135°, Speed 8 kt, for 30 minutes - Leg 3: Course 270°, Speed 5 kt, for 2 hours

Find final DR position and Course/Distance Made Good.

Solution

Leg 1: 6 nm on 045° - ΔN = 6 × cos(45°) = 4.24 nm = 4.24' - ΔE = 6 × sin(45°) / cos(35°) = 4.24 / 0.819 = 5.18'

Leg 2: 4 nm on 135° - ΔN = 4 × cos(135°) = -2.83 nm = -2.83' - ΔE = 4 × sin(135°) / cos(35.07°) = 2.83 / 0.818 = 3.46'

Leg 3: 10 nm on 270° - ΔN = 10 × cos(270°) = 0 nm = 0' - ΔE = 10 × sin(270°) / cos(35.01°) = -10 / 0.819 = -12.21'

Totals: - ΔN = 4.24 - 2.83 + 0 = 1.41' North - ΔE = 5.18 + 3.46 - 12.21 = -3.57' West

Final position: - Lat: 35°00.0' + 1.41' = 35°01.41’N - Lon: 120°00.0' + 3.57' = 120°03.57’W

Course Made Good: CMG = atan2(-3.57 × 0.819, 1.41) = atan2(-2.92, 1.41) = -64.2°

Since ΔE is negative (west) and ΔN is positive, we’re in NW quadrant: CMG = 360° - 64.2° = 295.8° ≈ 296° True

Distance Made Good: DMG in nm: Need to convert ΔE back to nm. ΔE_nm = -3.57 × cos(35°) = -2.92 nm DMG = √(1.41² + 2.92²) = √(1.99 + 8.53) = √10.52 = 3.24 nm

Or: DMG = √(ΔN² + ΔE_nm²) = √(1.41² + (-2.92)²) = 3.24 nm

Exercise 3: Set and Drift

Given: - DR position at 1400: 33°30.0’N, 117°45.0’W - Fix position at 1400: 33°32.5’N, 117°40.0’W - Time since last fix: 2.5 hours

Calculate set and drift.

Solution

Difference between DR and Fix: - ΔLat = 32.5' - 30.0' = 2.5' N = 2.5 nm north - ΔLon = 45.0' - 40.0' = 5.0' E

At latitude 33.5°: ΔE_nm = 5.0 × cos(33.5°) = 5.0 × 0.834 = 4.17 nm east

Set (direction of current): Set = atan2(4.17, 2.5) = 59.1° ≈ 059° True

Drift (speed of current): Distance = √(2.5² + 4.17²) = √(6.25 + 17.39) = √23.64 = 4.86 nm

Drift = 4.86 nm / 2.5 hours = 1.94 knots ≈ 2.0 knots

Answer: Current setting 059° at 2.0 knots.


Quick Reference

Formulas

Calculation Formula

Distance from time/speed

d = v × t

ΔN (northing)

d × cos(course)

ΔE (departure)

d × sin(course)

Course from Δs

atan2(ΔE, ΔN)

Distance from Δs

√(ΔN² + ΔE²)

Position error

√(σ_cross² + σ_along²)

Longitude correction

ΔLon = ΔE / cos(Lat)

Error Estimates

Distance Traveled Typical Position Error

1 km

±50-70 m

5 km

±250-350 m

10 km

±500-700 m

20 km

±1000-1400 m

Rule of thumb: 5-7% of distance traveled as position uncertainty.