hp41programs

Template

Carlson Elliptic Integrals for the HP-41


Overview
 

1°) RF+RFZ+RJ+RJZ
2°) RF+RFZ+RJ+RJZ ( shorter )
3°) RF+RFZ+RJ+RJZ ( slightly shorter )
4°) Slightly Different Formulae

   a) Program#1
   b) Program#2


 

-Several programs are already listed in "Elliptic Integrals for the HP41"
-The routines below apply formulas in reference [2] & [3]  when 2 arguments are conjugate complex.

-The different RF RFZ RJ RJZ are put together to save bytes.

-Of course, the M-Code routines in "Elliptic Integrals for the HP41" (§2°)e)) are much faster.

 

1°)  RF+RFZ+RJ+RJZ
 

-We have:       RF(x;y;z) =  (1/2) §0infinity  ( ( t + x ).( t + y ).( t + z ) ) -1/2 dt                           with  x , y , z  non-negative and at most one is zero

   and            RJ(x;y;z;p) =  (3/2)  §0infinity  ( t + p ) -1  ( ( t + x ).( t + y ).( t + z ) ) -1/2  dt        with  x , y , z  non-negative and at most one is zero     p > 0


-Cf  "Elliptic Integrals for the HP41"  if you want to calculate Cauchy principal value ( if p < 0 ).


-To compute  I = RF( x , y+i.z , y-i.z )  this program employs:

   I = RF( u , v , w )   with:

  2 u = y + ( y2 + z2 )1/2
  2 v = x + ( y2 + z2 )1/2 + [ (y-x)2 + z2 ]1/2
  2 w = x + ( y2 + z2 )1/2 - [ (y-x)2 + z2 ]1/2

( cf reference [2] )

 
Data Registers:  R00 to R09: temp
Flag:  F10
Subroutines: /
 


 01 LBL "RFZ"
 02 STO 01
 03 X<>Y
 04 STO 02
 05 -
 06 X<>Y
 07 STO 03
 08 R-P
 09 ENTER
 10 CHS
 11 RCL 01
 12 ST+ Z
 13 +
 14 RCL 02
 15 RCL 03
 16 R-P
 17 X<>Y
 18 RDN
 19 ST+ Y
 20 ST+ Z
 21 RCL 02
 22 +
 23 2
 24 ST/ Z
 25 ST/ T
 26 /
 27 LBL "RF"
 28 STO 01          
 29 RDN
 30 STO 02
 31 X<>Y
 32 STO 03
 33 CLX
 34 LBL 01
 35 RCL 02
 36 SQRT
 37 RCL X
 38 RCL 03
 39 SQRT
 40 ST* Z
 41 +
 42 RCL 01
 43 SQRT
 44 *
 45 +
 46 ST+ 01
 47 ST+ 02
 48 ST+ 03
 49 4
 50 ST/ 01
 51 ST/ 02
 52 ST/ 03
 53 R^
 54 3
 55 RCL 01
 56 RCL 02
 57 +
 58 RCL 03          
 59 +
 60 /
 61 SQRT
 62 X>Y?
 63 GTO 01
 64 RTN
 65 LBL "RJ"
 66 XEQ 09
 67 RAD
 68 LBL 02
 69 RCL 01
 70 SQRT
 71 ENTER
 72 STO 05
 73 RCL 02
 74 SQRT
 75 ST* Z
 76 STO 06
 77 RCL 03
 78 SQRT
 79 ST* T
 80 ST* 06
 81 +
 82 ST* 05
 83 +
 84 RCL 04
 85 *
 86 +
 87 X^2
 88 RCL 04
 89 RCL 05
 90 RCL 06
 91 +
 92 ST+ 01
 93 ST+ 02
 94 ST+ 03
 95 RCL 04          
 96 +
 97 STO 04
 98 X^2
 99 *
