Runge-Kutta Methods for Special ODEs for the HP-41
Overview
1°) Third-order ODEs y''' = f(x,y,y')
2°) Fourth-order ODEs y''''
= f(x,y)
-All these differential equations may be solved by usual Runge-Kutta
formulae.
-But the following programs use special methods with less stages to
get the same accuracy
or the same number of stages to get a better accuracy.
1°) Third-order ODEs y''' = f(x,y,y')
-This routine employs a 4-stage 5th-order Runge-Kutta method given in
reference [1]
Data Registers: • R00 = function name ( Registers R00 thru R06 are to be initialized before executing "RKTG" )
• R01 = x •
R04 = y" R07 to R11: temp
• R02 = y •
R05 = h
• R03 = y' •
R06 = N
Flags: /
Subroutine: A program that takes x
, y , y' in registers X , Y , Z respectively and returns
f(x,y,y') in X-register.
-Line 209 is a three-byte GTO 01
01 LBL "RKTG"
02 RCL 06 03 STO 11 04 LBL 01 05 RCL 03 06 RCL 02 07 RCL 01 08 XEQ IND 00 09 STO 07 10 RCL 05 11 * 12 50 13 / 14 RCL 04 15 5 16 / 17 + 18 RCL 05 19 * 20 RCL 03 21 + 22 RCL 04 23 RCL 05 24 * 25 10 26 / 27 RCL 03 28 + 29 RCL 05 30 * 31 5 |
32 /
33 RCL 02 34 + 35 RCL 05 36 5 37 / 38 RCL 01 39 + 40 XEQ IND 00 41 STO 08 42 7 43 * 44 RCL 07 45 - 46 27 47 / 48 RCL 05 49 * 50 RCL 04 51 ST+ X 52 3 53 / 54 + 55 RCL 05 56 * 57 RCL 03 58 + 59 RCL 08 60 301 61 * 62 RCL 07 |
63 49
64 * 65 - 66 RCL 05 67 * 68 4860 69 / 70 RCL 04 71 4 72 * 73 18 74 / 75 + 76 RCL 05 77 * 78 RCL 03 79 ST+ X 80 3 81 / 82 + 83 RCL 05 84 * 85 RCL 02 86 + 87 RCL 05 88 ST+ X 89 3 90 / 91 RCL 01 92 + 93 XEQ IND 00 |
94 STO 09
95 9 96 * 97 RCL 08 98 ST+ X 99 - 100 35 101 / 102 RCL 07 103 .3 104 * 105 + 106 RCL 05 107 * 108 RCL 04 109 + 110 RCL 05 111 * 112 RCL 03 113 + 114 RCL 09 115 ST+ X 116 RCL 08 117 - 118 RCL 07 119 7 120 * 121 + 122 RCL 05 123 * 124 50 |
125 /
126 RCL 04 127 2 128 / 129 + 130 RCL 05 131 * 132 RCL 03 133 + 134 RCL 05 135 * 136 RCL 02 137 + 138 RCL 01 139 RCL 05 140 + 141 XEQ IND 00 142 STO 10 143 RCL 07 144 7 145 * 146 STO 07 147 RCL 08 148 40 149 * 150 + 151 RCL 09 152 9 153 * 154 + |
155 RCL 05
156 * 157 336 158 / 159 RCL 04 160 2 161 / 162 + 163 RCL 05 164 * 165 RCL 03 166 + 167 RCL 05 168 * 169 ST+ 02 170 RCL 07 171 RCL 08 172 50 173 * 174 + 175 RCL 09 176 27 177 * 178 + 179 RCL 05 180 * 181 168 182 / 183 RCL 04 184 + |
185 RCL 05
186 * 187 ST+ 03 188 RCL 07 189 ST+ X 190 RCL 08 191 125 192 * 193 + 194 RCL 09 195 162 196 * 197 + 198 RCL 10 199 35 200 * 201 + 202 RCL 05 203 ST+ 01 204 * 205 336 206 / 207 ST+ 04 208 DSE 11 209 GTO 01 210 RCL 04 211 RCL 03 212 RCL 02 213 RCL 01 214 END |
( 267 bytes / SIZE 012 )
STACK | INPUTS | OUTPUTS |
T | / | y"(x) |
Z | / | y'(x) |
Y | / | y(x) |
X | / | x |
Example: y''' = 8 x y + ( 4 x2
- 2 ) y' y(0) = 1
y'(0) = 0 y"(0) = -2
Calculate y(1)
-Load for example this routine in main memory:
01 LBL "T"
02 ST* Y 03 X^2 04 ST+ X 05 1 06 - 07 ST+ X 08 R^ 09 * 10 X<>Y 11 8 12 * 13 + 14 RTN |
"T" ASTO 00
0 STO 01 STO 03
1 STO 02 -2 STO 04
-If you choose h = 0.05 & N = 20
0.05 STO 05 20 STO 06 XEQ "RKTG"
>>>> x = 1
= R01
RDN y(1) = 0.367879436 = R02
RDN y'(1) = -0.735758901 = R03
RDN y"(1) = 0.735758853 = R04
Notes:
-The exact solution is y = exp(-x2) so
y(1) = 0.367879441....
-Simply press R/S to continue with the same h & N
2°) Fourth-order ODEs y'''' = f(x,y)
-This routine employs a 3-stage 4th-order Runge-Kutta method given in
reference [2]
Data Registers: • R00 = function name ( Registers R00 thru R07 are to be initialized before executing "RKFD" )
• R01 = x •
R04 = y" •
R07 = N R08 to R11: temp
• R02 = y •
R05 = y'''
• R03 = y' •
R06 = h
Flags: /
Subroutine: A program that takes x
, y in registers X , Y respectively and returns
f(x,y) in X-register.
-Line 182 is a three-byte GTO 01
01 LBL "RKFD"
02 RCL 07 03 STO 11 04 LBL 01 05 RCL 02 06 RCL 01 07 XEQ IND 00 08 STO 08 09 CHS 10 RCL 06 11 * 12 5 13 / 14 RCL 05 15 64 16 * 17 7986 18 / 19 + 20 RCL 06 21 * 22 RCL 04 23 8 24 * 25 121 26 / 27 + |
28 RCL 06
29 * 30 RCL 03 31 4 32 * 33 11 34 / 35 + 36 RCL 06 37 * 38 RCL 02 39 + 40 RCL 06 41 4 42 * 43 11 44 / 45 RCL 01 46 + 47 XEQ IND 00 48 STO 09 49 RCL 08 50 + 51 19 52 * 53 RCL 06 54 * |
55 125
56 / 57 RCL 05 58 4913 59 * 60 48 E3 61 / 62 + 63 RCL 06 64 * 65 RCL 04 66 289 67 * 68 800 69 / 70 + 71 RCL 06 72 * 73 RCL 03 74 .85 75 * 76 + 77 RCL 06 78 * 79 RCL 02 80 + 81 RCL 06 |
82 .85
83 * 84 RCL 01 85 + 86 XEQ IND 00 87 STO 10 88 20 89 / 90 RCL 09 91 7 92 * 93 75 94 / 95 - 96 RCL 08 97 .085 98 * 99 + 100 RCL 06 101 * 102 RCL 05 103 6 104 / 105 + 106 RCL 06 107 * 108 RCL 04 |
109 2
110 / 111 + 112 RCL 06 113 * 114 RCL 03 115 + 116 RCL 06 117 * 118 ST+ 02 119 RCL 10 120 5 121 * 122 RCL 09 123 209 124 * 125 + 126 1926 127 / 128 RCL 08 129 18 130 / 131 + 132 RCL 06 133 * 134 RCL 05 135 2 |
136 /
137 + 138 RCL 06 139 * 140 RCL 04 141 + 142 RCL 06 143 * 144 ST+ 03 145 RCL 10 146 2400 147 * 148 RCL 09 149 14399 150 * 151 + 152 RCL 08 153 5029 154 * 155 STO 08 156 + 157 43656 158 / 159 RCL 06 160 * 161 RCL 05 |
162 +
163 RCL 06 164 * 165 ST+ 04 166 RCL 10 167 16 E3 168 * 169 RCL 09 170 22627 171 * 172 + 173 RCL 08 174 + 175 43656 176 / 177 RCL 06 178 ST+ 01 179 * 180 ST+ 05 181 DSE 11 182 GTO 01 183 RCL 04 184 RCL 03 185 RCL 02 186 RCL 01 187 END |
( 268 bytes / SIZE 012 )
STACK | INPUTS | OUTPUTS |
T | / | y"(x) |
Z | / | y'(x) |
Y | / | y(x) |
X | / | x |
Example: y''''(x)
= ( 16 x4 - 48 x2 + 12 ) y
y(0) = 1 y'(0) = 0 y"(0) = -2
y'''(0) = 0 Calculate
y(1)
-Load for example this routine in main memory:
01 LBL "T"
02 X^2 03 RCL X 04 16 05 * 06 48 07 - 08 * 09 12 10 + 11 * 12 RTN |
"T" ASTO 00
0 STO 01 STO 03 STO 05
1 STO 02 -2 STO 04
-If you choose h = 0.05 & N = 20
0.05 STO 06 20 STO 07 XEQ "RKFD"
>>>> x = 1
= R01
RDN y(1) = 0.367879077 = R02
RDN y'(1) = -0.735759984 = R03
RDN y"(1) = 0.735756781 = R04
and R05 = y'''(1) = 1.471518787
Notes:
-The exact solution is y = exp(-x2) so
y(1) = 0.367879441....
-Simply press R/S to continue with the same h & N
References:
[1] Firas Adel Fawzi, Norazak Senu, Fudziah Ismail, Zanariah Abd.
Majid - "An Efficient of Direct Integrator of Runge-Kutta Type Method
for solving y''' = f(x,y,y') with
Application to Thin Film Flow Problem"
[2] Kasim Hussain, Fudziah Ismail, Norazak Senu - "Runge-Kutta
Type Methods for Directly Solving Special Fourth-Order Ordinary Differential
Equations"