hp41programs

Runge-Kutta10

Runge-Kutta Formula of order 10 for the HP-41


Overview
 

 0°)  169 Constants
 1°)  1 Differential Equation
 2°)  System of 2 Differential Equations
 3°)  System of 3 Differential Equations
 4°)  System of n Differential Equations
 

-These routines apply a 17-stage 10th-order Runge-Kutta formula to solve ODEs

-All s-stage explicit Runge-Kutta formulae without error estimate are determined by ( s2 + 3.s - 2 ) / 2  coefficients ai,j ; bi ; ci
-Here, s = 17 so  169 constants

    k1 = h.f(x;y)
    k2 = h.f(x+b2.h;y+a2,1.k1)
    k3 = h.f(x+b3.h;y+a3,1.k1+a3,2.k2)
    .............................................................                                         (  actually,     ai,1 + ai,2 + .......... + ai,i-1 = bi  )

    k17 = h.f(x+b17.h;y+a17,1.k1+a17,2.k2+ .......... +a17,16.k16)

then,     y(x+h) = y(x) + c1.k1+ ................ + c17.k17
 

0°)  169 Constants
 

-All the programs listed in paragraphs 1-2-3 use 169 constants.
-"C169" stores these numbers into registers R65 thru R233
-Registers R07 to R64 are also used.

-Allways execute "C169" before executing the other programs... unless you store your own 169 constants into R65 to R233 !
 

                                         •  R65 = a2,1                                                                                •  R66 = b2
                                         •  R67 = a3,1        •  R68 = a3,2                                                    •  R69 = b3

                                            .........................................................................                           ...........

                                         •  R200= a17,1  ........................................    •  R215 = a17,16       •  R216 = b17

                                         •  R217 = c1 .........................................................................       •  R233 = c17
 
 
 
 

 01 LBL "C169"
 02 8.085
 03 CLRGX
 04 .8950802958
 05 STO 07
 06 .1979668312
 07 STO 09
 08 .0729547847
 09 CHS
 10 STO 10
 11 .8512362396
 12 CHS
 13 STO 12
 14 .3983201123
 15 STO 13
 16 3.639372632
 17 STO 14
 18 1.54822877
 19 STO 15
 20 2.122217147
 21 CHS
 22 STO 16
 23 1.583503985
 24 CHS
 25 STO 17
 26 1.715616082
 27 CHS
 28 STO 18
 29 .0244036406
 30 CHS
 31 STO 19
 32 .3090367612
 33 STO 20
 34 .9151765614
 35 CHS
 36 STO 21
 37 1.454534402
 38 STO 22
 39 .7773336436
 40 STO 34
 41 CHS
 42 STO 25
 43 .0910895662
 44 STO 33
 45 CHS
 46 STO 27
 47 .5393578408
 48 STO 35
 49 .1
 50 STO 36
 51 STO 51
 52 STO 61
 53 .1571786658
 54 STO 50
 55 CHS
 56 STO 38
 57 .1817813007
 58 STO 52
 59 .675
 60 STO 53
 61 CHS
 62 STO 67
 63 .3427581598
 64 STO 54
 65 CHS
 66 STO 66
 67 .2591112146
 68 STO 56
 69 CHS
 70 STO 65
 71 .3582789667
 72 CHS
 73 STO 57
 74 1.045948959
 75 CHS
 76 STO 58
 77 .9303278454
 78 STO 59
 79 1.779509594
 80 STO 60
 81 .2825475695
 82 CHS
 83 STO 62
 84 .1593273501
 85 CHS
 86 STO 63
 87 .1455158946
 88 CHS
 89 STO 64
 90 1
 91 STO 68
 92 30
 93 1/X
 94 STO 69
 95 STO 71
 96 STO 85
 97 CHS
 98 STO 83
 99 40