100 RCL 03
101 XEQ 08
102 X>Y?
103 GTO 02
104 DEG
105 RTN
106 LBL "RJZ"
107 XEQ 09
108 SF 10
109 RAD
110 LBL 03
111 RCL 03
112 RCL 02
113 R-P
114 ENTER
115 STO Z
116 LASTX
117 +
118 ST+ X
119 SQRT
120 STO 05
121 RCL 01          
122 SQRT
123 ST* T
124 ST+ 05
125 *
126 +
127 ST+ 01
128 ST+ 02
129 X<> 04
130 ST+ 04
131 ENTER
132 X<> 05
133 *
134 +
135 X^2
136 RCL 05
137 RCL 04
138 ENTER
139 *
140 *
141 RCL 02
142 XEQ 08
143 ST- Y
144 /
145 ABS
146 2 E-9
147 X<Y?
148 GTO 03
149 FS?C 10
150 GTO 03
151 RCL 00
152 DEG
153 RTN
154 LBL 08
155 STO 06          
156 RDN
157 X=Y?
158 GTO 04
159 -
160 STO 05
161 X<>Y
162 /
163 X<0?
164 GTO 05
165 SQRT
166 ENTER
167 ST+ Y
168 SIGN
169 LASTX
170 -
171 /
172 LN1+X
173 2
174 /
175 GTO 06
176 LBL 04
177 SQRT
178 1/X
179 GTO 07
180 LBL 05
181 CHS
182 SQRT
183 ATAN
184 LBL 06
185 RCL 05          
186 ABS
187 SQRT
188 /
189 LBL 07
190 RCL 07
191 *
192 ST+ 08
193 4
194 ST/ 01
195 ST/ 02
196 ST/ 03
197 ST/ 04
198 ST/ 06
199 ST/ 07
200 RCL 00
201 RCL 07
202 RCL 01
203 RCL 02
204 +
205 RCL 04
206 ST+ X
207 +
208 RCL 06
209 +
210 5
211 /
212 ENTER
213 SQRT
214 *
215 /
216 RCL 08
217 3
218 *
219 +
220 STO 00          
221 RTN
222 LBL 09
223 STO 01
224 RDN
225 STO 02
226 RDN
227 STO 03
228 X<>Y
229 STO 04
230 CLX
231 STO 00
232 STO 08
233 SIGN
234 STO 07
235 END


         ( 319 bytes / SIZE 009 )

 

           STACK           INPUTS         OUTPUT
                T             p > 0                /
                Z                z                /
                Y                y                /
                X                x          RF or RJ

    p is only useful to compute RJ

Examples:

     4  ENTER^
     2  ENTER^
     1  XEQ "RF"   >>>>  RF( 1 , 2 , 4 ) = 0.685085816                                   ---Exectution time = 11s---
 
     4  ENTER^
     3  ENTER^
     2  XEQ "RFZ"   >>>>   RF( 2 , 3+4.i , 3-4.i ) = 0.543421944                    ---Exectution time = 12s---

     4  ENTER^
     3  ENTER^
     2  ENTER^
     1  XEQ "RJ"   >>>>   RJ( 1 , 2 , 3 , 4 ) = 0.239848100                               ---Exectution time = 25s---

     4  ENTER^
     3  ENTER^
     2  ENTER^
     1  XEQ "RJZ"   >>>>   RJ( 1 , 2+3.i , 2-3.i , 4 ) = 0.205644141                 ---Exectution time = 27s---


2°)  RF+RFZ+RJ+RJZ  ( shorter program )


-We can save several bytes if we compute  RF( a , b , b )  with  "RF"  instead of the formulae:
 
     RF(a,b,b) = ( a - b ) -1/2  Arctanh ( 1-b/a )1/2     if   a > b
     RF(a,b,b) =   a -1/2                                             if   a = b
     RF(a,b,b) = ( b - a ) -1/2  Arctan ( b/a - 1 )1/2      if   a < b


-But of course, "RJ" will be slower.


