@@ -214,6 +214,59 @@ function pFqweniger(α::Tuple{T1}, β::Tuple{T2}, z::T3; kmax::Int = KMAX) where
214
214
return isfinite (Thi) ? Thi : isfinite (Tmid) ? Tmid : Tlo
215
215
end
216
216
217
+ # ₀F₂(α,β;z), algorithm γ = 2.
218
+ function pFqweniger (α:: Tuple{} , β:: Tuple{T1, T1} , z:: T2 ; kmax:: Int = KMAX) where {T1, T2}
219
+ (α, β) = β
220
+ T = promote_type (T1, T2)
221
+ if norm (z) < eps (real (T))
222
+ return one (T)
223
+ end
224
+ ζ = inv (z)
225
+ Nlo = α* β* ζ
226
+ Dlo = α* β* ζ
227
+ Tlo = Nlo/ Dlo
228
+ a0 = T (1 )
229
+ b0 = 2 * T (α+ 1 )* T (β+ 1 )
230
+ Nmid2 = (b0* ζ- a0)* Nlo + b0* ζ
231
+ Dmid2 = (b0* ζ- a0)* Dlo
232
+ Tmid2 = Nmid2/ Dmid2
233
+ k = 1
234
+ b0 = 6 * T (α+ 2 )* T (β+ 2 )
235
+ b1 = 6 * T (α+ β+ 3 )
236
+ t0 = b0* ζ
237
+ t1 = b1* ζ+ 1
238
+ Nmid1 = t0* Nmid2 + t1* Nlo + b1* ζ
239
+ Dmid1 = t0* Dmid2 + t1* Dlo
240
+ Tmid1 = Nmid1/ Dmid1
241
+ k = 2
242
+ a2 = T (5 )/ T (3 )
243
+ b0 = 10 * T (α+ 3 )* T (β+ 3 )
244
+ b1 = - 10 * (T (α- 1 )* β- T (α+ 11 ))
245
+ b2 = T (40 )
246
+ t0 = b0* ζ+ T (5 )/ T (3 )
247
+ t1 = b1* ζ+ 1
248
+ t2 = b2* ζ- a2
249
+ Nhi = t0* Nmid1 + t1* Nmid2 + t2* Nlo + b2* ζ
250
+ Dhi = t0* Dmid1 + t1* Dmid2 + t2* Dlo
251
+ Thi = Nhi/ Dhi
252
+ k = 3
253
+ while k < 6 || (k < kmax && errcheck (Tmid1, Thi, 8 eps (real (T))))
254
+ a3 = - k* T (2 k+ 1 )/ T ((k- 1 )* (2 k- 3 ))
255
+ b0 = T (4 k+ 2 )* T (α+ k+ 1 )* T (β+ k+ 1 )
256
+ b1 = (T (k* (k- 1 ))- T (α+ 1 )* T (β+ 1 ))* T (2 k- 1 )* T (4 k+ 2 )/ T (k- 1 )
257
+ b2 = T (k- α- 2 )* T (k- β- 2 )* T (4 k+ 2 )* k/ T (k- 1 )
258
+ t0 = b0* ζ+ T (2 k+ 1 )/ T (k- 1 )
259
+ t1 = b1* ζ- 3 * T (2 k- 1 )/ T ((k- 1 )* (2 k- 3 ))
260
+ t2 = b2* ζ- T (2 k+ 1 )/ T (k- 1 )
261
+ Nhi, Nmid1, Nmid2, Nlo = t0* Nhi + t1* Nmid1 + t2* Nmid2 - a3* Nlo, Nhi, Nmid1, Nmid2
262
+ Dhi, Dmid1, Dmid2, Dlo = t0* Dhi + t1* Dmid1 + t2* Dmid2 - a3* Dlo, Dhi, Dmid1, Dmid2
263
+ Thi, Tmid1, Tmid2, Tlo = Nhi/ Dhi, Thi, Tmid1, Tmid2
264
+ k += 1
265
+ end
266
+ k < kmax || @warn " Rational approximation to " * pFq2string (Val {0} (), Val {2} ())* " reached the maximum type of (" * string (kmax, " , " , kmax)* " )."
267
+ return isfinite (Thi) ? Thi : isfinite (Tmid1) ? Tmid1 : isfinite (Tmid2) ? Tmid2 : Tlo
268
+ end
269
+
217
270
# ₂F₁(α,β,γ;z), algorithm γ = 2.
218
271
function pFqweniger (α:: Tuple{T1, T1} , β:: Tuple{T2} , z:: T3 ; kmax:: Int = KMAX) where {T1, T2, T3}
219
272
γ = β[1 ]
@@ -315,7 +368,7 @@ function pFqweniger(α::Tuple{T1, T1, T1}, β::Tuple{T2, T2}, z::T3; kmax::Int =
315
368
b2 = T (40 )
316
369
t0 = b0* ζ+ 5 * ((T (β- 1 )* γ- T (β+ 11 ))* α- T (β+ 11 )* γ- 11 * T (β)- 49 )/ 3
317
370
t1 = b1* ζ+ (T (3 + β)* γ+ T (3 * β- 11 ))* α+ T (3 * β- 11 )* γ- 11 * T (β)- 93
318
- t2 = b2* ζ- a2 # ✓
371
+ t2 = b2* ζ- a2
319
372
Nhi = t0* Nmid1 + t1* Nmid2 + t2* Nlo + b2* ζ
320
373
Dhi = t0* Dmid1 + t1* Dmid2 + t2* Dlo
321
374
Thi = Nhi/ Dhi
@@ -349,7 +402,6 @@ function pFqweniger(α::Tuple{T1, T1, T1}, β::Tuple{T2, T2}, z::T3; kmax::Int =
349
402
end
350
403
351
404
# ₘFₙ(α;β;z)
352
- # γ ∉ ℕ
353
405
function pFqweniger (α:: AbstractVector{T1} , β:: AbstractVector{T2} , z:: T3 , args... ; kwds... ) where {T1, T2, T3}
354
406
pFqweniger (Tuple (α), Tuple (β), z, args... ; kwds... )
355
407
end
0 commit comments