This program is Copyright © 2006 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.
Overview
1°) Hypergeometric Functions ( slightly
improved )
a) Program#1
b) Program#2
2°) Generalized Hypergeometric Functions
( new )
1°) Hypergeometric Funtions
-The first program calculates F(a,b,c,x) for | x | <
1
-The second routine also computes Limt tends to c
( F(a,b,t,x) )/Gam(t) when c is a negative integer.
a) Program#1
Formula: F(a;b;c;x) = 1
+ (a)1(b)1/(c)1. x1/1!
+ ............. + (a)n(b)n/(c)n
. xn/n! + .......... where (a)n = a(a+1)(a+2)
...... (a+n-1) and | x | <
1
Data Registers:
R00 = x
• R01 = a
• R02 = b
registers R01 R02 R03 are to be initialized before executing "HGF"
• R03 = c
Flags: /
Subroutines: /
01 LBL "HGF"
02 STO 00
03 CLST
04 SIGN
05 ENTER^
06 ENTER^
07 LBL 01
08 RDN
09 X<>Y
10 RCL 01
11 R^
12 ST+ Y
13 RDN
14 *
15 RCL 02
16 R^
17 ST+ Y
18 RDN
19 *
20 RCL 03
21 R^
22 ST+ Y
23 ISG X
24 CLX
25 ST* Y
26 RDN
27 /
28 RCL 00
29 *
30 STO Z
31 X<>Y
32 ST+ Y
33 X#Y?
34 GTO 01
35 END
( 51 bytes / SIZE 004 )
STACK | INPUTS | OUTPUTS |
X | x | F(a;b;c;x) |
L | / | x |
Example: Calculate F(0.3 ; -0.7 ; 0.4 ; 0.49)
0.3 STO 01 -0.7 STO 02 0.4 STO 03
0.49 XEQ "HGF" >>>> F(0.3
; -0.7 ; 0.4 ; 0.49) = 0.720164356
( in 18 seconds )
b) Program#2
-This second program uses the following properties:
- If c-a-b > 0 , F(a;b;c;1) = Gam(c).Gam(c-a-b)/(Gam(c-a).Gam(c-b))
- F(a;b;b;x) = F(b;a;b;x) = 1/(1-x)a
- If c is a negative integer and neither a nor b is a negative
integer such that -a<-c , -b<-c
then F is not defined but "HGF2" sets flag F00 and calculates:
Limt tends to c ( F(a,b,t,x) )/Gam(t) = (a)1-c(b)1-c/(1-c)! F(a-c+1;b-c+1;2-c;x)
-This may be used in some of the Associated Legendre Functions.
Data Registers:
R00: x
• R01 = a
• R02 = b
registers R01 R02 R03 are to be initialized before executing "HGF2"
• R03 = c
Flags: F00 & F05
Subroutine: "GAM" ( only if
x = 1 ) cf "Gamma Functions for the HP-41"
01 LBL "HGF2"
02 STO 00
03 CF 00
04 CF 05
05 RCL 01
06 X>0?
07 GTO 00
08 FRC
09 X#0?
10 GTO 00
11 SF 05
12 RCL 03
13 LASTX
14 -
15 X<0?
16 GTO 03
17 LBL 00
18 RCL 02
19 X>0?
20 GTO 01
21 FRC
22 X#0?
23 GTO 01
24 SF 05
25 RCL 03
26 LASTX
27 -
28 X<0?
29 GTO 03
30 LBL 01
31 RCL 03
32 X>0?
33 GTO 02
34 FRC
35 X#0?
36 GTO 02
37 SF 00
38 CF 05
39 1
40 RCL 03
41 -
42 ST+ 01
43 ST+ 02
44 1
45 +
46 STO 03
47 LBL 02
48 RCL 00
49 1
50 X=Y?
51 FS? 05
52 GTO 03
53 RCL 03
54 XEQ "GAM"
55 STO N
56 RCL 03
57 RCL 01
58 RCL 02
59 +
60 -
61 XEQ "GAM"
62 ST* N
63 RCL 03
64 RCL 01
65 -
66 XEQ "GAM"
67 ST/ N
68 RCL 03
69 RCL 02
70 -
71 XEQ "GAM"
72 ST/ N
73 0
74 X<> N
75 GTO 05
76 LBL 03
77 RCL 01
78 RCL 02
79 RCL 03
80 X=Y?
81 GTO 04
82 RDN
83 X<>Y
84 R^
85 X#Y?
86 GTO 06
87 LBL 04
88 X<> Z
89 1
90 RCL 00
91 -
92 X<>Y
93 CHS
94 Y^X
95 LBL 05
96 FS? 00
97 GTO 08
98 GTO 10
99 LBL 06
100 CLST
( lines 100 to 131 may be replaced by RCL 00 XEQ "HGF"
)
101 SIGN
102 ENTER^
103 ENTER^
104 LBL 07
105 RDN
106 X<>Y
107 RCL 01
108 R^
109 ST+ Y
110 RDN
111 *
112 RCL 02
113 R^
114 ST+ Y
115 RDN
116 *
117 RCL 03
118 R^
119 ST+ Y
120 ISG X
121 CLX
122 ST* Y
123 RDN
124 /
125 RCL 00
126 *
127 STO Z
128 X<>Y
129 ST+ Y
130 X#Y?
131 GTO 07
132 FC? 00
133 GTO 10
134 LBL 08
135 2
136 RCL 03
137 -
138 STO 03
139 1
140 -
141 ST+ 01
142 ST+ 02
143 RCL 00
144 X<>Y
145 CHS
146 STO T
147 Y^X
148 *
149 X<>Y
150 LBL 09
151 ST/ Y
152 1
153 -
154 STO Z
155 RCL 01
156 +
157 *
158 X<>Y
159 RCL 02
160 +
161 *
162 X<>Y
163 X#0?
164 GTO 09
165 X<>Y
166 LBL 10
167 CF 05
168 END
( 240 bytes / SIZE 004 )
STACK | INPUTS | OUTPUTS |
X | x | f(x) |
where f(x) = F(a;b;c;x)
if F00 is clear
f(x) = Limt -> c ( F(a,b,t,x) )/Gam(t)
if F00 is set
Examples: 1 STO 01 2 STO 02 3 STO 03 0.1 XEQ "HGF2" >>>> F(1;2;3;0.1) = 1.072103131 ( in 7 seconds )
and similarly
F(1;2;7;1) = 1.5
( 14 s ) (
flag F00 is clear )
F(2;3;3;0.7) = 11.11111111 ( 1.4 s )
( flag F00 is clear )
Lim t tends
to -7 ( F(2;2;t;0.1)/Gam(t) ) = 0.105229334
( 18 s )
( flag F00 is set )
Lim t tends
to -1 ( F(-4;-5;t;1)/Gam(t) ) = 420
( 17 s )
( flag F00 is set ) ..... etc .....
2°) Generalized Hypergeometric Funtions
-The definition of F(a,b,c;x) may be generalized as follows: given 2 non-negative integers m & p ( at least one of them positive )
mFp( a1,a2,....,am ; b1,b2,....,bp ; x ) = SUMk=0,1,2,..... [(a1)k(a2)k.....(am)k]/[(b1)k(b2)k.....(bp)k] . xn/n!
where (ai)k
= ai(ai+1)(ai+2) ...... (ai+k-1)
& (ai)0 = 1 ,
likewise for (bi)k
Data Registers: R00 = x ( Registers R01 thru Rm+p are to be initialized before executing "GHGF" )
• R01 = a1 • R02 = a2
....................... • Rmm = am
• Rm+1 = b1 • Rm+2 = b2 ....................
• Rm+p = bp
Flags: /
Subroutines: /
-Synthetic registers may be replaced by any standard registers,
but if, for instance, you replace register O by R99,
delete line 44 and replace line 02 by 0 STO 99
RDN
01 LBL "GHGF"
02 CLA
03 STO 00
04 X<> Z
05 ST+ Y
06 E3
07 ST/ Z
08 /
09 STO N
10 X<>Y
11 STO M
12 SIGN
13 STO T
14 LBL 01
15 R^
16 RCL 00
17 *
18 ISG M
19 LBL 02
20 RCL IND M
21 RCL O
22 +
23 ISG N
24 FS? 30
25 1/X
26 *
27 ISG M
28 GTO 02
29 RCL M
30 FRC
31 STO M
32 X<> N
33 FRC
34 STO N
35 SIGN
36 RCL O
37 +
38 STO O
39 /
40 STO T
41 +
42 X#Y?
43 GTO 01
44 CLA
45 END
( 76 bytes / SIZE m+p+1 )
STACK | INPUTS | OUTPUTS |
Z | m | / |
Y | p | mFp( a1,a2,....,am ; b1,b2,....,bp ; x ) |
X | x | mFp( a1,a2,....,am ; b1,b2,....,bp ; x ) |
Example: Calculate 3F4( 1 , 4 , 7 ; 2 , 3 , 6 , 5 ; Pi ) and 4F3( 1 , 4 , 7 , 2 ; 3 , 6 , 5 ; 1/Pi )
1 STO 01 4 STO 02 7 STO 03 2 STO 04 3 STO 05 6 STO 06 5 STO 07
3 ENTER^
4 ENTER^
PI XEQ "GHGF" >>>> 3F4(
1 , 4 , 7 ; 2 , 3 , 6 , 5 ; Pi ) = 1.631019643
( in 27 seconds )
4 ENTER^
3 ENTER^
PI 1/X R/S >>>>
4F3( 1 , 4 , 7 , 2 ; 3 , 6 , 5 ; 1/Pi
) = 1.258050204 ( in 50 seconds )
Remarks:
2F1 = Hypergeometric Function
1F1 = Kummer's Function
Reference:
Abramowitz and Stegun , "Handbook of Mathematical Functions" - Dover
Publications - ISBN 0-486-61272-4
Go back to the HP-41 software library
Go back to the general software library
Go
back to the main exhibit hall