Data Registers:  R00 to R10: temp
Flag:   F10
Subroutines: /
 


 01 LBL "RFZ"
 02 STO 01
 03 X<>Y
 04 STO 02
 05 -
 06 X<>Y
 07 STO 03
 08 R-P
 09 ENTER
 10 CHS
 11 RCL 01
 12 ST+ Z
 13 +
 14 RCL 02
 15 RCL 03
 16 R-P
 17 X<>Y
 18 RDN
 19 ST+ Y
 20 ST+ Z
 21 RCL 02          
 22 +
 23 2
 24 ST/ Z
 25 ST/ T
 26 /
 27 LBL "RF"
 28 LBL 13
 29 STO 01
 30 RDN
 31 STO 02
 32 X<>Y
 33 STO 03
 34 CLX
 35 LBL 01
 36 RCL 02
 37 SQRT
 38 RCL X
 39 RCL 03
 40 SQRT
 41 ST* Z
 42 +
 43 RCL 01          
 44 SQRT
 45 *
 46 +
 47 ST+ 01
 48 ST+ 02
 49 ST+ 03
 50 4
 51 ST/ 01
 52 ST/ 02
 53 ST/ 03
 54 R^
 55 3
 56 RCL 01
 57 RCL 02
 58 +
 59 RCL 03
 60 +
 61 /
 62 SQRT
 63 X>Y?
 64 GTO 01
 65 RTN
 66 LBL "RJ"
 67 XEQ 14
 68 LBL 02
 69 RCL 04
 70 SQRT
 71 ENTER
 72 STO 01
 73 RCL 05          
 74 SQRT
 75 ST* Z
 76 STO 02
 77 RCL 06
 78 SQRT
 79 ST* T
 80 ST* 02
 81 +
 82 ST* 01
 83 +
 84 RCL 07
 85 *
 86 +
 87 X^2
 88 RCL 07
 89 RCL 01
 90 RCL 02
 91 +
 92 ST+ 04
 93 ST+ 05
 94 ST+ 06
 95 RCL 07
 96 +
 97 STO 07
 98 RCL 06
 99 XEQ 12
100 X>Y?
101 GTO 02
102 RTN
103 LBL "RJZ"
104 XEQ 14
105 SF 10
106 LBL 03
107 RCL 06          
108 RCL 05
109 R-P
110 ENTER
111 STO Z
112 LASTX
113 +
114 ST+ X
115 SQRT
116 STO 01
117 RCL 04
118 SQRT
119 ST* T
120 ST+ 01
121 *
122 +
123 ST+ 04
124 ST+ 05
125 X<> 07
126 ST+ 07
127 ENTER
128 X<> 01
129 *
130 +
131 X^2
132 RCL 01          
133 RCL 07
134 RCL 05
135 XEQ 12
136 ST- Y
137 /
138 ABS
139 2 E-9
140 X<Y?
141 GTO 03
142 FS?C 10
143 GTO 03
144 RCL 00
145 RTN
146 LBL 12
147 STO 10
148 RDN
149 X^2
150 *
151 ENTER
152 XEQ 13
153 RCL 09
154 *
155 ST+ 08
156 4
157 ST/ 04
158 ST/ 05
159 ST/ 06
160 ST/ 07
161 ST/ 09
162 ST/ 10
163 RCL 00
164 RCL 09          
165 RCL 04
166 RCL 05
167 +
168 RCL 07
169 ST+ X
170 +
171 RCL 10
172 +
173 5
174 /
175 ENTER
176 SQRT
177 *
178 /
179 RCL 08
180 3
181 *
182 +
183 STO 00
184 RTN
185 LBL 14
186 STO 04
187 RDN
188 STO 05
189 RDN
190 STO 06          
191 X<>Y
192 STO 07
193 CLX
194 STO 00
195 STO 08
196 SIGN
197 STO 09
198 END


         ( 279 bytes / SIZE 011 )

 

           STACK           INPUTS         OUTPUT
                T             p > 0                /
                Z                z                /
                Y                y                /
                X                x          RF or RJ

    p is only useful to compute RJ

Examples:

     4  ENTER^
     2  ENTER^
     1  XEQ "RF"   >>>>  RF( 1 , 2 , 4 ) = 0.685085816                                   ---Exectution time = 11s---
 
     4  ENTER^
     3  ENTER^
     2  XEQ "RFZ"   >>>>   RF( 2 , 3+4.i , 3-4.i ) = 0.543421944                    ---Exectution time = 12s---

     4  ENTER^
     3  ENTER^
     2  ENTER^
     1  XEQ "RJ"   >>>>   RJ( 1 , 2 , 3 , 4 ) = 0.239848100                               ---Exectution time = 39s---

     4  ENTER^
     3  ENTER^
     2  ENTER^
     1  XEQ "RJZ"   >>>>   RJ( 1 , 2+3.i , 2-3.i , 4 ) = 0.205644140                 ---Exectution time = 52s---


3°)  RF+RFZ+RJ+RJZ  ( slightly shorter program )


