@@ -196,13 +196,13 @@ function pFqweniger(α::NTuple{p, Any}, β::NTuple{q, Any}, z; kwds...) where {p
196
196
T2 = isempty (β) ? Any : mapreduce (typeof, promote_type, β)
197
197
pFqweniger (T1 .(α), T2 .(β), z; kwds... )
198
198
end
199
- function pFqweniger (α:: NTuple{p, T1} , β:: NTuple{q, T2} , z:: T3 ; kmax:: Int = KMAX) where {p, q, T1, T2, T3}
200
- T = promote_type (eltype (α), eltype (β), T3)
199
+ function pFqweniger (α:: NTuple{p, T1} , β:: NTuple{q, T2} , z:: T3 ; kmax:: Int = KMAX, γ :: T4 = 3 // 2 ) where {p, q, T1, T2, T3, T4 }
200
+ T = promote_type (eltype (α), eltype (β), T3, T4 )
201
201
absα = abs .(T .(α))
202
202
if norm (z) < eps (real (T)) || norm (prod (α)) < eps (real (T)(prod (absα)))
203
203
return one (T)
204
204
end
205
- γ = T (3 ) / 2
205
+ γ = T (γ)
206
206
ζ = inv (z)
207
207
r = max (p+ 1 , q+ 1 )
208
208
N = zeros (T, r+ 3 )
@@ -211,22 +211,22 @@ function pFqweniger(α::NTuple{p, T1}, β::NTuple{q, T2}, z::T3; kmax::Int = KMA
211
211
N[r+ 3 ] = prod (β)* ζ/ prod (α)/ (γ- 1 )
212
212
D[r+ 3 ] = prod (β)* ζ/ prod (α)/ (γ- 1 )
213
213
R[r+ 3 ] = N[r+ 3 ]/ D[r+ 3 ]
214
- err = abs (γ )
214
+ err = real (T)( 1 )
215
215
@inbounds for j in 1 : p
216
216
err *= absα[j]+ 1
217
217
end
218
218
P̂ = zeros (T, r+ 2 )
219
- t = γ
219
+ t = T ( 1 )
220
220
@inbounds for j in 1 : p
221
221
t *= α[j]+ 1
222
222
end
223
- P̂[1 ] = t/ pochhammer (γ - r - 1 , r + 2 )
223
+ P̂[1 ] = t
224
224
Q = zeros (T, r+ 1 )
225
225
t = T (2 )
226
226
@inbounds for j in 1 : q
227
227
t *= β[j]+ 1
228
228
end
229
- Q[1 ] = t/ pochhammer (γ - r - 1 , r + 1 )
229
+ Q[1 ] = t
230
230
k = 0
231
231
@inbounds while k ≤ r || (k < kmax && errcheck (R[r+ 2 ], R[r+ 3 ], 8 eps (real (T))))
232
232
for j in 1 : r+ 2
@@ -245,7 +245,7 @@ function pFqweniger(α::NTuple{p, T1}, β::NTuple{q, T2}, z::T3; kmax::Int = KMA
245
245
t2 *= β[i]+ j+ 1
246
246
end
247
247
t2 *= j+ 2
248
- t1 += binomial (k, j)* (- one (T))^ (k- j)* pochhammer (j + γ, k - r - 1 ) * t2
248
+ t1 += binomial (k, j)* (- one (T))^ (k- j)* t2
249
249
end
250
250
end
251
251
t2 = zero (T)
@@ -271,38 +271,69 @@ function pFqweniger(α::NTuple{p, T1}, β::NTuple{q, T2}, z::T3; kmax::Int = KMA
271
271
N[r+ 3 ] /= P̂[1 ]
272
272
D[r+ 3 ] /= P̂[1 ]
273
273
k += 1
274
- err = abs (γ) + k
274
+ err = real (T)( 1 )
275
275
for j in 1 : p
276
276
err *= absα[j]+ k+ 1
277
277
end
278
- t2 = γ+ k
279
- for j in 1 : p
280
- t2 *= α[j]+ k+ 1
281
- end
282
- t2 /= pochhammer (γ+ 2 k- r- 1 , r+ 2 )
283
- t1 = k* ((γ+ 2 k)* t2 - (γ+ 2 k- 1 - r- 2 )* P̂[1 ])
284
- for j in 2 : r+ 1
285
- s = ((k- j+ 1 )* ((γ+ 2 k- j+ 1 )* t1- (r- j+ 3 )* k* P̂[j- 1 ]) - (γ+ 2 k- j- r- 2 )* k* P̂[j])/ j
286
- P̂[j- 1 ] = t2
287
- t2 = t1
288
- t1 = s
289
- end
290
- P̂[r+ 1 ] = t2
291
- P̂[r+ 2 ] = t1
292
- t2 = T (k+ 2 )
293
- for j in 1 : q
294
- t2 *= β[j]+ k+ 1
295
- end
296
- t2 /= pochhammer (γ+ 2 k- r- 1 , r+ 1 )
297
- t1 = k* ((γ+ 2 k- 1 )* t2 - (γ+ 2 k- 1 - r- 2 )* Q[1 ])
298
- for j in 2 : r
299
- s = ((k- j+ 1 )* ((γ+ 2 k- j)* t1- (r- j+ 2 )* k* Q[j- 1 ]) - (γ+ 2 k- j- r- 2 )* k* Q[j])/ j
300
- Q[j- 1 ] = t2
301
- t2 = t1
302
- t1 = s
278
+ if k ≤ r+ 1
279
+ t2 = T (1 )
280
+ for j in 1 : p
281
+ t2 *= α[j]+ k+ 1
282
+ end
283
+ t2 /= pochhammer (γ+ k+ 1 , k)
284
+ t1 = k* ((γ+ 2 k)* t2 - P̂[1 ])
285
+ for j in 2 : r+ 1
286
+ s = ((k- j+ 1 )* ((γ+ 2 k- j+ 1 )* t1+ k* P̂[j- 1 ]) - k* P̂[j])/ j
287
+ P̂[j- 1 ] = t2
288
+ t2 = t1
289
+ t1 = s
290
+ end
291
+ P̂[r+ 1 ] = t2
292
+ P̂[r+ 2 ] = t1
293
+ t2 = T (k+ 2 )
294
+ for j in 1 : q
295
+ t2 *= β[j]+ k+ 1
296
+ end
297
+ t2 /= pochhammer (γ+ k, k)
298
+ t1 = k* ((γ+ 2 k- 1 )* t2 - Q[1 ])
299
+ for j in 2 : r
300
+ s = ((k- j+ 1 )* ((γ+ 2 k- j)* t1+ k* Q[j- 1 ]) - k* Q[j])/ j
301
+ Q[j- 1 ] = t2
302
+ t2 = t1
303
+ t1 = s
304
+ end
305
+ Q[r] = t2
306
+ Q[r+ 1 ] = t1
307
+ else
308
+ t2 = γ+ k
309
+ for j in 1 : p
310
+ t2 *= α[j]+ k+ 1
311
+ end
312
+ t2 /= pochhammer (γ+ 2 k- r- 1 , r+ 2 )
313
+ t1 = k* ((γ+ 2 k)* t2 - (γ+ 2 k- 1 - r- 2 )* P̂[1 ])
314
+ for j in 2 : r+ 1
315
+ s = ((k- j+ 1 )* ((γ+ 2 k- j+ 1 )* t1- (r- j+ 3 )* k* P̂[j- 1 ]) - (γ+ 2 k- j- r- 2 )* k* P̂[j])/ j
316
+ P̂[j- 1 ] = t2
317
+ t2 = t1
318
+ t1 = s
319
+ end
320
+ P̂[r+ 1 ] = t2
321
+ P̂[r+ 2 ] = t1
322
+ t2 = T (k+ 2 )
323
+ for j in 1 : q
324
+ t2 *= β[j]+ k+ 1
325
+ end
326
+ t2 /= pochhammer (γ+ 2 k- r- 1 , r+ 1 )
327
+ t1 = k* ((γ+ 2 k- 1 )* t2 - (γ+ 2 k- 1 - r- 2 )* Q[1 ])
328
+ for j in 2 : r
329
+ s = ((k- j+ 1 )* ((γ+ 2 k- j)* t1- (r- j+ 2 )* k* Q[j- 1 ]) - (γ+ 2 k- j- r- 2 )* k* Q[j])/ j
330
+ Q[j- 1 ] = t2
331
+ t2 = t1
332
+ t1 = s
333
+ end
334
+ Q[r] = t2
335
+ Q[r+ 1 ] = t1
303
336
end
304
- Q[r] = t2
305
- Q[r+ 1 ] = t1
306
337
end
307
338
k < kmax || @warn " Rational approximation to " * pFq2string (Val {p} (), Val {q} ())* " reached the maximum type of ($kmax , $kmax )."
308
339
return isfinite (R[r+ 3 ]) ? R[r+ 3 ] : R[r+ 2 ]
0 commit comments