100 1/X
101 STO 70
102 CHS
103 STO 84
104 .05
105 STO 73
106 CHS
107 STO 82
108 .04
109 STO 75
110 CHS
111 STO 81
112 .1892374781
113 STO 77
114 STO 80
115 .2774291885
116 STO 78
117 STO 79
118 7.155079
119 REGMOVE
120 9.096
121 CLRGX
122 .1
123 STO 07
124 STO 08
125 STO 83
126 .9151765614
127 CHS
128 STO 09
129 1.454534402
130 STO 10
131 .5393578408
132 STO 11
133 .2022591903
134 ENTER
135 STO 12
136 3
137 *
138 STO 14
139 +
140 STO 15
141 .5
142 -
143 STO 20
144 .1840247147
145 STO 16
146 .1979668312
147 STO 18
148 .0729547847
149 CHS
150 STO 19
151 .087900734
152 STO 21
153 .4104597025
154 STO 24
155 .4827137537
156 STO 25
157 .9810741902
158 STO 26
159 .0859700505
160 STO 27
161 .330885963
162 STO 30
163 .4896629573
164 STO 31
165 .0731856375
166 CHS
167 STO 32
168 1.2
169 1/X
170 STO 33
171 STO 96
172 .1209304491
173 STO 34
174 .2601246758
175 STO 38
176 .0325402622
177 STO 39
178 .0595780212
179 CHS
180 STO 40
181 .3540173659
182 STO 41
183 .1108543796
184 STO 42
185 .0605761488
186 CHS
187 STO 47
188 .3217637056
189 STO 48
190 .5104857256
191 STO 49
192 .882527662
193 STO 50
194 .1120544148
195 STO 51
196 .1449427759
197 CHS
198 STO 56
199 .3332697191
200 CHS
201 STO 57
202 .4992692296
203 STO 58
204 .5095046089
205 STO 59
206 .6426157582
207 STO 60
208 .113976784
209 STO 61
210 .0768813364
211 CHS
212 STO 66
213 .2395273603
214 STO 67
215 .3977746624
216 STO 68
217 .0107558957
218 STO 69
219 .3277691242
220 CHS
221 STO 70
222 .3573842418
223 STO 71
224 .0798314528
225 STO 72
226 .0520329687
227 CHS
228 STO 77
229 .0576954146
230 CHS
231 STO 78
232 .1947819157
233 STO 79
234 .1453849232
235 STO 80
236 .078294271
237 CHS
238 STO 81
239 .1145032994
240 CHS
241 STO 82
242 .117472338
243 STO 83
244 .9851156101
245 STO 84
246 .330885963
247 STO 87
248 .4896629573
249 STO 88
250 1.378964866
251 CHS
252 STO 89
253 .861164195
254 CHS
255 STO 90
256 5.784288136
257 STO 91
258 3.28807762
259 STO 92
260 2.386339051
261 CHS
262 STO 93
263 3.254793425
264 CHS
265 STO 94
266 2.163435417
267 CHS
268 STO 95
269 7.06509
270 REGMOVE
271 END

 
     ( 1271 bytes / SIZE 234 )
 
 

      STACK        INPUT      OUTPUT
           X             /             /

 
-Execution time = 35 seconds.
 
 

1°)  1 Differential Equation
 

-We want to solve  y' = f(x,y)  with the initial conditions    y(x0) = y0
 
 

Data Registers:          •  R00:  f name                                       ( Registers R00 to R04 & R65 to R233 are to be initialized before executing "RK10" )

                                     •  R01 = x0      •  R03 = h  = stepsize                 R05 & R10: temp            •  R65 to •  R233:  the 169 coefficients stored by "C169"
                                     •  R02 = y0      •  R04 = N = number of steps    R11 to R27:  k1 to k17

Flags: /
Subroutine:  a program calculating f(x;y) assuming x is in X-register and y is in Y-register upon entry.
 
 
 

 01 LBL "RK10" 
 02 RCL 04
 03 STO 06
 04 12.027
 05 STO 05
 06 11.001
 07 STO 10
 08 LBL 01
 09 .01
 10 STO 07
 11 65.9
 12 STO 08
 13 RCL 05
 14 STO 09
 15 RCL 02
 16 RCL 01
 17 XEQ IND 00
 18 RCL 03
 19 *
 20 STO 11
 21 LBL 02
 22 RCL 07
 23 FRC
 24 RCL 10
 25 +
 26 STO 07
 27 CLX
 28 LBL 03
 29 RCL IND 07
 30 RCL IND 08
 31 *
 32 +
 33 ISG 08
 34 ISG 07
 35 GTO 03
 36 RCL 02
 37 +
 38 RCL 03
 39 RCL IND 08
 40 *
 41 RCL 01
 42 +
 43 XEQ IND 00
 44 RCL 03
 45 *
 46 STO IND 09
 47 ISG 08
 48 ISG 09
 49 GTO 02
 50 17
 51 ST- 09
 52 CLX
 53 LBL 04
 54 RCL IND 08
 55 RCL IND 09
 56 *
 57 +
 58 ISG 08
 59 ISG 09
 60 GTO 04 
 61 ST+ 02
 62 RCL 03
 63 ST+ 01
 64 DSE 06
 65 GTO 01
 66 RCL 02        
 67 RCL 01
 68 END

 
     ( 117 bytes / SIZE 234 )
 
 

      STACK        INPUTS      OUTPUTS
           Y             /       y(x0+N.h) 
           X             /          x0+N.h

 