-We can again save a few bytes if we use the formulae given in reference [3] to compute  I = RJ( x , y+i.z , y-i.z , p )

   I = [ s / ( s2 - u p ) ] [ 2 ( s - u ) RJ( u , v , w , s ) - 3 RF( x , y+i.z , y-i.z ) + 3 RF( x , p , p ) }]    with

  2 u = y + ( y2 + z2 )1/2
  2 v = x + ( y2 + z2 )1/2 + [ (y-x)2 + z2 ]1/2
  2 w = x + ( y2 + z2 )1/2 - [ (y-x)2 + z2 ]1/2

  2 s = p + ( y2 + z2 )1/2 + [ (y-p)2 + z2 ]1/2


Data Registers:  R00 to R13: temp
Flags: /
Subroutines: /
 


 01 LBL "RFZ"
 02 LBL 12
 03 STO 01
 04 X<>Y
 05 STO 02
 06 -
 07 X<>Y
 08 STO 03
 09 R-P
 10 ENTER
 11 CHS
 12 RCL 01
 13 ST+ Z
 14 +
 15 RCL 02
 16 RCL 03
 17 R-P
 18 STO 00
 19 X<>Y
 20 RDN
 21 ST+ Y
 22 ST+ Z
 23 RCL 02
 24 +
 25 2
 26 ST/ Z
 27 ST/ T
 28 /
 29 STO 08          
 30 RDN
 31 STO 09
 32 X<>Y
 33 STO 10
 34 X<>Y
 35 R^
 36 LBL "RF"
 37 LBL 13
 38 STO 01
 39 RDN
 40 STO 02
 41 X<>Y
 42 STO 03
 43 CLX
 44 LBL 01
 45 RCL 02
 46 SQRT
 47 RCL X
 48 RCL 03
 49 SQRT
 50 ST* Z
 51 +
 52 RCL 01          
 53 SQRT
 54 *
 55 +
 56 ST+ 01
 57 ST+ 02
 58 ST+ 03
 59 4
 60 ST/ 01
 61 ST/ 02
 62 ST/ 03
 63 R^
 64 3
 65 RCL 01
 66 RCL 02
 67 +
 68 RCL 03
 69 +
 70 /
 71 SQRT
 72 X>Y?
 73 GTO 01
 74 RTN
 75 LBL "RJZ"
 76 XEQ 14
 77 RCL 07
 78 RCL 07
 79 RCL 04
 80 XEQ 13
 81 STO 11
 82 RCL 06
 83 RCL 05          
 84 RCL 04
 85 XEQ 12
 86 RCL 11
 87 -
 88 3
 89 *
 90 STO 11
 91 RCL 05
 92 RCL 07
 93 ST+ 00
 94 -
 95 RCL 06
 96 R-P
 97 RCL 00
 98 +
 99 2
100 /
101 STO 12
102 ENTER
103 X^2
104 RCL 08
105 RCL 07
106 *
107 -
108 /
109 STO 13
110 RCL 12
111 RCL 10
112 RCL 09
113 RCL 08          
114 ST- 12
115 XEQ 10
116 RCL 12
117 ST+ X
118 *
119 RCL 11
120 -
121 RCL 13
122 *
123 RTN
124 LBL "RJ"
125 LBL 10
126 XEQ 14
127 LBL 02
128 RCL 04
129 SQRT
130 ENTER
131 STO 01
132 RCL 05
133 SQRT
134 ST* Z
135 STO 02
136 RCL 06
137 SQRT
138 ST* T
139 ST* 02
140 +
141 ST* 01
142 +
143 RCL 07          
144 *
145 +
146 X^2
147 RCL 07
148 RCL 01
149 RCL 02
150 +
151 ST+ 04
152 ST+ 05
153 ST+ 06
154 RCL 07
155 +
156 STO 07
157 X^2
158 *
159 ENTER
160 XEQ 13
161 RCL 09
162 *
163 ST+ 08
164 4
165 ST/ 04
166 ST/ 05
167 ST/ 06
168 ST/ 07
169 ST/ 09
170 RCL 00
171 RCL 09          
172 RCL 04
173 RCL 05
174 +
175 RCL 06
176 +
177 RCL 07
178 ST+ X
179 +
180 5
181 /
182 ENTER
183 SQRT
184 *
185 /
186 RCL 08
187 3
188 *
189 +
190 STO 00
191 X>Y?
192 GTO 02
193 RTN
194 LBL 14
195 STO 04
196 RDN
197 STO 05
198 RDN
199 STO 06
200 X<>Y
201 STO 07          
202 CLX
203 STO 00
204 STO 08
205 SIGN
206 STO 09
207 END


         ( 275 bytes / SIZE 014 )

 

           STACK           INPUTS         OUTPUT
                T             p > 0                /
                Z                z                /
                Y                y                /
                X                x          RF or RJ

    p is only useful to compute RJ

