This program is Copyright © 2006 by Jean-Marc Baillard and is used here by permission.
This program is supplied without representation or warranty of any kind. Jean-Marc Baillard and The Museum of HP Calculators therefore assume no responsibility and shall have no liability, consequential or otherwise, of any kind arising from the use of this program material or any part thereof.
-After measuring the altitudes of n = 2 , 3 ( or more ) stars,
the 2 following programs compute your geographical position:
Longitude & Latitude
-The second routine is longer but faster than the first one.
Program #1
Data Registers: R00 = "T" R01 to R05 are used by "EXY" R06 = 4n+10 R07 to R10: temp
R11 = ST1 -RA1
R15 = ST2 -RA2
R19 = ST3 -RA3
....................... ST = Sidereal Time
R12 = Cos (decl1)
R16 = Cos (decl2)
R20 = Cos (decl3)
....................... RA = Right-Ascension
R13 = Sin (decl1)
R17 = Sin (decl2)
R21 = Sin (decl3)
....................... decl = declination
R14 = Sin (alt1)
R18 = Sin (alt2)
R22 = Sin (alt3)
....................... alt = altitude
-When the program stops, R01 = your longitude & R02 = your latitude ( in degrees and decimals )
Flags:
F22 F29
Subroutines: "MST" Mean Sidereal
Time at Greenwich ( cf "Rising-Transit-Setting for the HP-41" )
"H0-H" ( cf "Atmospheric Refraction for the HP-41" )
"EXY" ( cf "Extrema for the HP-41" , 2 dimensional problems
)
01 LBL "FIX"
02 1
03 STO 04
04 11.9
05 STO 05
06 FIX 0
07 CF 29
08 DEG
09 LBL 01
10 "DATE^TIME"
11 ARCL 04
12 "~?"
( append ? )
13 FIX 4
14 CF 22
15 PROMPT
16 FC?C 22
17 GTO 03
18 FIX 0
19 XEQ "MST"
20 LASTX
21 STO IND 05
22 "RA^DECL"
23 ARCL 04
24 "~?"
( append ? )
25 FIX 4
26 PROMPT
27 FIX 0
28 X<>Y
29 HR
30 ST- IND 05
31 15
32 ST* IND 05
33 ISG 05
34 X<> Z
35 HR
36 1
37 P-R
38 STO IND 05
39 ISG 05
40 X<>Y
41 STO IND 05
42 ISG 05
43 "ALT"
44 ARCL 04
45 "~?"
( append ? )
46 PROMPT
47 XEQ "H0-H"
In the example below, I've used the refraction of a standard atmosphere,
48 HR
other choices may of course be better according to the atmospueric conditions.
49 SIN
50 STO IND 05
51 ISG 04
52 CLX
53 RCL 05
54 INT
55 STO 06
56 ISG 05
57 GTO 01
58 LBL "T"
( or another global name, the same as line 97 )
59 STO 07
60 CLX
61 SIGN
62 P-R
63 STO 08
64 X<>Y
65 STO 09
66 RCL 06
67 E3
68 /
69 11
70 +
71 STO 10
72 CLX
73 LBL 02
74 RCL 07
75 RCL IND 10
76 +
77 COS
78 RCL 08
79 *
80 ISG 10
81 RCL IND 10
82 *
83 RCL 09
84 ISG 10
85 RCL IND 10
86 *
87 +
88 ISG 10
89 RCL IND 10
90 -
91 X^2
92 +
93 ISG 10
94 GTO 02
95 RTN
96 LBL 03
97 "T"
98 ASTO 00
99 "STEP^LON^LAT"
100 PROMPT
101 X<>Y
102 CLA
103 XEQ "EXY"
104 X<>Y
105 HMS
106 X<>Y
107 HMS
108 SF 29
109 CLD
110 END
( 215 bytes / SIZE 4n+21 )
STACK | INPUTS | OUTPUTS |
Z | / | min(f) |
Y | / | latitude ( ° ' " ) |
X | / | longitude ( ° ' " ) |
Example: On 2006/04/04 you measure the altitude of n = 3 stars:
at 6h00m (UT) alpha Lyr
( RA = 18h37m09s , Decl = 38°47'21" )
Altitude = 29°41'59"
at 6h01m (UT) zeta UMaj
( RA = 13h24m10s , Decl = 54°53'34" )
Altitude = 60°29'56"
at 6h02m (UT) gamma UMin ( RA
= 15h20m43s , Decl = 71°48'43" ) Altitude
= 42°26'03"
-SIZE 023 or greater, then:
XEQ "FIX" the HP-41 displays "DATE^TIME1?" ( enter the different data and press R/S )
2006.0404 ENTER^
6.00
R/S --------------------
"RA^DECL1?"
18.3709 ENTER^
38.4721 R/S
-------------------- "ALT1?"
29.4159 R/S
-------------------- "DATE^TIME2?"
2006.0404 ENTER^
6.01
R/S -------------------
"RA^DECL2?"
13.2410 ENTER^
54.5334 R/S
------------------- "ALT2?"
60.2956 R/S
------------------- "DATE^TIME3?"
2006.0404 ENTER^
6.02
R/S -------------------
"RA^DECL3?"
15.2043 ENTER^
71.4843 R/S
------------------- "ALT3?"
42.2603 R/S
------------------- "DATE^TIME4?"
( since we have only 3 stars, press R/S without any digit entry
)
R/S -------------------
"STEP^LON^LAT"
( enter a stepsize, say 2° and your estimated position, for instance
-70° ; +20° )
2
ENTER^
-70
ENTER^
20
R/S the HP-41
executes "EXY" and displays the successive longitude-values, expressed
in degrees and decimals
and 8mn49s later:
>>> your longitude = X-register
= -74°40'30"
So, you are on the Atlantic Ocean, near the Bahamas!
>>> your latitude
= Y-register = +25°49'41"
Z-register = fmin ~ 2.4 10 -11 = R03
this value must be a very small number.
-Longitudes are reckoned positively Eastwards from the meridian of Greenwich.
-If the process seems to diverge, stop the program, GTO "FIX" ,
XEQ 03 and key in new estimated step/longitude/latitude.
-Too bad initial guesses may lead to a relative minimum and a wrong
position but in this case, Z-output is not very small.
-However, if n = 2, the system has 2 solutions. Therefore, measuring
3 altitudes is safer.
-This program solves the system of non-linear equations:
fi(Long,Lat) = -sin(alti) + sin(Lat) sin(decli) + cos(Lat) cos(decli) cos(STi - RAi + Long) = 0 i = 2 , 3 , ....
by a least-squares method: It minimizes SUMi
(fi)2 using the simple ( and slow ) EXY-algorithm
-The next program solves the system we get after equating to zero the
partial derivatives.
Program #2
Data Registers: R00 = "T" R01 to R11 are used by "SXY" R12 = 4n+22 R13 to R22: temp
R23 = ST1 -RA1
R27 = ST2 -RA2
R31 = ST3 -RA3
....................... ST = Sidereal Time
R24 = Cos (decl1)
R28 = Cos (decl2)
R32 = Cos (decl3)
....................... RA = Right-Ascension
R25 = Sin (decl1)
R29 = Sin (decl2)
R33 = Sin (decl3)
....................... decl = declination
R26 = Sin (alt1)
R30 = Sin (alt2)
R34 = Sin (alt3)
....................... alt = altitude
-When the program stops, R01 = your longitude & R02 = your latitude ( in degrees and decimals )
Flags:
F22 F29
Subroutines: "MST" Mean Sidereal
Time at Greenwich ( cf "Rising-Transit-Setting for the HP-41" )
"H0-H" ( cf "Atmospheric Refraction for the HP-41" )
"SXY" 2x2 non-linear systems ( cf "Linear & Non-Linear
Systems for the HP-41" )
01 LBL "FIX2"
02 1
03 STO 10
04 23.9
05 STO 11
06 FIX 0
07 CF 29
08 DEG
09 LBL 01
10 "DATE^TIME"
11 ARCL 10
12 "~?"
( append ? )
13 FIX 4
14 CF 22
15 PROMPT
16 FC?C 22
17 GTO 03
18 FIX 0
19 XEQ "MST"
20 LASTX
21 STO IND 11
22 "RA^DECL"
23 ARCL 10
24 "~?"
( append ? )
25 FIX 4
26 PROMPT
27 FIX 0
28 X<>Y
29 HR
30 ST- IND 11
31 15
32 ST* IND 11
33 ISG 11
34 X<> Z
35 HR
36 1
37 P-R
38 STO IND 11
39 ISG 11
40 X<>Y
41 STO IND 11
42 ISG 11
43 "ALT"
44 ARCL 10
45 "~?"
( append ? )
46 PROMPT
47 XEQ "H0-H"
48 HR
49 SIN
50 STO IND 11
51 ISG 10
52 CLX
53 RCL 11
54 INT
55 STO 12
56 ISG 11
57 GTO 01
58 LBL "T"
( or another global name, the same as line 126 )
59 STO 13
60 CLX
61 SIGN
62 P-R
63 STO 14
64 X<>Y
65 STO 15
66 RCL 12
67 E3
68 /
69 23
70 +
71 STO 18
72 CLX
73 STO 16
74 STO 17
75 STO 19
76 LBL 02
77 RCL IND 18
78 RCL 13
79 +
80 STO 20
81 COS
82 ISG 18
83 RCL IND 18
84 STO 21
85 *
86 RCL 14
87 *
88 RCL 15
89 ISG 18
90 RCL IND 18
91 STO 22
92 *
93 +
94 ISG 18
95 RCL IND 18
96 -
97 STO 11
98 X^2
99 ST+ 19
100 LASTX
101 RCL 20
102 SIN
103 *
104 RCL 21
105 *
106 ST+ 16
107 LASTX
108 RCL 20
109 COS
110 *
111 RCL 15
112 *
113 RCL 14
114 RCL 22
115 *
116 -
117 RCL 11
118 *
119 ST+ 17
120 ISG 18
121 GTO 02
122 RCL 17
123 RCL 16
124 RTN
125 LBL 03
126 "T"
127 ASTO 00
128 "LON^LAT GUESS1?"
129 PROMPT
130 STO 02
131 X<>Y
132 STO 01
133 "LON^LAT GUESS2?"
134 PROMPT
135 STO 04
136 X<>Y
137 STO 03
138 FIX 9
139 CLA
140 XEQ "SXY"
141 RCL 19
142 X<> Z
143 HMS
144 X<>Y
145 HMS
146 FIX 4
147 SF 29
148 CLD
149 END
( 296 bytes /SIZE 023+4n )
STACK | INPUTS | OUTPUTS |
Z | / | min(f) |
Y | / | latitude ( ° ' " ) |
X | / | longitude ( ° ' " ) |
Example: The same example as above: On 2006/04/04,
at 6h00m (UT) alpha Lyr
( RA = 18h37m09s , Decl = 38°47'21" )
Altitude = 29°41'59"
at 6h01m (UT) zeta UMaj
( RA = 13h24m10s , Decl = 54°53'34" )
Altitude = 60°29'56"
at 6h02m (UT) gamma UMin ( RA
= 15h20m43s , Decl = 71°48'43" ) Altitude
= 42°26'03"
-SIZE 035 or greater, then:
XEQ "FIX" the HP-41 displays "DATE^TIME1?" ( enter the different data and press R/S )
2006.0404 ENTER^
6.00
R/S --------------------
"RA^DECL1?"
18.3709 ENTER^
38.4721 R/S
-------------------- "ALT1?"
29.4159 R/S
-------------------- "DATE^TIME2?"
2006.0404 ENTER^
6.01
R/S -------------------
"RA^DECL2?"
13.2410 ENTER^
54.5334 R/S
------------------- "ALT2?"
60.2956 R/S
------------------- "DATE^TIME3?"
2006.0404 ENTER^
6.02
R/S -------------------
"RA^DECL3?"
15.2043 ENTER^
71.4843 R/S
------------------- "ALT3?"
42.2603 R/S
------------------- "DATE^TIME4?"
( since we have only 3 stars, press R/S without any digit entry
)
R/S -------------------
"LON^LAT GUESS1?"
( enter your estimated position, for instance -70 ; +20 )
-70
ENTER^
20
R/S -------------------
"LON^LAT GUESS2?"
( enter a second estimated position, say -80 ; +30 )
-80
ENTER^
30
R/S the HP-41
executes "SXY" and displays the successive longitude-values, expressed
in degrees and decimals
( each iteration requires about 35 seconds if n = 3 ) and eventually,
>>> your longitude = X-register
= -74°40'30"
>>> your latitude
= Y-register = +25°49'41"
Z-register = fmin ~ 2.3 10 -11 = R19
this value must be a very small number.
-Longitudes are reckoned positively Eastwards from the meridian of Greenwich.
-If the process seems to diverge, stop the program, GTO "FIX2" ,
XEQ 03 and key in new estimated longitudes/latitudes.
-Too bad initial guesses may lead to a relative minimum and a wrong
position but in this case, Z-output is not very small.
-However, if n = 2, the system has 2 solutions. Therefore 3 measured
altitudes are safer.
-"SXY" may also stop prematurely if the jacobian = 0 ( always check
Z-register or R19 )
-"SXY" tries to produce very accurate results, but here, 8 decimals
are superfluous.
So, execution time can be reduced if you modify the final test
in the "SXY" listing.
Go back to the HP-41 software library
Go back to the general software library
Go
back to the main exhibit hall