Example:    y' = -2 x.y   y(0) = 1  y'(0) = 0      Evaluate  y(1)
 
 

 01  LBL "T"
 02  *
 03  ST+ X
 04  CHS
 05  RTN

 
   XEQ "C169"

 "T"  ASTO 00

  0     STO 01
  1     STO 02    and if we choose  h = 0.1
 0.1   STO 03
 10    STO 04    XEQ "RK10"   yields          x = 1                                       ---Execution time = 11m12s---
                              X<>Y                       y(1) = 0.3678794412

-The exact result is 1/e =  0.3678794412... so there is no error at all !
-Press R/S to continue with the same h and N or modify R03-R04
 

2°)  System of 2 Differential Equations
 

-"2RK10" solves the system

    y' = f(x,y,z)      with the initial values     y(x0) = y0
    z' = g(x,y,z)                                         z(x0) = z0
 
 

Data Registers:          •  R00:  f name                                     ( Registers R00 to R05 & R65 to R233 are to be initialized before executing "2RK10" )

                                     •  R01 = x0      •  R04 = h  = stepsize                 R06 & R10: temp            •  R65 to •  R233:  the 169 coefficients stored by "C169"
                                     •  R02 = y0      •  R05 = N = number of steps    R11 to R27:  k1 to k17
                                     •  R03 = z0                                                        R28 to R44:  l1 to l17
Flags: /
Subroutine:  a program calculating 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 "2RK10"
 02 RCL 05
 03 STO 07
 04 11.001
 05 STO 45
 06 15.999
 07 STO 46
 08 GTO 01
 09 LBL 00
 10 X<>Y
 11 RCL IND 08
 12 RCL IND 10
 13 *
 14 +
 15 X<>Y
 16 RCL IND 09
 17 RCL IND 10
 18 *
 19 +
 20 ISG 10
 21 ISG 09
 22 ISG 08
 23 GTO 00
 24 RCL 03 
 25 +
 26 X<>Y
 27 RCL 02
 28 +
 29 RTN
 30 LBL 01 
 31 .01
 32 STO 08        
 33 16
 34 STO 06
 35 65.9
 36 STO 10
 37 RCL 03
 38 RCL 02
 39 RCL 01
 40 XEQ IND 00
 41 RCL 04
 42 ST* Z
 43 *
 44 STO 28
 45 X<>Y
 46 STO 11
 47 LBL 02
 48 RCL 08
 49 FRC
 50 RCL 45
 51 +
 52 STO 08
 53 17.9
 54 +
 55 STO 09
 56 CLST
 57 XEQ 00
 58 RCL 04
 59 RCL IND 10
 60 *
 61 RCL 01
 62 +
 63 XEQ IND 00
 64 RCL 04
 65 ST* Z
 66 *
 67 STO IND 09
 68 X<>Y
 69 STO IND 08
 70 ISG 10
 71 DSE 06
 72 GTO 02
 73 RCL 46
 74 ST- 08
 75 ST- 09
 76 CLST
 77 XEQ 00
 78 STO 02
 79 X<>Y
 80 STO 03
 81 RCL 04
 82 ST+ 01
 83 DSE 07
 84 GTO 01
 85 RCL 03 
 86 RCL 02         
 87 RCL 01
 88 END

 
      ( 150 bytes / SIZE 234 )
 
 

      STACK        INPUTS      OUTPUTS
           Z             /       z(x0+N.h) 
           Y             /       y(x0+N.h)
           X             /          x0+N.h

 
Example:     y(0) = 1 ; y'(0) = 0 ;  y'' + 2.x.y' + 2.y = 0   Evaluate y(1) and y'(1)

-This second order equation is equivalent to the system:             y(0) = 1 ;  z(0) = 0  ;  dy/dx = z , dz/dx = -2 x.z -2 y    where z = y'
 
 

 01  LBL "U"
 02  RCL Z
 03  *
 04  +
 05  ST+ X
 06  CHS
 07  RTN

 
  XEQ "C169"

 "U"  ASTO 00

  0      STO 01
  1      STO 02
  0      STO 03   and if we choose  h = 0.1
 0.1    STO 04
 10     STO 05    XEQ "2RK10"   yields       x =  1                                               ---Execution time = 19m00s---
                                  RDN                      y(1) =  0.3678794412
                                  RDN                      z(1) = -0.7357588823