Examples:

     4  ENTER^
     2  ENTER^
     1  XEQ "RF"   >>>>  RF( 1 , 2 , 4 ) = 0.685085816                                   ---Exectution time = 11s---
 
     4  ENTER^
     3  ENTER^
     2  XEQ "RFZ"   >>>>   RF( 2 , 3+4.i , 3-4.i ) = 0.543421944                    ---Exectution time = 12s---

     4  ENTER^
     3  ENTER^
     2  ENTER^
     1  XEQ "RJ"   >>>>   RJ( 1 , 2 , 3 , 4 ) = 0.239848100                               ---Exectution time = 38s---

     4  ENTER^
     3  ENTER^
     2  ENTER^
     1  XEQ "RJZ"   >>>>   RJ( 1 , 2+3.i , 2-3.i , 4 ) = 0.205644140                 ---Exectution time = 69s---


Note:

"RJZ" is much slower but we have saved 4 bytes (!)


4°)  Slightly Different Formulae


 
    a) Program#1



-In paragraphs 1°) 2°) 3°)  we use the formulae:

           RF(x;y;z) = RF((x+L)/4;(y+L)/4;(z+L)/4)  where  L = x1/2y1/2 + x1/2z1/2 + y1/2z1/2

and     RJ(x;y;z;p) = 3 RF(a,b,b) + (1/4) RJ((x+L)/4;(y+L)/4;(z+L)/4,(p+L)/4)           where                 a = ( p( x1/2 + y1/2 + z1/2 ) + ( xyz )1/2 )2    ;   b = p ( p + L )2


-In paragraph 4°) , the following formulas are employed:


          RF(x;y;z) = 2 RF(x+L;y+L;z+L)     and

         RJ(x;y;z;p) = 3 RF(a,b,b) + 2 RJ(x+L;y+L;z+L,p+L)                  12 bytes and a few seconds are saved !



Data Registers:  R00 to R08: temp
Flag:  F10
Subroutines: /
 


 01 LBL "RFZ"
 02 STO 01
 03 X<>Y
 04 STO 02
 05 -
 06 X<>Y
 07 STO 03
 08 R-P
 09 ENTER
 10 CHS
 11 RCL 01
 12 ST+ Z
 13 +
 14 RCL 02
 15 RCL 03
 16 R-P
 17 X<>Y
 18 RDN
 19 ST+ Y
 20 ST+ Z
 21 RCL 02
 22 +
 23 2
 24 ST/ Z
 25 ST/ T
 26 /
 27 LBL "RF"
 28 STO 01          
 29 RDN
 30 STO 02
 31 X<>Y
 32 STO 03
 33 2
 34 STO 00
 35 CLX
 36 LBL 01
 37 RCL 02
 38 SQRT
 39 RCL X
 40 RCL 03
 41 SQRT
 42 ST* Z
 43 +
 44 RCL 01
 45 SQRT
 46 *
 47 +
 48 ST+ 01
 49 ST+ 02
 50 ST+ 03
 51 R^
 52 3
 53 RCL 01
 54 RCL 02
 55 +
 56 RCL 03
 57 +
 58 /
 59 SQRT
 60 RCL 00          
 61 ST+ 00
 62 *
 63 X>Y?
 64 GTO 01
 65 RTN
 66 LBL "RJ"
 67 XEQ 09
 68 RAD
 69 LBL 02
 70 RCL 01
 71 SQRT
 72 ENTER
 73 STO 05
 74 RCL 02
 75 SQRT
 76 ST* Z
 77 STO 06
 78 RCL 03
 79 SQRT
 80 ST* T
 81 ST* 06
 82 +
 83 ST* 05
 84 +
 85 RCL 04
 86 *
 87 +
 88 X^2
 89 RCL 04          
 90 RCL 05
 91 RCL 06
 92 +
 93 ST+ 01
 94 ST+ 02
 95 ST+ 03
 96 RCL 04
 97 +
 98 STO 04
 99 X^2
