@@ -220,8 +220,8 @@ function G(z::Union{Float64, ComplexF64, Dual128, DualComplex256}, ϵ::Union{Flo
220
220
end
221
221
end
222
222
223
- G (z:: Number , ϵ:: Number ) = ϵ == 0 ? digamma (z)/ unsafe_gamma (z) : (inv (unsafe_gamma (z))- inv (unsafe_gamma (z+ ϵ)))/ ϵ
224
-
223
+ G (z:: T , ϵ:: T ) where {T <: Number } = ϵ == 0 ? digamma (z)/ unsafe_gamma (z) : (inv (unsafe_gamma (z))- inv (unsafe_gamma (z+ ϵ)))/ ϵ
224
+ G (z :: Number , ϵ :: Number ) = G ( promote (z, ϵ) ... )
225
225
226
226
"""
227
227
Compute the function ((z+ϵ)ₘ-(z)ₘ)/ϵ
@@ -271,9 +271,35 @@ G(z::AbstractVector{BigFloat}, ϵ::BigFloat) = BigFloat[G(zi, ϵ) for zi in z]
271
271
272
272
# Transformation formula w = 1-z
273
273
274
- reconeα₀ (a, b, c, m:: Int , ϵ) = ϵ == 0 ? (- 1 )^ m* gamma (m)* gamma (c)/ (gamma (a+ m)* gamma (b+ m)) : gamma (c)/ (ϵ* gamma (1 - m- ϵ)* gamma (a+ m+ ϵ)* gamma (b+ m+ ϵ))
275
- reconeβ₀ (a, b, c, w, m:: Int , ϵ) = abs (ϵ) > 0.1 ? ( pochhammer (float (a), m)* pochhammer (b, m)/ (gamma (1 - ϵ)* gamma (a+ m+ ϵ)* gamma (b+ m+ ϵ)* gamma (m+ 1 )) - w^ ϵ/ (gamma (a)* gamma (b)* gamma (m+ 1 + ϵ)) )* gamma (c)* w^ m/ ϵ : ( (G (1.0 , - ϵ)/ gamma (m+ 1 )+ G (m+ 1.0 , ϵ))/ (gamma (a+ m+ ϵ)* gamma (b+ m+ ϵ)) - (G (float (a)+ m, ϵ)/ gamma (b+ m+ ϵ)+ G (float (b)+ m, ϵ)/ gamma (a+ m))/ gamma (m+ 1 + ϵ) - E (log (w), ϵ)/ (gamma (a+ m)* gamma (b+ m)* gamma (m+ 1 + ϵ)) )* gamma (c)* pochhammer (float (a), m)* pochhammer (b, m)* w^ m
276
- reconeγ₀ (a, b, c, w, m:: Int , ϵ) = gamma (c)* pochhammer (float (a), m)* pochhammer (b, m)* w^ m/ (gamma (a+ m+ ϵ)* gamma (b+ m+ ϵ)* gamma (m+ 1 )* gamma (1 - ϵ))
274
+ function reconeα₀ (a, b, c, m:: Int , ϵ)
275
+ _a, _b, _c, _ϵ = promote (a, b, c, ϵ)
276
+ return _reconeα₀ (_a, _b, _c, m, _ϵ)
277
+ end
278
+ function _reconeα₀ (a:: T , b:: T , c:: T , m:: Int , ϵ:: T ) where {T}
279
+ if ϵ == 0
280
+ return (- 1 )^ m* gamma (real (T)(m))* gamma (c)/ (gamma (a+ m)* gamma (b+ m))
281
+ else
282
+ return gamma (c)/ (ϵ* gamma (1 - m- ϵ)* gamma (a+ m+ ϵ)* gamma (b+ m+ ϵ))
283
+ end
284
+ end
285
+ function reconeβ₀ (a, b, c, w, m:: Int , ϵ)
286
+ _a, _b, _c, _, _ϵ = promote (a, b, c, real (w), ϵ)
287
+ _w, _ = promote (w, zero (_a))
288
+ return _reconeβ₀ (_a, _b, _c, _w, m, _ϵ)
289
+ end
290
+ function _reconeβ₀ (a:: T , b:: T , c:: T , w:: Number , m:: Int , ϵ:: T ) where {T}
291
+ if abs (ϵ) > 0.1
292
+ return ( pochhammer (a, m)* pochhammer (b, m)/ (gamma (1 - ϵ)* gamma (a+ m+ ϵ)* gamma (b+ m+ ϵ)* gamma (real (T)(m)+ 1 )) - w^ ϵ/ (gamma (a)* gamma (b)* gamma (m+ 1 + ϵ)) )* gamma (c)* w^ m/ ϵ
293
+ else
294
+ return ( (G (1 , - ϵ)/ gamma (real (T)(m)+ 1 )+ G (m+ 1 , ϵ))/ (gamma (a+ m+ ϵ)* gamma (b+ m+ ϵ)) - (G (a+ m, ϵ)/ gamma (b+ m+ ϵ)+ G (float (b)+ m, ϵ)/ gamma (a+ m))/ gamma (m+ 1 + ϵ) - E (log (w), ϵ)/ (gamma (a+ m)* gamma (b+ m)* gamma (m+ 1 + ϵ)) )* gamma (c)* pochhammer (a, m)* pochhammer (b, m)* w^ m
295
+ end
296
+ end
297
+ function reconeγ₀ (a, b, c, w, m:: Int , ϵ)
298
+ _a, _b, _c, _, _ϵ = promote (a, b, c, real (w), ϵ)
299
+ _w, _ = promote (w, zero (_a))
300
+ return _reconeγ₀ (_a, _b, _c, _w, m, _ϵ)
301
+ end
302
+ _reconeγ₀ (a:: T , b:: T , c:: T , w:: Number , m:: Int , ϵ:: T ) where {T} = gamma (c)* pochhammer (a, m)* pochhammer (b, m)* w^ m/ (gamma (a+ m+ ϵ)* gamma (b+ m+ ϵ)* gamma (real (T)(m)+ 1 )* gamma (1 - ϵ))
277
303
278
304
function Aone (a, b, c, w, m:: Int , ϵ)
279
305
αₙ = reconeα₀ (a, b, c, m, ϵ)* one (w)
@@ -306,14 +332,38 @@ end
306
332
307
333
# Transformation formula w = 1/z
308
334
309
- recInfα₀ (a, b, c, m:: Int , ϵ) = ϵ == 0 ? (- 1 )^ m* gamma (m)* gamma (c)/ (gamma (a+ m)* gamma (c- a)) : gamma (c)/ (ϵ* gamma (1 - m- ϵ)* gamma (a+ m+ ϵ)* gamma (c- a))
310
- recInfβ₀ (a, b, c, w, m:: Int , ϵ) = abs (ϵ) > 0.1 ?
311
- ( pochhammer (float (a), m)* pochhammer (float (1 - c+ a), m)/ (gamma (1 - ϵ)* gamma (a+ m+ ϵ)* gamma (c- a)* gamma (m+ 1 )) -
312
- (- w)^ ϵ* pochhammer (float (1 - c+ a)+ ϵ, m)/ (gamma (a)* gamma (c- a- ϵ)* gamma (m+ 1 + ϵ)) )* gamma (c)* w^ m/ ϵ :
313
- ( (pochhammer (float (1 - c+ a)+ ϵ, m)* G (1.0 , - ϵ)- P (1 - c+ a, ϵ, m)/ gamma (1 - ϵ))/ (gamma (c- a)* gamma (a+ m+ ϵ)* gamma (m+ 1 )) +
314
- pochhammer (float (1 - c+ a)+ ϵ, m)* ( (G (m+ 1.0 , ϵ)/ gamma (a+ m+ ϵ) - G (float (a)+ m, ϵ)/ gamma (m+ 1 + ϵ))/ gamma (c- a) -
315
- (G (float (c- a), - ϵ) - E (- log (- w), - ϵ)/ gamma (c- a- ϵ))/ (gamma (m+ 1 + ϵ)* gamma (a+ m)) ) )* gamma (c)* pochhammer (float (a), m)* w^ m
316
- recInfγ₀ (a, b, c, w, m:: Int , ϵ) = gamma (c)* pochhammer (float (a), m)* pochhammer (float (1 - c+ a), m)* w^ m/ (gamma (a+ m+ ϵ)* gamma (c- a)* gamma (m+ 1 )* gamma (1 - ϵ))
335
+ function recInfα₀ (a, b, c, m:: Int , ϵ)
336
+ _a, _b, _c, _ϵ = promote (a, b, c, ϵ)
337
+ return _recInfα₀ (_a, _b, _c, m, _ϵ)
338
+ end
339
+ function _recInfα₀ (a:: T , b:: T , c:: T , m:: Int , ϵ:: T ) where {T}
340
+ if ϵ == 0
341
+ return (- 1 )^ m* gamma (real (T)(m))* gamma (c)/ (gamma (a+ m)* gamma (c- a))
342
+ else
343
+ return gamma (c)/ (ϵ* gamma (1 - m- ϵ)* gamma (a+ m+ ϵ)* gamma (c- a))
344
+ end
345
+ end
346
+ function recInfβ₀ (a, b, c, w, m:: Int , ϵ)
347
+ _a, _b, _c, _, _ϵ = promote (a, b, c, real (w), ϵ)
348
+ _w, _ = promote (w, zero (_a))
349
+ return _recInfβ₀ (_a, _b, _c, _w, m, _ϵ)
350
+ end
351
+ function _recInfβ₀ (a:: T , b:: T , c:: T , w:: Number , m:: Int , ϵ:: T ) where {T}
352
+ if abs (ϵ) > 0.1
353
+ return ( pochhammer (a, m)* pochhammer (1 - c+ a, m)/ (gamma (1 - ϵ)* gamma (a+ m+ ϵ)* gamma (c- a)* gamma (real (T)(m)+ 1 )) -
354
+ (- w)^ ϵ* pochhammer (1 - c+ a+ ϵ, m)/ (gamma (a)* gamma (c- a- ϵ)* gamma (m+ 1 + ϵ)) )* gamma (c)* w^ m/ ϵ
355
+ else
356
+ return ( (pochhammer (1 - c+ a+ ϵ, m)* G (1 , - ϵ)- P (1 - c+ a, ϵ, m)/ gamma (1 - ϵ))/ (gamma (c- a)* gamma (a+ m+ ϵ)* gamma (real (T)(m)+ 1 )) +
357
+ pochhammer (1 - c+ a+ ϵ, m)* ( (G (m+ 1 , ϵ)/ gamma (a+ m+ ϵ) - G (a+ m, ϵ)/ gamma (m+ 1 + ϵ))/ gamma (c- a) -
358
+ (G (c- a, - ϵ) - E (- log (- w), - ϵ)/ gamma (c- a- ϵ))/ (gamma (m+ 1 + ϵ)* gamma (a+ m)) ) )* gamma (c)* pochhammer (a, m)* w^ m
359
+ end
360
+ end
361
+ function recInfγ₀ (a, b, c, w, m:: Int , ϵ)
362
+ _a, _b, _c, _, _ϵ = promote (a, b, c, real (w), ϵ)
363
+ _w, _ = promote (w, zero (_a))
364
+ return _recInfγ₀ (_a, _b, _c, _w, m, _ϵ)
365
+ end
366
+ _recInfγ₀ (a:: T , b:: T , c:: T , w:: Number , m:: Int , ϵ:: T ) where {T} = gamma (c)* pochhammer (a, m)* pochhammer (1 - c+ a, m)* w^ m/ (gamma (a+ m+ ϵ)* gamma (c- a)* gamma (real (T)(m)+ 1 )* gamma (1 - ϵ))
317
367
318
368
function AInf (a, b, c, w, m:: Int , ϵ)
319
369
αₙ = recInfα₀ (a, b, c, m, ϵ)* one (w)
0 commit comments