-The exact results are  y(1) = 1/e =  0.3678794412... & z(1) = -2/e = -0.7357588823...  again no error at all !
-Press R/S to continue with the same h and N or modify  R04-R05
 

3°)  System of 3 Differential Equations
 

-"3RK10" solves the system of 3 ODEs:

      dy/dx = f(x,y,z,t)                                          y(x0) = y0
      dz/dx = g(x,y,z,t)   with the initial values:       z(x0) = z0
      dt/dx = h(x,y,z,t)                                          t(x0) = t0
 
 
 

Data Registers:          •  R00:  f name                                     ( Registers R00 to R06 & R65 to R233 are to be initialized before executing "3RK10" )

                                     •  R01 = x0      •  R05 = h  = stepsize                 R07 & R10: temp            •  R65 to •  R233:  the 169 coefficients stored by "C169"
                                     •  R02 = y0      •  R06 = N = number of steps    R11 to R27:  k1 to k17         R62 to R64: temp
                                     •  R03 = z0                                                        R28 to R44:  l1 to l17
                                     •  R04 = t0                                                        R45 to R61:  m1 to m17
Flags: /
Subroutine:  A program that takes  x , y , z , t  in X , Y , Z , T and returns  f(x,y,z,t) , g(x,y,z,t) , h(x,y,z,t)  in registers  Z , Y , X  respectively.
 

-Line 108 is a three-byte GTO 01
 
 

 01 LBL "3RK10"
 02 RCL 06
 03 STO 62
 04 GTO 01
 05 LBL 00
 06 RCL IND 07
 07 RCL IND 10
 08 *
 09 ST+ 64
 10 X<> Z
 11 RCL IND 08
 12 RCL IND 10
 13 *
 14 +
 15 X<>Y
 16 RCL IND 09
 17 RCL IND 10
 18 *
 19 +
 20 ISG 10
 21 ISG 09
 22 ISG 08
 23 ISG 07
 24 GTO 00
 25 RCL 04
 26 +
 27 X<>Y
 28 RCL 03
 29 +
 30 RCL 64
 31 RCL 02
 32 +
 33 RTN
 34 LBL 01
 35 16
 36 STO 63
 37 .01
 38 STO 07
 39 65.9
 40 STO 10
 41 RCL 04
 42 RCL 03
 43 RCL 02
 44 RCL 01
 45 XEQ IND 00
 46 RCL 05
 47 ST* T
 48 ST* Z
 49 *
 50 STO 45
 51 RDN
 52 STO 28
 53 X<>Y
 54 STO 11
 55 LBL 02
 56 RCL 07
 57 FRC
 58 11.001
 59 +
 60 STO 07
 61 17.9
 62 +
 63 STO 08        
 64 LASTX
 65 INT
 66 +
 67 STO 09 
 68 CLST
 69 STO 64
 70 XEQ 00
 71 STO 64
 72 CLX
 73 RCL 05
 74 RCL IND 10
 75 *
 76 RCL 01
 77 +
 78 RCL 64
 79 X<>Y
 80 XEQ IND 00
 81 RCL 05
 82 ST* T
 83 ST* Z
 84 *
 85 STO IND 09
 86 RDN
 87 STO IND 08
 88 X<>Y
 89 STO IND 07
 90 ISG 10
 91 DSE 63
 92 GTO 02
 93 15.999
 94 ST- 07
 95 ST- 08
 96 ST- 09
 97 CLST
 98 STO 64
 99 XEQ 00
100 STO 02
101 RDN
102 STO 03
103 X<>Y
104 STO 04
105 RCL 05
106 ST+ 01
107 DSE 62
108 GTO 01
109 RCL 04       
110 RCL 03 
111 RCL 02
112 RCL 01
113 END

 
     ( 189 bytes / SIZE 234 )
 
 

      STACK        INPUTS      OUTPUTS
           T             /       t(x0+N.h)
           Z             /       z(x0+N.h) 
           Y             /       y(x0+N.h)
           X             /          x0+N.h

 