100 *
101 RCL 03
102 XEQ 08
103 X>Y?
104 GTO 02
105 DEG
106 RTN
107 LBL "RJZ"
108 XEQ 09
109 SF 10
110 RAD
111 LBL 03
112 RCL 03
113 RCL 02
114 R-P
115 ENTER
116 STO Z
117 LASTX
118 +
119 ST+ X
120 SQRT
121 STO 05
122 RCL 01          
123 SQRT
124 ST* T
125 ST+ 05
126 *
127 +
128 ST+ 01
129 ST+ 02
130 X<> 04
131 ST+ 04
132 ENTER
133 X<> 05
134 *
135 +
136 X^2
137 RCL 05
138 RCL 04
139 ENTER
140 *
141 *
142 RCL 02
143 XEQ 08
144 ST- Y
145 /
146 ABS
147 2 E-9
148 X<Y?
149 GTO 03
150 FS?C 10
151 GTO 03
152 RCL 00
153 DEG
154 RTN
155 LBL 08
156 STO 06          
157 RDN
158 X=Y?
159 GTO 04
160 -
161 STO 05
162 X<>Y
163 /
164 X<0?
165 GTO 05
166 SQRT
167 ENTER
168 ST+ Y
169 SIGN
170 LASTX
171 -
172 /
173 LN1+X
174 2
175 /
176 GTO 06
177 LBL 04
178 SQRT
179 1/X
180 GTO 07
181 LBL 05
182 CHS
183 SQRT
184 ATAN
185 LBL 06
186 RCL 05
187 ABS
188 SQRT
189 /
190 LBL 07
191 RCL 07          
192 ST+ 07
193 *
194 ST+ 08
195 RCL 00
196 RCL 07
197 RCL 01
198 RCL 02
199 +
200 RCL 04
201 ST+ X
202 +
203 RCL 06
204 +
205 5
206 /
207 ENTER
208 SQRT
209 *
210 /
211 RCL 08
212 3
213 *
214 +
215 STO 00
216 RTN
217 LBL 09
218 STO 01
219 RDN
220 STO 02
221 RDN
222 STO 03          
223 X<>Y
224 STO 04
225 CLX
226 STO 00
227 STO 08
228 SIGN
229 STO 07
230 END


         ( 307 bytes / SIZE 009 )

 

           STACK           INPUTS         OUTPUT
                T             p > 0                /
                Z                z                /
                Y                y                /
                X                x          RF or RJ

    p is only useful to compute RJ

Examples:

     4  ENTER^
     2  ENTER^
     1  XEQ "RF"   >>>>  RF( 1 , 2 , 4 ) = 0.685085816                                   ---Exectution time = 9s---
 
     4  ENTER^
     3  ENTER^
     2  XEQ "RFZ"   >>>>   RF( 2 , 3+4.i , 3-4.i ) = 0.543421944                    ---Exectution time = 12s---

     4  ENTER^
     3  ENTER^
     2  ENTER^
     1  XEQ "RJ"   >>>>   RJ( 1 , 2 , 3 , 4 ) = 0.239848100                               ---Exectution time = 21s---

     4  ENTER^
     3  ENTER^
     2  ENTER^
     1  XEQ "RJZ"   >>>>   RJ( 1 , 2+3.i , 2-3.i , 4 ) = 0.205644141                 ---Exectution time = 23s---


Note:

-This program corresponds to the program listed in §1°)
-Likewise, we can modify the routine listed in paragraph 2°) with the same modified formulas:


      b) Program#2



Data Registers:  R00 to R11: temp
Flag:  F10
Subroutines: /
 


 01 LBL "RFZ"
 02 STO 01
 03 X<>Y
 04 STO 02
 05 -
 06 X<>Y
 07 STO 03
 08 R-P
 09 ENTER
 10 CHS
 11 RCL 01
 12 ST+ Z
 13 +
 14 RCL 02
 15 RCL 03
 16 R-P
 17 X<>Y
 18 RDN
 19 ST+ Y
 20 ST+ Z
 21 RCL 02          
 22 +
 23 2
 24 ST/ Z
 25 ST/ T
 26 /
 27 LBL "RF"
 28 LBL 13
 29 STO 01
 30 RDN
 31 STO 02
 32 X<>Y
 33 STO 03
 34 2
 35 STO 00
 36 CLX
 37 LBL 01
 38 RCL 02
 39 SQRT
 40 RCL X
 41 RCL 03
 42 SQRT
 43 ST* Z
 44 +
 45 RCL 01
 46 SQRT
 47 *
 48 +
 49 ST+ 01
 50 ST+ 02
 51 ST+ 03
 52 R^
 53 3
 54 RCL 01          
 55 RCL 02
 56 +
 57 RCL 03
 58 +
 59 /
 60 SQRT
 61 RCL 00
 62 ST+ 00
 63 *
 64 X>Y?
 65 GTO 01
 66 RTN
 67 LBL "RJ"
 68 XEQ 14
 69 LBL 02
 70 RCL 04
 71 SQRT
 72 ENTER
 73 STO 01
 74 RCL 05
 75 SQRT
 76 ST* Z
 77 STO 02
 78 RCL 06          
 79 SQRT
 80 ST* T
 81 ST* 02
 82 +
 83 ST* 01
 84 +
 85 RCL 07
 86 *
 87 +
 88 X^2
 89 RCL 07
 90 RCL 01
 91 RCL 02
 92 +
 93 ST+ 04
 94 ST+ 05
 95 ST+ 06
 96 RCL 07
 97 +
 98 STO 07
 99 RCL 06
