Euclidean Distance for the HP-41
Overview
1°) 2-Dimensional Space
a) Point-Line Distance ( Program#1
)
b) Point-Line Distance ( Program#2 )
c) Point-Curve Distance
d) Distance between 2 Curves
2°) 3-Dimensional Space
a) Point-Line Distance
b) Point-Plane Distance
c) Point-Surface Distance
d) Line-Line Distance
e) Distance between 2 Surfaces
3°) n-Dimensional Space
a) Point-Line Distance
b) Point-Hyperplane Distance
c) Line-Line Distance ( 2 programs )
d) Distance between 2 Hypersurfaces ( one
example only )
-The Euclidean distance between 2 points M( x1 , ...... , xn
) & M'( x'1 , ...... , x'n ) is given by
d = [ (x1-x'1)2 + ...... + (xn-x'n)2
]1/2
-The following programs compute the distance between a few sets
of points.
-We assume the basis are orthonormal.
1°) 2-Dimensional Space
a) Point-Line Distance ( Program#1
)
-Here, we assume the line (L) is not parallel to the y-axis so that (L)
may be defined by an equation of the form: y = m.x + p
-The point M is determined by its coordinates M(x,y)
Formula: distance d = | m.x+ p -
y | / ( 1 + m2 )1/2
Data Registers: /
Flags: /
Subroutines: /
01 LBL "PL2" 02 R^ 03 ST* Y 04 X<> T 05 + 06 - 07 ABS 08 X<>Y 09 X^2 10 1 11 + 12 SQRT 13 / 14 END |
( 24 bytes / SIZE 000 )
STACK | INPUTS | OUTPUTS |
T | m | m |
Z | p | m |
Y | y | m |
X | x | d |
L | / | sqrt(1+m2) |
Example: (L): y = 3.x + 4
M( 5 ; 2 )
3 ENTER^
4 ENTER^
2 ENTER^
5 XEQ "PL2" >>>> d =
5.375872023
b) Point-Line Distance ( Program#2
)
-In the general case, (L) has an equation: a.x + b.y = c and the distance d between M(x,y) and (L) is given by
d = | a.x+ b.y- c | / ( a2 + b2
)1/2
Data Registers: • R00 = c ( Registers R00 thru R02 are to be initialized before executing "PL2+" )
• R01 = a • R02 = b
Flags: /
Subroutines: /
01 LBL "PL2+" 02 RCL 01 03 * 04 X<>Y 05 RCL 02 06 * 07 + 08 RCL 00 09 - 10 ABS 11 RCL 01 12 RCL 02 13 R-P 14 X<>Y 15 RDN 16 / 17 END |
( 26 bytes SIZE 003 )
STACK | INPUTS | OUTPUTS |
Z | Z | / |
Y | y | Z |
X | x | d |
L | / | sqrt(a2+b2) |
-Register Z is saved in Y
Example: (L): 3.x + 7.y = 10 M( 2 ; 5 )
3 STO 01 7 STO 02 10 STO 00
5 ENTER^
2 XEQ "PL2+" >>>> d = 4.070499419
c) Point-Curve Distance
-This program computes the distance d between one point M(x,y) and a curve
(C) defined by the equation y = f(x)
-d is the smallest value MM' where M'(x',y') is on the curve (C).
Data Registers: • R00 = function name ( Registers R00 and R01 are to be initialized before executing "PC2" )
• R01 = x' = an estimation of the abscissa of M'
R02 = d2 R03 = h
R04 thru R09: temp
Flags: /
Subroutine: "EX" ( cf "Extrema for
the HP-41" )
and a program which computes f(x) assuming x is in X-register upon entry
01 LBL "PC2" 02 STO 06 03 RDN 04 STO 07 05 CLX 06 RCL 00 07 STO 08 |
08 "T" 09 ASTO 00 10 CLX 11 RCL 01 12 XEQ "EX" 13 RCL 08 14 STO 00 |
15 RCL 02 16 SQRT 17 CLA 18 CLD 19 RTN 20 LBL "T" 21 STO 09 |
22 XEQ IND 08 23 RCL 07 24 - 25 X^2 26 RCL 06 27 RCL 09 28 - |
29 X^2 30 + 31 RTN 32 END |
( 50 bytes / SIZE 010 )
STACK | INPUTS | OUTPUTS |
Z | h | / |
Y | y | / |
X | x | d |
-where h is the stepsize used by "EX"
Example: Evaluate the distance between M(3,0) and the curve (C) defined by y = exp(x)
LBL "Y"
E^X
RTN
"Y" ASTO 00
0 STO 01 if
we choose 0 as an estimation of x'
-And if we choose h = 1 and FIX 4 ( remember that the accuracy given by "EX" is determined by the display format )
1 ENTER^
0 ENTER^
3 XEQ "PC2" >>>> ( after displaying
the successive x'-approximations ) d = 2.993448536
( in 30 seconds )
-If you want to re-calculate d in FIX 5 , use the current h-value in register R03:
FIX 5
RCL 03
0 ENTER^
3 XEQ "PC2" >>>>
d = 2.993448536 = the same result!
-Though x' is correct to 4 or 5 decimals only ( R01 = 0.46510 )
, d is exact to 10 places!
-You can compute the exact x' and y' more directly by solving the equation
d(d2)/dx = 2x - 6 + 2 e2x = 0
it yields x' = 0.465080868 whence y' = 1.592142937
and d = 2.993448536
d) Distance between 2 Curves
-A curve (C) is defined by y = f(x) and a curve (C') is defined
by y = g(x)
-To compute the distance d between the 2 curves, we seek the minimum
MM' where M(x,y) is on (C) and M'(x',y') is on (C')
Data Registers: R00: temp ( Registers R01 - R02 - R11 - R12 are to be initialized before executing "CC2" )
• R01 = f name
• R02 = g name
R08 = h , R10 = d2
• R11 = x
• R12 = x'
Flags: /
Subroutines:
"EXN" ( cf "Extrema for the HP-41" )
a program which computes y = f(x) assuming
x is in X-register upon entry.
a program which computes y = g(x) assuming x is
in X-register upon entry.
01 LBL "CC2" 02 "T" 03 ASTO 00 04 2 05 XEQ "EXN" |
06 SQRT 07 CLA 08 CLD 09 RTN 10 LBL "T" |
11 RCL 11 12 XEQ IND 01 13 STO 03 14 RCL 12 15 XEQ IND 02 |
16 RCL 03 17 - 18 X^2 19 RCL 11 20 RCL 12 |
21 - 22 X^2 23 + 24 RTN 25 END |
( 45 bytes / SIZE 013 )
STACK | INPUTS | OUTPUTS |
X | h | distance |
Where h is the stepsize used by "EXN"
Example: Evaluate the distance d between the 2 curves (C) & (C') defined by y = exp(x) & y = sqrt(x)
LBL "Y1" LBL "Y2"
E^X
SQRT
RTN
RTN
"Y1" ASTO 01
"Y2" ASTO 02
-If our guesses are x = 0 , x' = 1
0 STO 11 1 STO 12
and if we choose h = 1
( FIX 4 ) 1 XEQ "CC2" >>>> ( the successive x-approximations are displayed ) d = 0.533587580 ( in 3mn08s )
-In FIX 5 , it gives d = 0.533587576 ( the last decimal
should be a 5 )
2°) 3-Dimensional Space
a) Point-Line Distance
-M(x,y,z)
-(L) is determined by one point A(a,b,c) & one vector U(u,v,w)
Formula: d = || UxAM || / || U
|| where "x" is the cross-product
Data Registers: R00: unused ( Registers R01 thru R06 are to be initialized before executing "PL3" )
• R01 = a • R04 = u
• R02 = b • R05 = v
• R03 = c • R06 = w
Flags: /
Subroutine: "CROSS" ( cf "Dot-Product and
Cross-Product for the HP-41" )
01 LBL "PL3" 02 RCL 03 03 ST- T 04 CLX 05 RCL 02 06 ST- Z |
07 CLX 08 RCL 01 09 - 10 4 11 RDN 12 XEQ "CROSS" |
13 X^2 14 X<>Y 15 X^2 16 + 17 X<>Y 18 X^2 |
19 + 20 RCL 04 21 X^2 22 RCL 05 23 X^2 24 RCL 06 |
25 X^2 26 + 27 + 28 / 29 SQRT 30 END |
( 46 bytes / SIZE 007 )
STACK | INPUTS | OUTPUTS |
Z | z | / |
Y | y | / |
X | x | d |
Example: (L) is defined by the point
A(2,3,4) & the vector U(1,4,9) and M(2,5,3)
2 STO 01 1
STO 04
3 STO 02 4
STO 05
4 STO 03 9
STO 06
3 ENTER^
5 ENTER^
2 XEQ "PL3" >>>>
d = 2.233785110
b) Point-Plane Distance
-The plane (P) has an equation: a.x + b.y + c.z = d and the distance between M(x,y,z) and (P) is given by
dist = | a.x+ b.y + c.z - d | / ( a2 + b2
+ c2 )1/2
Data Registers: • R00 = d ( Registers R00 thru R03 are to be initialized before executing "PPL3" )
• R01 = a
• R02 = b
• R03 = c
Flags: /
Subroutines: /
01 LBL "PPL3" 02 RCL 01 03 * 04 X<>Y 05 RCL 02 |
06 * 07 + 08 X<>Y 09 RCL 03 10 * |
11 + 12 RCL 00 13 - 14 ABS 15 RCL 01 |
16 X^2 17 RCL 02 18 X^2 19 RCL 03 20 X^2 |
21 + 22 + 23 SQRT 24 / 25 END |
( 34 bytes / SIZE 004 )
STACK | INPUTS | OUTPUTS |
Z | z | / |
Y | y | / |
X | x | dist |
Example: (P): 2x + 3y + 5z = 9
M(4,6,1)
9 STO 00
2 STO 01
3 STO 02
5 STO 03
1 ENTER^
6 ENTER^
4 XEQ "PPL3" >>>> dist = 3.568871265
c) Point-Surface Distance
-We want to evaluate the distance d between a point M(x,y) and a surface
(S) defined by z = f(x,y)
-This is the minimum MM' where M'(x',y') is on the surface (S)
Data Registers: • R00 = function name ( Registers R00 thru R02 are to be initialized before executing "PS3" )
• R01 = x'
• R02 = y' R03 = d2 R04
= h R05 to R11:
temp
Flags: /
Subroutines:
"EXY" ( cf "Extrema for the HP-41" )
and a program that computes z = f(x,y) assuming x is in
X-register and y is in Y-register upon entry.
01 LBL "PS3" 02 STO 06 03 RDN 04 STO 07 05 RDN 06 STO 08 07 CLX 08 RCL 00 09 STO 09 |
10 "T" 11 ASTO 00 12 CLX 13 RCL 02 14 RCL 01 15 XEQ "EXY" 16 RCL 09 17 STO 00 18 RCL 03 |
19 SQRT 20 CLA 21 CLD 22 RTN 23 LBL "T" 24 STO 10 25 X<>Y 26 STO 11 27 X<>Y |
28 XEQ IND 09 29 RCL 08 30 - 31 X^2 32 RCL 07 33 RCL 11 34 - 35 X^2 36 + |
37 RCL 06 38 RCL 10 39 - 40 X^2 41 + 42 RTN 43 END |
( 62 bytes / SIZE 012 )
STACK | INPUTS | OUTPUTS |
T | h | / |
Z | z | / |
Y | y | / |
X | x | d |
-where h is the stepsize used by "EXY"
Example: Calculate the distance between M(7,5,0) and the elliptic paraboloid (S) defined by z = x2 + 2y2
LBL "Z" X^2
RTN
X^2 ST+
X
X<>Y +
"Z" ASTO 00
0 STO 01 STO 02
if we choose x' = y' = 0 as first guesses
-And if we choose h = 1 and FIX 4 ( the accuracy given by "EXY" is determined by the display format )
1 ENTER^
0 ENTER^
5 ENTER^
7 XEQ "PS3" >>>> ( after displaying
the successive x'-approximations ) d = 7.585176722
( in 98 seconds )
-In FIX 5 , it yields d = 7.585176721 which is
correct to 10 places though x' = R01 = 1.29613 and
y' = R02 = 0.51011 are exact to 5 decimals only.
d) Line-Line Distance
-(L) is determined by one point A(a,b,c) & one vector U(u,v,w)
-(L') is determined by one point A'(a',b',c') & one vector U'(u',v',w')
Formula: d = | (UxU').AA'
| / || UxU' || where
"x" is the cross-product and "." is the dot-product
Data Registers: R00: unused ( Registers R01 thru R12 are to be initialized before executing "LL3" )
• R01 = a • R04 = u
• R07 = a' • R10 = u'
• R02 = b • R05 = v
• R08 = b' • R11 = v'
• R03 = c • R06 = w
• R09 = c' • R12 =
w'
Flags: /
Subroutines: "CROSS" ( cf "Dot-Product
and Cross-Product for the HP-41" ) and "PL3" ( only if (L) //
(L') )
01 LBL "LL3" 02 4 03 RCL 12 04 RCL 11 05 RCL 10 06 XEQ "CROSS" 07 STO M 08 X^2 09 R^ 10 X^2 |
11 + 12 RCL Y 13 X^2 14 + 15 X=0? 16 GTO 01 17 SQRT 18 ST/ M 19 ST/ Z 20 / |
21 RCL 08 22 RCL 02 23 - 24 * 25 X<>Y 26 RCL 09 27 RCL 03 28 - 29 * 30 + |
31 RCL 07 32 RCL 01 33 - 34 0 35 X<> M 36 * 37 + 38 ABS 39 RTN 40 LBL 01 |
41 CLA 42 RCL 09 43 RCL 08 44 RCL 07 45 XEQ "PL3" 46 END |
( 70 bytes / SIZE 013 )
STACK | INPUTS | OUTPUTS |
X | / | distance |
Example:
(L) is defined by A(2,3,4) & U(1,4,7)
(L') is defined by A'(2,1,6) & U'(2,9,5)
2 STO 01 1 STO 04
2 STO 07 2 STO 10
3 STO 02 4 STO 05
1 STO 08 9 STO 11
4 STO 03 7 STO 06
6 STO 09 5 STO 12
XEQ "LL3" >>>> d = 0.364106847
-If U'(2,8,14) (L) // (L') and it gives d = 2.730301349
e) Distance between 2 Surfaces
-A surface (S) is defined by z = f(x,y) and a surface (S') is defined by z = g(x,y)
-To compute the distance d between the 2 surfaces, we seek the minimum
MM' where M(x,y,z) is on (S) and M'(x',y',z') is on (S')
Data Registers: R00: temp ( Registers R01 , R02 & R11 thru R14 are to be initialized before executing "SS3" )
• R01 = f name
• R02 = g name
R08 = h , R10 = d2
• R11 = x • R13 = x'
• R12 = y • R14 = y'
Flags: /
Subroutines:
"EXN" ( cf "Extrema for the HP-41" )
a program which computes z = f(x,y) assuming x is
in X-register and y is in Y-register upon entry.
a program which computes z = g(x,y) assuming x is in X-register
and y is in Y-register upon entry.
01 LBL "SS3" 02 "T" 03 ASTO 00 04 4 05 XEQ "EXN" 06 SQRT 07 CLA |
08 CLD 09 RTN 10 LBL "T" 11 RCL 12 12 RCL 11 13 XEQ IND 01 14 STO 03 |
15 RCL 14 16 RCL 13 17 XEQ IND 02 18 RCL 03 19 - 20 X^2 21 RCL 11 |
22 RCL 13 23 - 24 X^2 25 + 26 RCL 12 27 RCL 14 28 - |
29 X^2 30 + 31 RTN 32 END |
( 52 bytes / SIZE 015 )
STACK | INPUTS | OUTPUTS |
X | h | distance |
Where h is the stepsize used by "EXN"
Example: Evaluate the distance d between the 2 paraboloids (S): z = x2 + 2y2 and (S'): z = PI - 2(x-7)2 - (y-5)2
LBL "Z1" ST+ X
LBL "Z2" ST+ X
X^2 -
X^2
+
7
X<>Y +
RTN
X<>Y
RTN -
5
PI
X^2
X^2
-
X<>Y
"Z1" ASTO 01
"Z2" ASTO 02
-If our guesses are x = y = 0 & x' = 7 , y' = 5
0 STO 11 STO 12 7 STO 13 5 STO 14
and with h = 1
( FIX 4 ) 1 XEQ "SS3" >>>> ( the successive x-approximations are displayed ) d = 6.146981416 ( in 7mn57s )
-In FIX 5 , RCL 08 XEQ "SS3" , it yields d = 6.146981412
which is exact to 10 places.
3°) n-Dimensional Space
a) Point-Line Distance
-The point is determined by its coordinates: M( x1 ,
...... , xn )
-The line (L) is defined by a point A( a1 , ...... , an
) and a vector U( u1 , ...... , un
)
Formula:
d = || AM - t.U || where t =
AM.U / || U ||2
Data Registers: • R00 = n ( these (3n+1) registers are to be initialized before executing "PLN" )
• R01 = a1 • Rn+1 = u1
• R2n+1 = x1
.............. ...............
.................
• Rnn = an • R2n = un
• R3n = xn
Flags: /
Subroutines: /
01 LBL "PLN" 02 CLA 03 RCL 00 04 ENTER^ 05 ENTER^ 06 ST+ X 07 STO M 08 + 09 STO N 10 CLX |
11 LBL 01 12 RCL IND N 13 RCL IND Z 14 - 15 RCL IND M 16 ST* Y 17 X^2 18 ST+ O 19 RDN 20 + |
21 DSE M 22 DSE N 23 DSE Y 24 GTO 01 25 RCL O 26 / 27 STO O 28 RCL 00 29 3 30 * |
31 0 32 LBL 02 33 RCL IND N 34 RCL O 35 * 36 RCL IND M 37 + 38 RCL IND Z 39 - 40 X^2 |
41 + 42 DSE Y 43 DSE N 44 DSE M 45 GTO 02 46 SQRT 47 CLA 48 END |
( 78 bytes / SIZE 3n+1 )
STACK | INPUTS | OUTPUTS |
X | / | distance |
Example: (L) is defined by A(2,3,4,5)
& U(1,4,7,9) and
M(1,3,7,9)
n = 4 STO 00
2 STO 01 1 STO 05
1 STO 09
3 STO 02 4 STO 06
3 STO 10
4 STO 03 7 STO 07
7 STO 11
5 STO 04 9 STO 08
9 STO 12
XEQ "PLN" >>>> d = 2.160246900
b) Point-Hyperplane Distance
-The point is determined by its coordinates: M( x1 ,
...... , xn )
-The hyperplane (H) by one of its equations: a1.x1
+ ...... + an.xn = b
Formula: d = | a1.x1
+ ...... + an.xn - b | / ( a12
+ ..... + an2 )1/2
Data Registers: • R00 = b ( these (2n+1) registers are to be initialized before executing "PHP" )
• R01 = a1 • Rn+1 = x1
.............. ...............
• Rnn = an • R2n = xn
Flags: /
Subroutines: /
01 LBL "PHP" 02 CLA 03 STO N 04 ST+ X 05 RCL 00 |
06 LBL 01 07 RCL IND N 08 X^2 09 ST+ M 10 X<> L |
11 RCL IND Z 12 * 13 - 14 DSE Y 15 DSE N |
16 GTO 01 17 ABS 18 RCL M 19 SQRT 20 / |
21 X<>Y
22 SIGN 23 RDN 24 CLA 25 END |
( 43 bytes / SIZE 2n+1 )
STACK | INPUTS | OUTPUTS |
X | n | distance |
L | / | n |
Example: (H): 2x + 3y + 4z +
7t = 9 M(1,3,9,6)
9 STO 00
2 STO 01 1
STO 05
3 STO 02 3 STO
06
4 STO 03 9 STO
07
7 STO 04 6 STO
08
n = 4 XEQ "PHP" >>>> d =
9.058216273
c) Line-Line Distance ( 2
programs )
-(L) is defined by one point A( a1 , ...... , an
) and one vector U( u1 , ...... , un
)
-(L') is defined by one point B( b1 , ...... , bn )
and one vector V( v1 , ...... , vn )
Formula:
d = [ Sum i=1,...,n ( bi - ai - t.ui + t'.vi )2] 1/2 where t & t' are the solutions of the following system:
t || U ||2 - t' U.V
= AB.U
where "." is the dot-product
t U.V - t' || V ||2
= AB.V
-This linear system is obtained after equating to zero the partial derivatives
of d with respect to t and t'
Data Registers: • R00 = n ( these (4n+1) registers are to be initialized before executing "LLN" )
• R01 = a1 • Rn+1 = u1
• R2n+1 = b1 • R3n+1 = v1
.............. ...............
................. ................
• Rnn = an • R2n = un
• R3n = bn • R4n
= vn
Flags: /
Subroutines: /
01 LBL "LLN" 02 CLA 03 RCL 00 04 STO M 05 ST+ X 06 ST+ X 07 STO N 08 CLST 09 STO Q 10 LBL 01 11 RCL N 12 RCL 00 13 - 14 RDN 15 RCL IND T 16 RCL IND M 17 - 18 RCL 00 19 ST+ M 20 CLX 21 RCL IND M |
22 X^2 23 ST+ T 24 X<> L 25 X<>Y 26 * 27 ST+ O 28 CLX 29 RCL IND N 30 LASTX 31 X<>Y 32 * 33 ST+ P 34 X<> L 35 X^2 36 + 37 RCL IND M 38 RCL IND N 39 * 40 ST+ Q 41 CLX 42 RCL 00 |
43 ST- M 44 RDN 45 DSE N 46 DSE M 47 GTO 01 48 X<>Y 49 RCL P 50 * 51 RCL O 52 SIGN 53 CLX 54 RCL Q 55 ST* L 56 X<> L 57 - 58 STO P 59 X<> T 60 RCL Y 61 * 62 RCL Q 63 X^2 |
64 - 65 X#0? 66 ST/ P 67 X<> Q 68 RCL P 69 * 70 RCL O 71 - 72 R^ 73 / 74 STO Q 75 RCL 00 76 STO M 77 CLX 78 LBL 02 79 RCL IND M 80 RCL IND N 81 - 82 RCL N 83 RCL 00 84 + |
85 RDN 86 RCL IND T 87 RCL P 88 * 89 + 90 RCL M 91 RCL 00 92 + 93 RDN 94 RCL IND T 95 RCL Q 96 * 97 - 98 X^2 99 + 100 DSE N 101 DSE M 102 GTO 02 103 SQRT 104 CLA 105 END |
( 162 bytes / SIZE 4n+1 )
STACK | INPUTS | OUTPUTS |
X | / | distance |
Example:
(L) is defined by A(2,3,4,5) & U(1,4,7,2)
(L') is defined by B(1,2,3,7) & V(2,5,1,3)
n = 4 STO 00
2 STO 01
1 STO 05 1 STO 09
2 STO 13
3 STO 02
4 STO 06 2 STO 10
5 STO 14
4 STO 03
7 STO 07 3 STO 11
1 STO 15
5 STO 04
2 STO 08 7 STO 12
3 STO 16
XEQ "LLN" >>>> d = 2.428923172
-With V(2,8,14,4) the 2 lines are parallel and it yields:
d = 2.466924054
Notes:
-If n = 2, d is always equal to zero unless (L) and (L') are both parallel and distinct.-Unlike the previous version, synthetic register a is unused and this new program does not use any subroutine.
-As usual, synthetic registers M N O P Q may be replaced by any unused registers, for instance R95 R96 R97 R98 R99 ... provided n < 24.
-We can also store the coordinates in other registers:
Data Registers: R00 to R10: temp R01 = bb.ee .... R04 = bb.ee''' ( the 4n • registers are to be initialized before executing "LLN" )
• Rbb = a1 • Rbb' = u1
• Rbb" = b1 • Rbb'''
= v1
.............. ...............
................. ................
• Ree = an • Ree' = un
• Ree" = bn • Ree'''
= vn
Flags: /
Subroutines: /
01 LBL "LLN" 02 STO 04 03 X<>Y 04 STO 03 05 R^ 06 STO 01 07 R^ 08 STO 02 09 XEQ 00 10 STO 05 11 RCL 04 12 XEQ 00 13 STO 06 14 RCL 02 15 RCL 04 16 XEQ 02 17 STO 07 18 RCL 03 19 RCL 02 20 XEQ 02 21 STO 08 22 RCL 01 23 RCL 02 |
24 XEQ 02 25 ST- 08 26 RCL 03 27 RCL 04 28 XEQ 02 29 STO 09 30 RCL 01 31 RCL 04 32 XEQ 02 33 ST- 09 34 RCL 09 35 RCL 07 36 / 37 STO 10 38 RCL 05 39 RCL 06 40 * 41 RCL 07 42 X^2 43 - 44 STO 00 45 X=0? 46 GTO 04 |
47 RCL 06 48 RCL 08 49 * 50 RCL 07 51 RCL 09 52 * 53 - 54 X<>Y 55 / 56 STO 10 57 RCL 07 58 RCL 08 59 * 60 RCL 05 61 RCL 09 62 * 63 - 64 RCL 00 65 / 66 STO 00 67 CLX 68 GTO 04 69 LBL 00 |
70 0 71 LBL 01 72 RCL IND Y 73 X^2 74 + 75 ISG Y 76 GTO 01 77 RTN 78 LBL 02 79 0 80 STO 00 81 RDN 82 LBL 03 83 RCL IND Y 84 RCL IND Y 85 * 86 ST+ 00 87 CLX 88 SIGN 89 + 90 ISG Y 91 GTO 03 92 RCL 00 |
93 RTN 94 LBL 04 95 RCL IND 04 96 RCL 00 97 * 98 RCL IND 02 99 RCL 10 100 * 101 - 102 RCL IND 03 103 + 104 RCL IND 01 105 - 106 X^2 107 + 108 SIGN 109 ST+ 01 110 ST+ 02 111 ST+ 03 112 LASTX 113 ISG 04 114 GTO 04 115 SQRT 116 END |
( 159 bytes / SIZE ??? )
STACK | INPUTS | OUTPUTS |
T |
bbb.eee(A) |
/ |
Z |
bbb.eee(U) |
/ |
Y |
bbb.eee(B) |
/ |
X | bbb.eee(V) | distance |
Example:
(L) is defined by A(2,3,4,5) & U(1,4,7,2)
(L') is defined by B(1,2,3,7) & V(2,5,1,3)
-If we store the coordinates in R11 .... R26
2 STO 11 1 STO 15 1 STO 19 2 STO 23
3 STO 12 4 STO 16 2 STO 20 5 STO 24
4 STO 13 7 STO 17 3 STO 21 1 STO 25
5 STO 14 2 STO 18 7 STO 22 3 STO 26
11.014 ENTER^
15.018 ENTER^
19.022 ENTER^
23.026 XEQ "LLN" >>>> d = 2.428923172 ---Execution time = 13s---
-With V(2,8,14,4) it yields: d = 2.466924054
-When the program stops, R01 thru R04 are replaced by n+bb.ee , ...... , n+bb.ee'''
-The coordinates are unchanged.
d) Distance between 2 Hypersurfaces
( one example only )
-Let 2 hypersurfaces (H) & (H') defined by t = x2
+ 2y2 + 3z2 & t = 7 - (x-4)2
- (y-5)2 - 2(z-6)2
-To compute the distance d between (H) & (H'), we try to minimize MM'
( or MM'2 ) where M(x,y,z,t) is on (H) and M'(x',y',z',t')
is on (H')
-We have
MM'2 = (x-x')2 + (y-y')2
+ (z-z')2 + (t-t')2
=
(x-x')2 + (y-y')2 + (z-z')2 + [ x2
+ 2y2 + 3z2 - 7 + (x'-4)2 + (y'-5)2
+ 2(z'-6)2 ]2
-We can use "EXN" to minimize this function of 6 variables.
- x , y , z , x' , y' , z' will be stored in registers R11 thru R16
( cf the instructions for use in "Extrema for the HP-41" )
-So we load the following routine:
LBL "T" RCL 11 RCL 14 - X^2 RCL 12 RCL 15 - X^2 + |
RCL 13 RCL 16 - X^2 + RCL 11 X^2 RCL 12 X^2 ST+ X |
+ RCL 13 X^2 3 * + 7 - RCL 14 4 |
- X^2 + RCL 15 5 - X^2 + RCL 16 6 |
- X^2 ST+ X + X^2 + RTN |
-Then "T" ASTO 00
-If we choose x = y = z = 0 and x' = 4 , y' = 5 , z' = 6 as initial guesses
0 STO 11 4 STO 14
0 STO 12 5 STO 15
0 STO 13 6 STO 16
-And with h = 1 and n = 6 variables
FIX 4
1 ENTER^
6 XEQ "EXN" >>>> d2
= 32.75378845 whence d = 5.723092560
( in 18mn17s )
-In FIX 5
RCL 08 ( the
last h-value)
6 R/S >>>>
d2 = 32.75378841 whence d = 5.723092556
( in fact, the same result is also obtained in FIX 9 )
Important Note:
-Like all the programs that call "EX" , "EXY" or "EXN" , this method
can lead to a local minimum
which is different from "the" minimum = distance d
if the guesses are too bad...