@@ -196,7 +196,7 @@ 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, γ:: T4 = 3 // 2 ) where {p, q, T1, T2, T3, T4}
199
+ function pFqweniger (α:: NTuple{p, T1} , β:: NTuple{q, T2} , z:: T3 ; kmax:: Int = KMAX, γ:: T4 = 2 ) where {p, q, T1, T2, T3, T4}
200
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α)))
@@ -227,8 +227,10 @@ function pFqweniger(α::NTuple{p, T1}, β::NTuple{q, T2}, z::T3; kmax::Int = KMA
227
227
t *= β[j]+ 1
228
228
end
229
229
Q[1 ] = t
230
+ P̂R = γ+ 2
231
+ QR = T (1 )
230
232
k = 0
231
- @inbounds while k ≤ r || (k < kmax && errcheck (R[r+ 2 ], R[r+ 3 ], 8 eps (real (T))))
233
+ @inbounds while k ≤ r+ 2 || (k < kmax && errcheck (R[r+ 2 ], R[r+ 3 ], 8 eps (real (T))))
232
234
for j in 1 : r+ 2
233
235
N[j] = N[j+ 1 ]
234
236
D[j] = D[j+ 1 ]
@@ -280,36 +282,39 @@ function pFqweniger(α::NTuple{p, T1}, β::NTuple{q, T2}, z::T3; kmax::Int = KMA
280
282
for j in 1 : p
281
283
t2 *= α[j]+ k+ 1
282
284
end
283
- t2 /= pochhammer (γ+ k+ 1 , k)
285
+ t2 /= P̂R
286
+ P̂R *= ((γ+ 2 k+ 1 )* (γ+ 2 k+ 2 ))/ (γ+ k+ 1 )
284
287
t1 = k* ((γ+ 2 k)* t2 - P̂[1 ])
285
- for j in 2 : r + 1
288
+ for j in 2 : k
286
289
s = ((k- j+ 1 )* ((γ+ 2 k- j+ 1 )* t1+ k* P̂[j- 1 ]) - k* P̂[j])/ j
287
290
P̂[j- 1 ] = t2
288
291
t2 = t1
289
292
t1 = s
290
293
end
291
- P̂[r + 1 ] = t2
292
- P̂[r + 2 ] = t1
294
+ P̂[k ] = t2
295
+ P̂[k + 1 ] = t1
293
296
t2 = T (k+ 2 )
294
297
for j in 1 : q
295
298
t2 *= β[j]+ k+ 1
296
299
end
297
- t2 /= pochhammer (γ+ k, k)
300
+ QR *= ((γ+ 2 k- 2 )* (γ+ 2 k- 1 ))/ (γ+ k- 1 )
301
+ t2 /= QR
298
302
t1 = k* ((γ+ 2 k- 1 )* t2 - Q[1 ])
299
- for j in 2 : r
303
+ for j in 2 : min (k, r)
300
304
s = ((k- j+ 1 )* ((γ+ 2 k- j)* t1+ k* Q[j- 1 ]) - k* Q[j])/ j
301
305
Q[j- 1 ] = t2
302
306
t2 = t1
303
307
t1 = s
304
308
end
305
- Q[r ] = t2
306
- Q[r + 1 ] = t1
309
+ Q[min (k, r) ] = t2
310
+ Q[min (k, r) + 1 ] = t1
307
311
else
308
312
t2 = γ+ k
309
313
for j in 1 : p
310
314
t2 *= α[j]+ k+ 1
311
315
end
312
- t2 /= pochhammer (γ+ 2 k- r- 1 , r+ 2 )
316
+ t2 /= P̂R
317
+ P̂R *= ((γ+ 2 k+ 1 )* (γ+ 2 k+ 2 ))/ ((γ+ 2 k- r- 1 )* (γ+ 2 k- r))
313
318
t1 = k* ((γ+ 2 k)* t2 - (γ+ 2 k- 1 - r- 2 )* P̂[1 ])
314
319
for j in 2 : r+ 1
315
320
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
@@ -323,7 +328,8 @@ function pFqweniger(α::NTuple{p, T1}, β::NTuple{q, T2}, z::T3; kmax::Int = KMA
323
328
for j in 1 : q
324
329
t2 *= β[j]+ k+ 1
325
330
end
326
- t2 /= pochhammer (γ+ 2 k- r- 1 , r+ 1 )
331
+ QR *= ((γ+ 2 k- 2 )* (γ+ 2 k- 1 ))/ ((γ+ 2 k- r- 3 )* (γ+ 2 k- r- 2 ))
332
+ t2 /= QR
327
333
t1 = k* ((γ+ 2 k- 1 )* t2 - (γ+ 2 k- 1 - r- 2 )* Q[1 ])
328
334
for j in 2 : r
329
335
s = ((k- j+ 1 )* ((γ+ 2 k- j)* t1- (r- j+ 2 )* k* Q[j- 1 ]) - (γ+ 2 k- j- r- 2 )* k* Q[j])/ j
0 commit comments