100 XEQ 12
101 X>Y?
102 GTO 02
103 RTN
104 LBL "RJZ"
105 XEQ 14
106 SF 10
107 LBL 03
108 RCL 06          
109 RCL 05
110 R-P
111 ENTER
112 STO Z
113 LASTX
114 +
115 ST+ X
116 SQRT
117 STO 01
118 RCL 04
119 SQRT
120 ST* T
121 ST+ 01
122 *
123 +
124 ST+ 04
125 ST+ 05
126 X<> 07
127 ST+ 07
128 ENTER
129 X<> 01
130 *
131 +
132 X^2
133 RCL 01          
134 RCL 07
135 RCL 05
136 XEQ 12
137 ST- Y
138 /
139 ABS
140 2 E-9
141 X<Y?
142 GTO 03
143 FS?C 10
144 GTO 03
145 RCL 11
146 RTN
147 LBL 12
148 STO 10
149 RDN
150 X^2
151 *
152 ENTER
153 XEQ 13
154 RCL 09
155 ST+ 09
156 *
157 ST+ 08
158 RCL 11
159 RCL 09
160 RCL 04          
161 RCL 05
162 +
163 RCL 07
164 ST+ X
165 +
166 RCL 10
167 +
168 5
169 /
170 ENTER
171 SQRT
172 *
173 /
174 RCL 08
175 3
176 *
177 +
178 STO 11
179 RTN
180 LBL 14
181 STO 04
182 RDN
183 STO 05
184 RDN
185 STO 06          
186 X<>Y
187 STO 07
188 CLX
189 STO 08
190 STO 11
191 SIGN
192 STO 09
193 END


         ( 267 bytes / SIZE 012 )

 

           STACK           INPUTS         OUTPUT
                T             p > 0                /
                Z                z                /
                Y                y                /
                X                x          RF or RJ

    p is only useful to compute RJ

Examples:

     4  ENTER^
     2  ENTER^
     1  XEQ "RF"   >>>>  RF( 1 , 2 , 4 ) = 0.685085816                                   ---Exectution time = 9s---
 
     4  ENTER^
     3  ENTER^
     2  XEQ "RFZ"   >>>>   RF( 2 , 3+4.i , 3-4.i ) = 0.543421944                    ---Exectution time = 12s---

     4  ENTER^
     3  ENTER^
     2  ENTER^
     1  XEQ "RJ"   >>>>   RJ( 1 , 2 , 3 , 4 ) = 0.239848100                               ---Exectution time = 40s---

     4  ENTER^
     3  ENTER^
     2  ENTER^
     1  XEQ "RJZ"   >>>>   RJ( 1 , 2+3.i , 2-3.i , 4 ) = 0.205644141                 ---Exectution time = 47s---


Note:

-The program listed in §3°) could be modified similarly...






References:


[1]  B.C. Carlson - "Numerical Computation of Real or Complex Elliptic Integrals"
[2} W. J. Nellis & B.C. Carlson - "Reduction and Evaluation of Elliptic Integrals"
[3]  D. G. Zill & B. C. Carlson - "Symmetric Elliptic Integrals of the Third Kind"
[4]  https://en.wikipedia.org/w/index.php?title=Carlson_symmetric_form&oldid=1037291384"
[5]  B. C. Carlson - "A Table of Elliptic Integrals of the Third Kind"