This program is Copyright © 2007 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.
1°) Numerov's method
a) 1 differential equation
y" = f(x,y)
b) 2 differential equations
y" = f(x,y,z) ; z" = g(x,y,z)
c) n differential equations
y"1 = f1(x;y1,.....,yn)
, ....... , y"n = fn(x;y1,.....,yn)
( X-Functions Module required )
2°) A formula of order 7
a) 1 differential equation
y" = f(x,y)
b) 2 differential equations
y" = f(x,y,z) ; z" = g(x,y,z)
c) n differential equations
y"1 = f1(x;y1,.....,yn)
, ....... , y"n = fn(x;y1,.....,yn)
( X-Functions Module required )
-Numerov's method has been devised to solve second order differential
equations where the first derivative y' does not appear explicitly.
-The formula is: yn+1 = 2.yn - yn-1
+ (h2/12).( fn+1 + 10.fn + fn-1
) where h = xn - xn-1 is the stepsize
and fk = f(xk,yk) ;
yn-j = y(xn-j.h)
-It requires 2 starting values y-1 and y0
instead of y0 and y'0 .
-The method duplicates the Taylor series up to the term in h5
-Since it is an implicit formula ( yn+1 appears on both sides
) , we use an iterative method at each step.
1°) Numerov's Method
a) 1 differential equation
y" = f(x,y)
Data Registers: • R00 = f name ( Registers R00 thru R05 are to be initialized before executing "NUM1" )
• R01 = x0
• R02 = y0 • R03 = y-1 =
y(x0 - h ) • R04 = h = stepsize
• R05 = N = number of steps R06 to
R10: temp
Flags: /
Subroutine: A program which computes
f(x,y) assuming x is in X-register and y is in Y-register upon
entry
01 LBL "NUM1"
02 RCL 05
03 STO 06
04 RCL 03
05 RCL 01
06 RCL 04
07 -
08 XEQ IND 00
09 STO 07
10 RCL 02
11 STO 10
12 RCL 01
13 XEQ IND 00
14 STO 08
15 LBL 01
16 RCL 10
17 RCL 01
18 RCL 04
19 +
20 XEQ IND 00
21 STO 09
22 RCL 08
23 10
24 *
25 +
26 RCL 07
27 +
28 RCL 04
29 X^2
30 *
31 12
32 /
33 RCL 02
34 ST+ X
35 RCL 03
36 -
37 +
38 ENTER^
39 X<> 10
40 VIEW X
this line is only useful to display the successive approximations, but
it's not necessary for the calculations.
41 X#Y?
42 GTO 01
43 X<> 02
44 STO 03
45 RCL 04
46 ST+ 01
47 RCL 09
48 X<> 08
49 STO 07
50 DSE 06
51 GTO 01
52 RCL 02
53 RCL 01
54 CLD
55 END
( 78 bytes / SIZE 011 )
STACK | INPUTS | OUTPUTS |
Y | / | y(x0+N.h) |
X | / | x0+N.h |
Example: y" = ( x2 - 1 ).y ; y(0) = 1 & y(-0.1) = 0.995012479
-Let's evaluate y(1)
-First, we load the required subroutine in main memory, for instance:
LBL "T" any global label, maximum 6 characters
X^2
1
-
*
RTN
"T" ASTO 00
0 STO 01
1 STO 02
0.995012479 STO 03
0.1 STO 04
10 STO 05 ( here, h = 0.1
and N = 10 )
XEQ "NUM1" gives
x = 1
( in 53 seconds ( or 48 seconds if you delete line 40 ) )
X<>Y y(1) = 0.606528753
-To continue with the same N-value, simply press R/S , it yields y(2) = 0.135332761
-The solution was actually y(x) = exp ( -x2/2 ) so y(1) = 0.606530660 and y(2) = 0.135335283 the error is of the order of 3 E-6
Notes:
-In a trajectory problem , we can use tabulated values to begin the
calculations.
-If we don't have 2 starting values, the second may be found by a Runge-Kutta
method, provided you know y'0 .
-The loop stops when 2 consecutive approximations are equal ( line 41
).
-This might lead to an infinite loop but practically, the risk is tiny
because of the factor h2 in the formula - provided h remains
"reasonably small" however.
b) 2 differential equations
y" = f(x,y,z) ; z" = g(x,y,z)
-Of course, the method may be generalized to systems of differential
equations:
Data Registers: • R00 = subroutine name ( Registers R00 thru R07 are to be initialized before executing "NUM2" )
• R01 = x0
• R02 = y0 • R04 = h = stepsize
• R06 = y-1 = y(x0 - h )
• R03 = z0 • R05 = N = number of steps
• R07 = z-1 = z(x0 - h )
R08 to R16: temp
Flags: /
Subroutine: A program which computes
f(x,y,z) in Y-register
and g(x,y,z) in X-register assuming x is in X-register,
y is in Y-register and z is in Z-register upon entry
01 LBL "NUM2"
02 RCL 05
03 STO 16
04 RCL 07
05 RCL 06
06 RCL 01
07 RCL 04
08 -
09 XEQ IND 00
10 STO 13
11 X<>Y
12 STO 10
13 RCL 03
14 STO 09
15 RCL 02
16 STO 08
17 RCL 01
18 XEQ IND 00
19 STO 14
20 X<>Y
21 STO 11
22 LBL 01
23 RCL 09
24 RCL 08
25 RCL 01
26 RCL 04
27 +
28 XEQ IND 00
29 STO 15
30 RCL 14
31 10
32 *
33 +
34 RCL 13
35 +
36 X<>Y
37 STO 12
38 RCL 11
39 10
40 *
41 +
42 RCL 10
43 +
44 RCL 04
45 X^2
46 12
47 /
48 ST* Z
49 *
50 RCL 06
51 -
52 RCL 02
53 ST+ X
54 +
55 ENTER^
56 X<> 08
57 -
58 ABS
59 X<>Y
60 RCL07
61 -
62 RCL 03
63 ST+ X
64 +
65 ENTER^
66 X<> 09
67 -
68 ABS
69 +
70 X#0?
71 GTO 01
72 RCL 08
73 X<> 02
74 STO 06
75 RCL 09
76 X<> 03
77 STO 07
78 RCL 12
79 X<> 11
80 STO 10
81 RCL 15
82 X<> 14
83 STO 13
84 RCL 04
85 ST+ 01
86 DSE 16
87 GTO 01
88 RCL 03
89 RCL 02
90 RCL 01
91 END
( 120 bytes / SIZE 017 )
STACK | INPUTS | OUTPUTS |
Z | / | z(x0+N.h) |
Y | / | y(x0+N.h) |
X | / | x0+N.h |
Example: y" = ( x - 2 ).z
y(1) = 0.367879441 y(0.9) =
0.365912694
z" = y/x
z(1) = 0.367879441 z(0.9) =
0.406569660
-Evaluate y(2) & z(2)
LBL "T"
ST/ Y
2
-
ST* Z
RDN
RTN
"T" ASTO 00
1 STO 01
0.367879441 STO 02 STO 03
h = 0.1 STO 04 ,
N = 10 STO 05
0.365912694 STO 06
0.406569660 STO 07
XEQ "NUM2" >>>>
x = 2
( in 81 seconds )
RDN y(2) = 0.270670254
RDN z(2) = 0.135335322
-In fact, y = x exp(-x) and z = exp(-x) , so the exact results are y(2) = 0.270670566 & z(2) = 0.135335283
-Press R/S to continue the calculations ( after changing N in R05 if
needed )
c) n differential equations
y"1 = f1(x;y1,.....,yn)
, ....... , y"n = fn(x;y1,.....,yn)
Data Registers: • R00 = subroutine name ( Registers R00 thru R02 and R09 thru R2n+10 are to be initialized before executing "NUM" )
• R01 = N = number of steps • R02 = h = stepsize R03 to R08: temp
• R09 = n = number of equations
• R10 = x0
• R11 = y1(x0)
• R11+n = y1(x0-h)
• R12 = y2(x0)
• R12+n = y2(x0-h)
R11 thru R10+2n contain
.....................
..........................
the 2 starting values
• R10+n = yn(x0)
• R10+2n = yn(x0-h)
-During the calculations, R11+n to R10+2n = fi(1)
the n values of the functions for x = x0+h
R11+2n to R10+3n = fi(0)
------------------------------- x = x0
R11+3n to R10+4n = fi(-1)
------------------------------- x = x0-h
R11+4n to R10+5n = yi(0)
--------------- yi(x0)
R11+5n to R10+6n = yi(-1)
--------------- yi(x0-h)
Flags: /
Subroutine: A program which computes
and
stores f1(x;y1,.....,yn)
, ....... , fn(x;y1,.....,yn) into
R11+n , .......... , R10+2n respectively
with x ; y1,.....,yn in R10 ; R11 , .........
, R10+n respectively
01 LBL "NUM"
02 RCL 09
03 4
04 *
05 11.011
06 STO 07
07 INT
08 +
09 STO 03
10 E3
11 /
12 RCL 07
13 INT
14 +
15 RCL 09
16 E6
17 /
18 STO 04
19 ST+ X
20 +
21 REGMOVE
22 XEQ IND 00
23 RCL 09
24 .1
25 %
26 ST+ X
27 +
28 RCL 07
29 +
30 RCL 04
31 +
32 STO 05
33 REGMOVE
34 RCL 03
35 RCL 07
36 FRC
37 +
38 RCL 04
39 +
40 STO 06
41 RCL 09
42 +
43 REGMOVE
44 RCL 02
45 ST- 10
46 XEQ IND 00
47 RCL 05
48 RCL 09
49 E3
50 /
51 +
52 REGMOVE
53 RCL 06
54 REGMOVE
55 RCL 02
56 ST+ 10
Lines 01 to 56 are only executed the first time in order to initialize
some registers.
57 LBL 01
58 RCL 01
59 STO 08
60 LBL 02
61 RCL 02
62 ST+ 10
63 LBL 03
64 XEQ IND 00
65 RCL 09
66 RCL 09
67 RCL 09
68 10.01
69 +
70 STO 07
71 INT
72 +
73 STO 06
74 +
75 STO 05
76 +
77 STO 04
78 +
79 STO 03
80 CLX
81 LBL 04
82 RCL IND 04
83 RCL IND 05
84 10
85 *
86 +
87 RCL IND 06
88 +
89 RCL 02
90 X^2
91 *
92 12
93 /
94 RCL IND 03
95 ST+ X
96 +
97 RCL 03
98 RCL 09
99 +
100 RDN
101 RCL IND T
102 -
103 ENTER^
104 X<> IND 07
105 -
106 ABS
107 +
108 DSE 03
109 DSE 04
110 DSE 05
111 DSE 06
112 DSE 07
113 GTO 04
114 X#0?
115 GTO 03
the loop stops when 2 consecutive approximations are equal
116 RCL 05
117 1
118 +
119 .1
120 %
121 +
122 RCL 09
123 ST- Y
124 E6
125 /
126 STO 07
127 4
128 *
129 +
130 REGMOVE
131 RCL 03
132 1
133 +
134 E3
135 /
136 RCL 07
137 +
138 11
139 +
140 REGMOVE
141 DSE 08
142 GTO 02
143 RCL 13
144 RCL 12
145 RCL 11
146 RCL 10
147 RTN
148 GTO 01
149 END
( 210 bytes / SIZE 6n+11 )
STACK | INPUTS | OUTPUTS |
T | / | y3(x0+N.h) |
Z | / | y2(x0+N.h) |
Y | / | y1(x0+N.h) |
X | / | x0+N.h |
Example: We want to study the
motion of a planet around a point sun ( the mass of the planet is neglected
).
Here, the variable is t = time ( in days ), and y1 , y2
, y3 are denoted x , y , z ( the coordinates
are expressed in Astronomical Units )
x" = -k2 x/(x2+y2+z2)3/2
-The equations are y" = -k2
y/(x2+y2+z2)3/2
where k = 0.01720209895 is Gauss' constant
z" = -k2 z/(x2+y2+z2)3/2
-At t = 0 x = 0.092
at t = -1 x = 0.070
Find the position of the planet at t = 2 days
y = -0.445
y = -0.451
z = -0.045
z = -0.043
-We store -k2 in register R30
17.20209895 E-3 X^2 CHS STO 30
-we load the following subroutine in main memory:
LBL "T" X^2
RCL 13 SQRT
STO 14 RCL 29
RCL 30 STO 16
RCL 30 RCL 12
X^2
*
RCL 12 /
*
RTN
RCL 11 X^2
+
STO 29 RCL 30
STO 15 RCL 29
ST* Y +
ENTER^ /
*
RCL 13 /
"T" ASTO 00 number of steps = 2 STO 01 stepsize h = 1 STO 02 there are 3 equations: 3 STO 09 then the initial values:
0
STO 10
0.092 STO 11
0.070 STO 14
-0.445 STO 12
-0.451 STO 15
-0.045 STO 13
-0.043 STO 16
XEQ "NUM" >>>> t =
2
( execution time = 56 seconds )
RDN x = 0.135070 = R11
RDN y = -0.428856 = R12
RDN z = -0.048573 = R13
N.B: To continue, press R/S or XEQ 01
( after changing N in register R01 if needed )
but
not XEQ "NUM" because the second new initial
values are not in registers R14 thru R16 but in R26-R27-R28
-With the same N-value ( N = 2 ), you should find t = 4 , x = 0.176408 , y = -0.407227 , z = -0.051524
-For a planet like Mercury with h = 1 day, the error
is of the order of 2.7 10 -5 AU
after 88 days
---- h = 0.5 day, -------------------------- 1.6
10 -6 AU -------------
-When h is divided by 2, the errors are approximately divided by 16
= 24
2°) A formula of order 7
-We can use more than 2 starting values in order to reach a better accuracy.
-The following formula duplicates the Taylor's series up to the term
in h7
yn+1 = yn + yn-2 - yn-3 + (h2/240).( 17. fn+1 + 232.fn + 222.fn-1 + 232.fn-2 + 17.fn-3 ) [ h = the stepsize , fk = f(xk,yk) , yn-j = y(xn-j.h) ]
-4 values are needed to initialize the algorithm: y0
, y-1 , y-2 , y-3
a) 1 differential equation
y" = f(x,y)
Data Registers: • R00 = f name ( Registers R00 thru R07 are to be initialized before executing "7NUM1" )
• R01 = x0
• R02 = y0 • R03 = y-1 =
y(x0 - h ) • R04 =
h = stepsize • R05 = N = number of steps
• R06 = y-2 = y(x0 - 2.h )
• R07 = y-3 = y(x0 - 3.h )
R08 to R14: temp
Flags: /
Subroutine: A program which computes
f(x,y) assuming x is in X-register and y is in Y-register upon
entry
01 LBL "7NUM1"
02 RCL 05
03 STO 08
04 RCL 07
05 RCL 01
06 RCL 04
07 3
08 *
09 -
10 XEQ IND 00
11 STO 09
12 RCL 06
13 RCL 01
14 RCL 04
15 ST+ X
16 -
17 XEQ IND 00
18 STO 10
19 RCL 03
20 RCL 01
21 RCL 04
22 -
23 XEQ IND 00
24 STO 11
25 RCL 02
26 STO 14
27 RCL 01
28 XEQ IND 00
29 STO 12
30 LBL 01
31 RCL 14
32 RCL 01
33 RCL 04
34 +
35 XEQ IND 00
36 STO 13
37 RCL 09
38 +
39 17
40 *
41 RCL 10
42 RCL 12
43 +
44 232
45 *
46 +
47 RCL 11
48 222
49 *
50 +
51 240
52 /
53 RCL 04
54 X^2
55 *
56 RCL 07
57 -
58 RCL 06
59 +
60 RCL 02
61 +
62 ENTER^
63 X<> 14
64 X#Y?
65 GTO 01
66 X<> 02
67 X<> 03
68 X<> 06
69 STO 07
70 RCL 13
71 X<> 12
72 X<> 11
73 X<> 10
74 STO 09
75 RCL 04
76 ST+ 01
77 DSE 08
78 GTO 01
79 RCL 02
80 RCL 01
81 END
( 115 bytes / SIZE 015 )
STACK | INPUTS | OUTPUTS |
Y | / | y(x0+N.h) |
X | / | x0+N.h |
Example: y" = ( x2 - 1 ).y Knowing y(0) = 1 ; y(-0.1) = 0.995012479 ; y(-0.2) = 0.980198673 ; y(-0.3) = 0.955997482
-Evaluate y(1)
LBL "T"
X^2
1
-
*
RTN
"T" ASTO 00
0 STO 01
1 STO 02
0.995012479 STO 03
h = 0.1 STO 04 , N = 10 STO
05
0.980198673 STO 06
0.955997482 STO 07
XEQ "7NUM1" gives
x = 1
( in 70 seconds )
X<>Y y(1) = 0.606530689
-To continue with the same N-value, simply press R/S , it yields y(2) = 0.135335319
-The errors are of the order of 3 E-8
b) 2 differential equations
y" = f(x,y,z) ; z" = g(x,y,z)
Data Registers: • R00 = subroutine name ( Registers R00 thru R11 are to be initialized before executing "7NUM2" )
• R01 = x0
• R02 = y0 • R04 = h = stepsize
• R06 = y-1 = y(x0 - h )
• R09 = z-1 = z(x0 - h )
• R03 = z0 • R05 = N = number of steps
• R07 = y-2 = y(x0 - 2h )
• R10 = z-2 = z(x0 - 2h )
R12 to R24: temp
• R08 = y-3 = y(x0 - 3h )
• R11 = z-3 = z(x0 - 3h )
Flags: /
Subroutine: A program which computes
f(x,y,z) in Y-register
and g(x,y,z) in X-register assuming x is in X-register,
y is in Y-register and z is in Z-register upon entry
01 LBL "7NUM2"
02 RCL 05
03 STO 24
04 RCL 11
05 RCL 08
06 RCL 04
07 3
08 *
09 RCL 01
10 X<>Y
11 -
12 XEQ IND 00
13 STO 17
14 X<>Y
15 STO 12
16 RCL 10
17 RCL 07
18 RCL 01
19 RCL 04
20 ST+ X
21 -
22 XEQ IND 00
23 STO 18
24 X<>Y
25 STO 13
26 RCL 09
27 RCL 06
28 RCL 01
29 RCL 04
30 -
31 XEQ IND 00
32 STO 19
33 X<>Y
34 STO 14
35 RCL 03
36 STO 23
37 RCL 02
38 STO 22
39 RCL 01
40 XEQ IND 00
41 STO 20
42 X<>Y
43 STO 15
44 LBL 01
45 RCL 23
46 RCL 22
47 RCL 01
48 RCL 04
49 +
50 XEQ IND 00
51 STO 21
52 RCL 17
53 +
54 17
55 *
56 RCL 18
57 RCL 20
58 +
59 232
60 *
61 +
62 RCL 19
63 222
64 *
65 +
66 X<>Y
67 STO 16
68 RCL 12
69 +
70 17
71 *
72 RCL 13
73 RCL 15
74 +
75 232
76 *
77 +
78 RCL 14
79 222
80 *
81 +
82 RCL 04
83 X^2
84 240
85 /
86 ST* Z
87 *
88 RCL 08
89 -
90 RCL 07
91 +
92 RCL 02
93 +
94 ENTER^
95 X<> 22
96 -
97 ABS
98 X<>Y
99 RCL 11
100 -
101 RCL 10
102 +
103 RCL 03
104 +
105 ENTER^
106 X<> 23
107 -
108 ABS
109 +
110 X#0?
111 GTO 01
112 RCL 22
113 X<> 02
114 X<> 06
115 X<> 07
116 STO 08
117 RCL 23
118 X<> 03
119 X<> 09
120 X<> 10
121 STO 11
122 RCL 16
123 X<> 15
124 X<> 14
125 X<> 13
126 STO 12
127 RCL 21
128 X<> 20
129 X<> 19
130 X<> 18
131 STO 17
132 RCL 04
133 ST+ 01
134 DSE 24
135 GTO 01
a three-byte GTO
136 RCL 03
137 RCL 02
138 RCL 01
139 END
( 207 bytes / SIZE 025 )
STACK | INPUTS | OUTPUTS |
Z | / | z(x0+N.h) |
Y | / | y(x0+N.h) |
X | / | x0+N.h |
Example: y" = ( x - 2 ).z
y(1) = 0.367879441 y(0.9) =
0.365912694 y(0.8) = 0.359463171
y(0.7) = 0.347609713
z" = y/x
z(1) = 0.367879441 z(0.9) =
0.406569660 z(0.8) = 0.449328964
z(0.7) = 0.496585304
-Evaluate y(2) & z(2)
LBL "T"
ST/ Y
2
-
ST* Z
RDN
RTN
"T" ASTO 00
1 STO 01
0.367879441 STO 02 STO 03
h = 0.1 STO 04 ,
N = 10 STO 05
0.365912694 STO 06
0.406569660 STO 09
0.359463171 STO 07
0.449328964 STO 10
0.347609713 STO 08
0.496585304 STO 11
XEQ "7NUM2" >>>> x = 2
( in 125 seconds )
RDN y(2) = 0.270670563
RDN z(2) = 0.135335281
-The errors are of the order of 3 E-9
-Press R/S to continue the calculations ( after changing N in R05 if
needed )
c) n differential equations
y"1 = f1(x;y1,.....,yn)
, ....... , y"n = fn(x;y1,.....,yn)
Data Registers: • R00 = subroutine name ( Registers R00 thru R02 and R13 thru R4n+14 are to be initialized before executing "7NUM" )
• R01 = N = number of steps • R02 = h = stepsize R03 to R12: temp
• R13 = n = number of equations
• R14 = x0
• R15 = y1(x0)
• R15+n = y1(x0-h)
• R15+2n = y1(x0-2h)
• R15+3n = y1(x0-3h)
• R16 = y2(x0)
• R16+n = y2(x0-h)
• R16+2n = y2(x0-2h)
• R16+3n = y2(x0-3h)
R15 thru R14+4n
.....................
..........................
..............................
contain
• R14+n = yn(x0)
• R14+2n = yn(x0-h)
• R14+3n = yn(x0-2h)
• R14+4n = yn(x0-3h)
the 4 starting values
-During the calculations, R15+n to R14+2n = fi(1)
the n values of the functions for x = x0+h
R15+2n to R14+3n = fi(0)
------------------------------- x = x0
R15+3n to R14+4n = fi(-1)
------------------------------- x = x0-h
R15+4n to R14+5n = fi(-2)
------------------------------- x = x0-2h
R15+5n to R14+6n = fi(-3)
------------------------------- x = x0-3h
R15+6n to R14+7n = yi(0)
--------------- yi(x0)
R15+7n to R14+8n = yi(-1)
--------------- yi(x0-h)
R15+8n to R14+9n = yi(-2)
--------------- yi(x0-2h)
R15+9n to R14+10n = yi(-3) ---------------
yi(x0-3h)
Flags: /
Subroutine: A program which computes
and
stores f1(x;y1,.....,yn)
, ....... , fn(x;y1,.....,yn) into
R15+n , .......... , R14+2n respectively
with x ; y1,.....,yn in R14 ; R15 , .........
, R14+n respectively
01 LBL "7NUM"
02 RCL 14
03 STO 10
04 RCL 13
05 E6
06 /
07 STO 03
08 4
09 *
10 RCL 13
11 E3
12 /
13 STO 04
14 6
15 *
16 +
17 15.015
18 STO 05
19 +
20 REGMOVE
21 LASTX
22 RCL 03
23 +
24 RCL 04
25 +
26 RCL 13
27 +
28 STO 06
29 RCL 03
30 RCL 05
31 +
32 RCL 13
33 6
34 *
35 +
36 STO 07
37 STO 08
38 4
39 STO 09
40 LBL 10
41 XEQ IND 00
42 RCL 04
43 RCL 06
44 +
45 STO 06
46 REGMOVE
47 DSE 09
48 X=0?
49 GTO 00
50 RCL 07
51 RCL 13
52 +
53 STO 07
54 REGMOVE
55 RCL 02
56 ST- 14
57 GTO 10
58 LBL 00
59 RCL 08
60 REGMOVE
61 RCL 10
62 STO 14
Lines 01 to 62 are only executed the first time in order to initialize
some registers.
63 LBL 01
64 RCL 01
65 STO 12
66 LBL 02
67 RCL 02
68 ST+ 14
69 LBL 03
70 XEQ IND 00
71 RCL 13
72 RCL 13
73 RCL 13
74 14.014
75 +
76 STO 03
77 INT
78 +
79 STO 04
80 +
81 STO 05
82 +
83 STO 06
84 +
85 STO 07
86 +
87 STO 08
88 +
89 STO 09
90 +
91 +
92 STO 10
93 +
94 STO 11
95 CLX
96 LBL 04
97 RCL IND 04
98 RCL IND 08
99 +
100 17
101 *
102 RCL IND 05
103 RCL IND 07
104 +
105 232
106 *
107 +
108 RCL IND 06
109 222
110 *
111 +
112 RCL 02
113 X^2
114 *
115 240
116 /
117 RCL IND 09
118 +
119 RCL IND 10
120 +
121 RCL IND 11
122 -
123 ENTER^
124 X<> IND 03
125 -
126 ABS
127 +
128 DSE 11
129 DSE 10
130 DSE 09
131 DSE 08
132 DSE 07
133 DSE 06
134 DSE 05
135 DSE 04
136 DSE 03
137 GTO 04
138 X#0?
139 GTO 03
140 RCL 05
141 1
142 +
143 .1
144 %
145 +
146 RCL 13
147 ST- Y
148 E6
149 /
150 STO 07
151 8
152 *
153 +
154 REGMOVE
155 RCL 09
156 1
157 +
158 E3
159 /
160 RCL 07
161 +
162 15
163 +
164 REGMOVE
165 DSE 12
166 GTO 02
a three-byte GTO
167 RCL 17
168 RCL 16
169 RCL 15
170 RCL 14
171 RTN
172 GTO 01
a three-byte GTO
173 END
( 246 bytes / SIZE 10n+15 )
STACK | INPUTS | OUTPUTS |
T | / | y3(x0+N.h) |
Z | / | y2(x0+N.h) |
Y | / | y1(x0+N.h) |
X | / | x0+N.h |
Example: We study again the motion
of a planet around a point sun ( the mass of the planet is neglected ).
The variable is t = time ( in days ), and y1 , y2
, y3 are denoted x , y , z ( the coordinates
are expressed in Astronomical Units )
x" = -k2 x/(x2+y2+z2)3/2
-The equations are y" = -k2
y/(x2+y2+z2)3/2
where k = 0.01720209895 is Gauss' constant
z" = -k2 z/(x2+y2+z2)3/2
-At t = 0 x = 0.293510249
at t = -1 x = 0.301200207
at t = -2 x = 0.305864609
at t = -3 x = 0.307427938
y = 0.091967806
y = 0.061830391
y = 0.031072548
y = 0
z = 0.040946705
z = 0.027528664
z = 0.013834390
z = 0
Find the position of the planet at t = 4 days
-We store -k2 in register R45
17.20209895 E-3 X^2 CHS STO 45
and we load the following subroutine in main memory:
LBL "T" X^2
RCL 17 SQRT
STO 18 RCL 46
RCL 45 STO 20
RCL 45 RCL 16
X^2
*
RCL 16 /
*
RTN
RCL 15 X^2
+
STO 46 RCL 45
STO 19 RCL 46
ST* Y +
ENTER^ /
*
RCL 17 /
"T" ASTO 00 number of steps = 4 STO 01 stepsize h = 1 STO 02 there are 3 equations: 3 STO 13 then the initial values:
0 STO
14
0.293510249 STO 15
0.301200207 STO 18 0.305864609
STO 21 0.307427938 STO 24
0.091967806 STO 16
0.061830391 STO 19 0.031072548
STO 22
0 STO
25
0.040946705 STO 17
0.027528664 STO 20 0.013834390
STO 23
0 STO
26
XEQ "7NUM" >>> t =
4
= R14
( execution time = 2m32s )
RDN x = 0.235500989 = R15
RDN y = 0.200940664 = R16
RDN z = 0.089464547 = R17
N.B: To continue, press R/S or XEQ 01 ( after changing N in register R01 if needed ) but not XEQ "7NUM"
-For a planet like Mercury, with h = 1 day, the error
is of the order of 3.6 10 -7 AU
after 88 days
---- h = 0.5 day, -------------------------- 5.8
10 -9 AU -------------
-When h is divided by 2, the errors are approximately divided by 64 = 26
-In fact, the error - after 88 days with h = 0.5 day -
is 5.8 10 -9 AU on an HP-48,
but it reaches 1.6 10 -8 AU on an HP-41 because
of roundoff errors: the HP-41 works with 10 digits only!
Reference:
[1] Francis Scheid "Numerical Analysis"
McGraw-Hill ISBN 07-055197-9
Go back to the HP-41 software library
Go back to the general software library
Go
back to the main exhibit hall