Srivastava's Functions of Three Variables for the HP-41
Overview
-Srivastava's Functions generalize the hypergeometric functions of 3 variables x , y , z.
-Given 14 non-negative integers A B C D E F G H I J K L M N and
A numbers a1 ..... aA
B numbers b1 ..... bB C numbers
c1 ... cC D numbers d1
.... dD E numbers e1 .... eE
F numbers f1 .... fF
G numbers g1....gG
H numbers h1 ..... hH
I numbers i1 ..... iI
J numbers j1 ... jJ
K numbers k1 .... kK L numbers
l1 .... lL M numbers m1 ...
mM N numbers n1 ... nN
the following program computes
F AHBICJDKELFMGN(a1 ... aA ;h1 ... hH ; b1 ... bB ;i1 ... iI ; c1 ... cC ;j1 ... jJ ; d1 ... dD ;k1 ... kK ; e1 ... eE ;l1 ...lL ; f1 ... fF ;m1 ... mM ; g1... gG ;n1 ... nN ; x , y , z )
= SUMp,q,r=0 to infinity up,q,r xp yq zr / ( p! q! r! )
where up,q,r = [ (a1)p+q+r
...... (aA)p+q+r (b1)p+q ......
(bB)p+q (c1)q+r ...... (cC)q+r
(d1)p+r ...... (dD)p+r (e1)p
...... (eE)p (f1)q ......
(fF)q (g1)r ...... (gG)r
] /
[ (h1)p+q+r ...... (hH)p+q+r
(i1)p+q ...... (iI)p+q
(j1)q+r ...... (jJ)q+r
(k1)p+r ...... (kK)p+r
(l1)p ...... (lL)p (m1)q
...... (mM)q (n1)r ...... (nN)r
]
and (t)n = Pochhammer's symbol:
(t)0 = 1
(t)n = t(t+1)(t+2) ...... (t+n-1) if
n > 0
Program Listing
Data Registers: R00: temp ( Registers R01 thru R14 & R37 thru .... are to be initialized before executing "SRI" )
• R01 = A • R02 = B •
R03 = C • R04 = D • R05
= E • R06 = F • R07 = G
• R08 = H • R09 = I
• R10 = J • R11 = K
• R12 = L • R13 = M • R14
= N
R15 = x R16 = y R17 = z R18 = p R19 = q R20 = r R21 to R36: temp
• R37 = a1 ...........................................................................
• R36+A = aA
• R37+A = b1 ........................................................................
• R36+A+B = bB
• R37+A+B = c1 .....................................................................
• R36+A+B+C = cC
• R37+A+B+C = d1 ................................................................
• R36+A+B+C+D = dD
• R37+A+B+C+D = e1 ............................................................
• R36+A+B+C+D+E = eE
• R37+A+B+C+D+E = f1 .........................................................
• R36+A+B+C+D+E+F = fF
• R37+A+B+C+D+E+F = g1 ....................................................
• R36+A+B+C+D+E+F+G = gG
• R37+A+B+C+D+E+F+G = h1 ...............................................
• R36+A+B+C+D+E+F+G+H = hH
• R37+A+B+C+D+E+F+G+H = i1 ...........................................
• R36+A+B+C+D+E+F+G+H+I = iI
• R37+A+B+C+D+E+F+G+H+I = j1 .......................................
• R36+A+B+C+D+E+F+G+H+I+J = jJ
• R37+A+B+C+D+E+F+G+H+I+J = k1 ..................................
• R36+A+B+C+D+E+F+G+H+I+J+K = kK
• R37+A+B+C+D+E+F+G+H+I+J+K = l1 ..............................
• R36+A+B+C+D+E+F+G+H+I+J+K+L = lL
• R37+A+B+C+D+E+F+G+H+I+J+K+L = m1 ........................
• R36+A+B+C+D+E+F+G+H+I+J+K+L+M = mM
• R37+A+B+C+D+E+F+G+H+I+J+K+L+M = n1 ...................
• R36+A+B+C+D+E+F+G+H+I+J+K+L+M+N = nN
Flag: F10 is cleared at the end
Subroutines: /
-I've used an M-Code function X+1 to add 1 to register
X
-It may be replaced by ISG X CLX
-Lines 02-03 are only useful to remind that the cefficients are to be
stored into R37 , R38 , ... etc ...
-Otherwise, they may be deleted.
-Lines 35-222-279 are three-byte GTOs
01 LBL "SRI"
02 FS? 30 03 "COEF=R37" 04 STO 15 05 RDN 06 STO 16 07 X<>Y 08 STO 17 09 CLX 10 STO 18 11 STO 19 12 STO 20 13 1.014 14 STO 00 15 36 16 23 17 STO 21 18 LBL 00 19 RCL IND 00 20 RCL Z 21 + 22 STO Y 23 E3 24 / 25 R^ 26 + 27 STO IND 21 28 SIGN 29 ST+ 21 30 ISG 00 31 GTO 00 32 STO 21 33 STO 22 34 SIGN 35 GTO 10 36 LBL 01 37 RCL 18 38 RCL 19 39 + 40 RCL 20 41 + 42 RCL IND 00 43 + 44 FC? 10 45 1/X 46 * 47 ISG 00 |
48 GTO 01
49 RTN 50 LBL 02 51 RCL 18 52 RCL 19 53 + 54 RCL IND 00 55 + 56 FC? 10 57 1/X 58 * 59 ISG 00 60 GTO 02 61 RTN 62 LBL 03 63 RCL 19 64 RCL 20 65 + 66 RCL IND 00 67 + 68 FC? 10 69 1/X 70 * 71 ISG 00 72 GTO 03 73 RTN 74 LBL 04 75 RCL 18 76 RCL 20 77 + 78 RCL IND 00 79 + 80 FC? 10 81 1/X 82 * 83 ISG 00 84 GTO 04 85 RTN 86 LBL 05 87 RCL 18 88 RCL IND 00 89 + 90 FC? 10 91 1/X 92 * 93 ISG 00 94 GTO 05 |
95 RTN
96 LBL 06 97 RCL 19 98 RCL IND 00 99 + 100 FC? 10 101 1/X 102 * 103 ISG 00 104 GTO 06 105 RTN 106 LBL 07 107 RCL 20 108 RCL IND 00 109 + 110 FC? 10 111 1/X 112 * 113 ISG 00 114 GTO 07 115 RTN 116 LBL 10 117 RCL 23 118 STO 00 119 X<> L 120 SF 10 121 ISG 00 122 XEQ 01 123 RCL 24 124 STO 00 125 RDN 126 ISG 00 127 XEQ 02 128 RCL 26 129 STO 00 130 RDN 131 ISG 00 132 XEQ 04 133 RCL 27 134 STO 00 135 RDN 136 ISG 00 137 XEQ 05 138 RCL 30 139 STO 00 140 RDN 141 CF 10 |
142 ISG 00
143 XEQ 01 144 RCL 31 145 STO 00 146 RDN 147 ISG 00 148 XEQ 02 149 RCL 33 150 STO 00 151 RDN 152 ISG 00 153 XEQ 04 154 RCL 34 155 STO 00 156 RDN 157 ISG 00 158 XEQ 05 159 RCL 15 160 RCL 18 161 X+1 162 STO 18 163 / 164 * 165 + 166 X#Y? 167 GTO 10 168 CLX 169 STO 18 170 X<> 21 171 RCL 23 172 STO 00 173 RDN 174 SF 10 175 ISG 00 176 XEQ 03 177 RCL 24 178 STO 00 179 RDN 180 ISG 00 181 XEQ 06 182 RCL 25 183 STO 00 184 RDN 185 ISG 00 186 XEQ 03 187 RCL 28 188 STO 00 |
189 RDN
190 ISG 00 191 XEQ 06 192 RCL 30 193 STO 00 194 RDN 195 CF 10 196 ISG 00 197 XEQ 03 198 RCL 31 199 STO 00 200 RDN 201 ISG 00 202 XEQ 06 203 RCL 32 204 STO 00 205 RDN 206 ISG 00 207 XEQ 03 208 RCL 35 209 STO 00 210 RDN 211 ISG 00 212 XEQ 06 213 RCL 16 214 RCL 19 215 X+1 216 STO 19 217 / 218 * 219 STO 21 220 + 221 X#Y? 222 GTO 10 223 CLX 224 STO 18 225 STO 19 226 X<> 22 227 RCL 23 228 STO 00 229 RDN 230 SF 10 231 ISG 00 232 XEQ 07 233 RCL 25 234 STO 00 235 RDN |
236 ISG 00
237 XEQ 07 238 RCL 26 239 STO 00 240 RDN 241 ISG 00 242 XEQ 07 243 RCL 29 244 STO 00 245 RDN 246 ISG 00 247 XEQ 07 248 RCL 30 249 STO 00 250 RDN 251 CF 10 252 ISG 00 253 XEQ 07 254 RCL 32 255 STO 00 256 RDN 257 ISG 00 258 XEQ 07 259 RCL 33 260 STO 00 261 RDN 262 ISG 00 263 XEQ 07 264 RCL 36 265 STO 00 266 RDN 267 ISG 00 268 XEQ 07 269 RCL 17 270 RCL 20 271 X+1 272 STO 20 273 / 274 * 275 STO 21 276 STO 22 277 + 278 X#Y? 279 GTO 10 280 END |
( 489 bytes / SIZE 037+A+B+C+D+E+F+G+H+I+J+K+L+M+N
)
STACK | INPUTS | OUTPUTS |
Z | z | F(x,y,z) |
Y | y | F(x,y,z) |
X | x | F(x,y,z) |
Example: With A =
B = ........................... = N = 1 ( to be stored into
R01 thru R14 )
a1
= sqrt(2) b1 = sqrt(3) c1
= sqrt(5) d1 = sqrt(6) e1
= sqrt(7) f1 = sqrt(8)
g1 = sqrt(10)
( to be stored into
h1
= sqrt(11) i1 = sqrt(12) j1 = sqrt(13)
k1 = sqrt(14) l1 = sqrt(15) m1
= sqrt(17) n1 = sqrt(18)
R37 thru R50 )
and x = 0.1 y = 0.2 z = 0.3
0.3 ENTER^
0.2 ENTER^
0.1 XEQ "SRI" >>>>> F(
0.1 , 0.2 , 0.3 ) = 1.070158801
---Execution time = 7m18s---
Notes:
-The routine is obviously very slow and a good emulator like V41 is
probably preferable.
-Execution time may be saved if you add 7 other subroutines similar
to LBL 01 ..... LBL 07 with / instead of
FC? 10 1/X *
-This program does not check if the series is convergent or not.
-If A = B = ..... = N = 0 , "SRI" returns exp(x+y+z)
-The termination criterion may be doubtful for certain values of the
parameters:
-Press XEQ 10 without changing the stack to check.