Example:

     dy/dx = -y.z.t                    y(0) = 1         Evaluate  y(1) , z(1) , t(1)  with  h = 0.1   ( whence N = 10 )
     dz/dx = x.( y + z - t )         z(0) = 1
     dt/dx = x.y - z.t                  t(0) = 2
 
 

 01 LBL "V"
 02 R^
 03 CHS
 04 STO L
 05 R^
 06 ST* Y
 07 ST+ L
 08 CLX
 09 RCL Z
 10 R^
 11 ST+ L
 12 ST* Y
 13 X<> Z
 14 ST+ Y
 15 ST* Z
 16 X<> T
 17 LASTX
 18 *
 19 X<>Y
 20 RTN
 21 END

 
  XEQ "C169"

 "V"   ASTO 00

  0     STO 01
  1     STO 02  STO 03
  2     STO 04
 0.1   STO 05
 10    STO 06    XEQ "3RK10"   >>>>      x   =  1                                                       ---Execution time = 27m55s---
                                                     RDN     y(1) =  0.258207907
                                                     RDN     z(1) =  1.157623979
                                                     RDN     t(1) =  0.842178312

-The exact values are:

      y(1) = 0.258207906                      ( rounded to 9 decimals )
      z(1) = 1.157623981
      t(1) = 0.842178312

-Here, we get a ( small ) error.
-Press R/S to continue with the same h and N or modify   R05-R06

-Synthetic registers M , N , O , P , Q  and register R64 may also be used in the subroutine to calculate f , g , h
-If it's not enough, store the constants in - for example - R71 to R239 and replace line 39 ( 65.9 ) by 71.9
 

Notes:

-These routines are slow with a real HP41
-But with V41 or 41CL, the results are obtained in a few seconds.
 

4°)  System of n Differential Equations
 

-Here, we want to solve the system:

     dy1/dx = f1(x,y1, ... ,yn)
     dy2/dx = f2(x,y1, ... ,yn)
             ..................                                        with the initial values:     yi(x0)         i = 1 , ... , n

     dyn/dx = fn(x,y1, ... ,yn)
 
 

Data Registers:           •  R00 = subroutine name

                      ( Registers R00 thru R03 , R20 thru R20+n and R21+20n thru R189+20n are to be initialized before executing "NRK10" )

                                      •  R01 = n  = number of equations = number of functions         R04 thru R10 & R19: temp    R11 to R18: unused
                                      •  R02 = h  = stepsize
                                      •  R03 = N = number of steps

                                      •  R20 = x0
                                      •  R21 = y1(x0)                                                                           R21+n thru R20+20.n: temp
                                      •  R22 =  y2(x0)
                                          ...............         ( initial values )

                                      •  R20+n = yn(x0)
 

                                      •  R21+20n = a2,1                                                                                •  R22+20n = b2
                                      •  R23+20n = a3,1        •  R24+20n = a3,2                                            •  R25+20n = b3

                                          .........................................................................                                       ...........

                                      •  R156+20n = a17,1  ..............................    •  R171+20n = a17,16       •  R172+20n = b17

                                      •  R173+20n = c1 ........................................................................       •  R189+20n = c17
 

Flags: /
Subroutine:   A program which calculates and stores  f1 ( x, y1 , ... , yn) , ... , fn ( x, y1 , ... , yn)  in registers  R21+n, ... , R20+2n  respectively
                        with  x, y1, ... , yn in regiters R20, R21, ... , R20+n
 
 
 

 01 LBL "NRK10"
 02 RCL 03
 03 STO 10
 04 RCL 01
 05 .1
 06 %
 07 +
 08 STO 05
 09 FRC
 10 21.02
 11 +
 12 STO 04
 13 RCL 05
 14 ST+ X
 15 +
 16 STO 06
 17 GTO 01
 18 LBL 02
 19 XEQ IND 00
 20 RCL 04
 21 RCL 05
 22 +
 23 RCL 07
 24 LBL 00
 25 RCL IND Y
 26 RCL 02
 27 *
 28 STO IND Y
 29 ISG Y
 30 RDN
 31 ISG Y
 32 GTO 00
 33 RTN
 34 LBL 03
 35 RCL IND Y
 36 STO IND Y
 37 ISG Y
 38 RDN
 39 ISG Y
 40 GTO 03
 41 RTN
 42 LBL 07
 43 RCL IND 07 
 44 RCL IND 08
 45 *
 46 ST+ IND 04
 47 ISG 04
 48 TEXT0
 49 ISG 07
 50 GTO 07
 51 RCL 01
 52 ST- 04
 53 RCL 05
 54 FRC
 55 ST+ 07
 56 ISG 08
 57 GTO 07
 58 RTN
 59 LBL 01
 60 RCL 05
 61 RCL 06
 62 +
 63 STO 07
 64 XEQ 02
 65 RCL 04         
 66 RCL 06 
 67 XEQ 03
 68 RCL 01
 69 20
 70 *
 71 21
 72 +
 73 .1
 74 %
 75 +
 76 STO 08
 77 3.018
 78 STO 09
 79 RCL 20
 80 STO 19
 81 LBL 04
 82 XEQ 07
 83 RCL 02
 84 RCL IND 08 
 85 *
 86 ST+ 20
 87 XEQ 02
 88 RCL 06
 89 RCL 04
 90 XEQ 03
 91 RCL 19
 92 STO 20
 93 RCL 09
 94 INT
 95  E3
 96 /
 97 ISG X
 98 ST+ 08
 99 RCL 04
