286
286
287
287
# series about origin, general ν
288
288
# https://functions.wolfram.com/GammaBetaErf/ExpIntegralE/06/01/04/01/01/0003/
289
- function En_expand_origin (ν:: Number , z:: Number )
290
- if isinteger (ν)
291
- # go to special case for integer ν
292
- return En_expand_origin (Int (ν), z)
293
- end
289
+ function En_expand_origin_general (ν:: Number , z:: Number )
294
290
gammaterm = En_safe_gamma_term (ν, z)
295
- frac = 1
291
+ frac = one ( real (z))
296
292
sumterm = frac / (1 - ν)
297
293
k, maxiter = 1 , 100
298
294
ϵ = 10 * eps (real (sumterm))
@@ -305,21 +301,20 @@ function En_expand_origin(ν::Number, z::Number)
305
301
end
306
302
k += 1
307
303
end
308
-
309
304
return gammaterm - sumterm
310
305
end
311
306
312
- # series about the origin, special case for integer n
307
+ # series about the origin, special case for integer n > 0
313
308
# https://functions.wolfram.com/GammaBetaErf/ExpIntegralE/06/01/04/01/02/0005/
314
- function En_expand_origin (n:: Integer , z:: Number )
309
+ function En_expand_origin_posint (n:: Integer , z:: Number )
315
310
gammaterm = 1 # (-z)^(n-1) / (n-1)!
316
311
for i = 1 : n- 1
317
312
gammaterm *= - z / i
318
313
end
319
314
320
- gammaterm *= digamma (n) - log (z )
321
- sumterm = float (n == 1 ? 0 : 1 / ( 1 - n) )
322
- frac = 1
315
+ frac = one ( real (z) )
316
+ gammaterm *= digamma ( oftype (frac,n)) - log (z )
317
+ sumterm = n == 1 ? zero (frac) : frac / ( 1 - n)
323
318
k, maxiter = 1 , 100
324
319
ϵ = 10 * eps (real (sumterm))
325
320
while k < maxiter
@@ -337,6 +332,14 @@ function En_expand_origin(n::Integer, z::Number)
337
332
return gammaterm - sumterm
338
333
end
339
334
335
+ function En_expand_origin (ν:: Number , z:: Number )
336
+ if isinteger (ν) && real (ν) > 0
337
+ return En_expand_origin_posint (Integer (ν), z)
338
+ else
339
+ return En_expand_origin_general (ν, z)
340
+ end
341
+ end
342
+
340
343
# can find imaginary part of E_ν(x) for x on negative real axis analytically
341
344
# https://functions.wolfram.com/GammaBetaErf/ExpIntegralE/04/05/01/0003/
342
345
function En_imagbranchcut (ν:: Number , z:: Number )
0 commit comments