100 RCL 05
101 3
102 *
103 +
104 STO 07
105 ISG 09
106 GTO 04
107 RCL 02
108 ST+ 20
109 XEQ 07
110 DSE 10
111 GTO 01
112 RCL 23 
113 RCL 22         
114 RCL 21
115 RCL 20
116 END

 
     ( 191 bytes / SIZE 190+20.n )
 
 

      STACK        INPUTS      OUTPUTS
           T             /      y3(x0+N.h)
           Z             /      y2(x0+N.h)
           Y             /      y1(x0+N.h)
           X             /         x0+N.h

 
Example:     Let's solve again the system:

      dy1/dx = - y1y2y3
      dy2/dx =  x ( y1+y2-y3 )
      dy3/dx =  xy1- y2y3

   with the initial values:   y1(0) = 1 ; y2(0) = 1 ; y3(0) = 2

 x ; y1 ; y2 ; y3  will be in R20 ; R21 ; R22 ; R23 respectively, and we have to write a program to compute the 3 functions
 and store the results in R24 ; R25 ; R26   ( just after the "initial-value registers" ).

-For instance, the following subroutine:
 
 

 01  LBL "T"
 02  RCL 21
 03  RCL 22
 04  RCL 23
 05  *
 06  *
 07  CHS
 08  STO 24
 09  RCL 21
 10  RCL 22
 11  +
 12  RCL 23
 13  -
 14  RCL 20
 15  *
 16  STO 25
 17  RCL 20
 18  RCL 21
 19  *
 20  RCL 22
 21  RCL 23
 22  *
 23  -
 24  STO26
 25  RTN

 
We store the name of the subroutine in R00    "T"  ASTO 00
the numbers of equations in R01                      3    STO 01

-Then we have to store the 169 constants into R21+20n to R189+20n
-Execute for instance the following routine:
 
 

 01 LBL "INIT"
 02 XEQ "C169"
 03 RCL 01
 04 20
 05 *
 06 21.169
 07 +
 08  E3
 09 /
 10 65
 11 +
 12 REGMOVE
 13 END

 
-Then the initial values:

     x     in R20                      0   STO 20
     y1   in R21                      1   STO 21
     y2   in R22                      1   STO 22
     y3   in R23                      2   STO 23

-Suppose we want to know   y1(1) , y2(1) ,  y3(1)  with a step size h = 0.1 and therefore N = 10

    h is stored in R02                 0.1   STO 02
   N is stored in R03                 10    STO 03

             and  XEQ "NRK10"  >>>>        x   =  1                                                ---Execution time = 5s---            with V41 in turbo mode
                                               RDN     y(1) =  0.258207907
                                               RDN     z(1) =  1.157623977
                                               RDN     t(1) =  0.842178313

Notes:

-With a real HP41, execution time is about 50 minutes, but with free42, the results are returned almost instantaneously !
-Since SIZE = 190+20n, "NRK10" can solve at most a system of n = 6 differential equations with SIZE 310.
-But with free42, n may reach 40 with SIZE 990 ( beyond register 999, the control numbers would not work )
 
 

References:

[1]  J.C. Butcher  - "The Numerical Analysis of Ordinary Differential Equations" - John Wiley & Sons  -   ISBN  0-471-91046-5
[2]  T. Feagin - "A Tenth-Order Runge-Kutta Method with Error Estimate"

-These programs employ the coefficients given in reference [2] without taking into account the error estimate.