@@ -129,7 +129,7 @@ function drummond2F0(α::T1, β::T2, z::T3; kmax::Int = 10_000) where {T1, T2, T
129
129
Nhi /= (α+ 2 )* (β+ 2 )
130
130
Dhi /= (α+ 2 )* (β+ 2 )
131
131
k = 2
132
- while k < kmax && errcheck (Tmid, Thi, 10 eps (real (T)))
132
+ while k < 3 || (k < kmax && errcheck (Tmid, Thi, 10 eps (real (T) )))
133
133
Nhi, Nmid, Nlo = ((k+ 2 )* ζ- (α+ k+ 1 )* (β+ k+ 1 )- k* (α+ β+ 2 k+ 1 ))* Nhi - k* (α+ β+ 3 k- ζ)* Nmid - k* (k- 1 )* Nlo, Nhi, Nmid
134
134
Dhi, Dmid, Dlo = ((k+ 2 )* ζ- (α+ k+ 1 )* (β+ k+ 1 )- k* (α+ β+ 2 k+ 1 ))* Dhi - k* (α+ β+ 3 k- ζ)* Dmid - k* (k- 1 )* Dlo, Dhi, Dmid
135
135
Thi, Tmid, Tlo = Nhi/ Dhi, Thi, Tmid
@@ -293,20 +293,16 @@ function pFqdrummond(α::AbstractVector{T1}, β::AbstractVector{T2}, z::T3; kmax
293
293
p = length (α)
294
294
q = length (β)
295
295
r = max (p+ 1 , q+ 2 )
296
- C = zeros (T, r )
297
- C[ 1 ] = one (T)
298
- Ĉ = zeros (T, r)
299
- Ĉ[ 1 ] = one (T)
296
+ err = one ( real (T) )
297
+ for j in 1 : p
298
+ err *= absα[j] + 1
299
+ end
300
300
P = zeros (T, p+ 1 )
301
301
t = one (T)
302
302
for j in 1 : p
303
303
t *= α[j]+ 1
304
304
end
305
305
P[1 ] = t
306
- err = one (real (T))
307
- for j in 1 : p
308
- err *= absα[j]+ 1
309
- end
310
306
Q = zeros (T, q+ 2 )
311
307
t = one (T)
312
308
for j in 1 : q
@@ -328,29 +324,25 @@ function pFqdrummond(α::AbstractVector{T1}, β::AbstractVector{T2}, z::T3; kmax
328
324
end
329
325
t1 = zero (T)
330
326
for j in 0 : min (k, q+ 1 )
331
- t1 += Ĉ[j + 1 ] * Q[j+ 1 ]* N[r- j]
327
+ t1 += Q[j+ 1 ]* N[r- j]
332
328
end
333
329
if k ≤ q+ 1
334
- if p > q
335
- t1 += Q[k+ 1 ]
336
- else
337
- t1 += Q[k+ 1 ] / T (factorial (k+ 1 ))
338
- end
330
+ t1 += Q[k+ 1 ]
339
331
end
340
332
t2 = zero (T)
341
- t2 += Ĉ[ 1 ] * P[1 ]* N[r]
333
+ t2 += P[1 ]* N[r]
342
334
for j in 1 : min (k, p)
343
- t2 += P[j+ 1 ]* (C[j + 1 ] * N[r- j+ 1 ] + Ĉ[j + 1 ] * N[r- j])
335
+ t2 += P[j+ 1 ]* (N[r- j+ 1 ] + N[r- j])
344
336
end
345
337
N[r+ 1 ] = ζ* t1- t2
346
338
t1 = zero (T)
347
339
for j in 0 : min (k, q+ 1 )
348
- t1 += Ĉ[j + 1 ] * Q[j+ 1 ]* D[r- j]
340
+ t1 += Q[j+ 1 ]* D[r- j]
349
341
end
350
342
t2 = zero (T)
351
- t2 += Ĉ[ 1 ] * P[1 ]* D[r]
343
+ t2 += P[1 ]* D[r]
352
344
for j in 1 : min (k, p)
353
- t2 += P[j+ 1 ]* (C[j + 1 ] * D[r- j+ 1 ] + Ĉ[j + 1 ] * D[r- j])
345
+ t2 += P[j+ 1 ]* (D[r- j+ 1 ] + D[r- j])
354
346
end
355
347
D[r+ 1 ] = ζ* t1- t2
356
348
R[r+ 1 ] = N[r+ 1 ]/ D[r+ 1 ]
@@ -360,29 +352,17 @@ function pFqdrummond(α::AbstractVector{T1}, β::AbstractVector{T2}, z::T3; kmax
360
352
N[r+ 1 ] /= P[1 ]
361
353
D[r+ 1 ] /= P[1 ]
362
354
k += 1
363
- if p > q
364
- for j in min (k, max (p, q+ 1 )): - 1 : 1
365
- C[j+ 1 ] += C[j]
366
- Ĉ[j+ 1 ] += Ĉ[j]
367
- end
368
- else
369
- for j in min (k, max (p, q+ 1 )): - 1 : 1
370
- C[j+ 1 ] = (C[j+ 1 ]* (k+ 1 - j) + C[j])/ (k+ 1 )
371
- Ĉ[j+ 1 ] = (Ĉ[j+ 1 ]* (k- j) + Ĉ[j])/ (k+ 1 )
372
- end
373
- Ĉ[1 ] = Ĉ[1 ]* k/ (k+ 1 )
355
+ err = one (real (T))
356
+ for j in 1 : p
357
+ err *= absα[j]+ k+ 1
374
358
end
375
359
t = one (T)
376
360
for j in 1 : p
377
361
t *= α[j]+ k+ 1
378
362
end
379
- err = one (real (T))
380
363
for j in 1 : p
381
- err *= absα[j]+ k+ 1
382
- end
383
- for j in 2 : p+ 1
384
- s = t - P[j- 1 ]
385
- P[j- 1 ] = t
364
+ s = ((k- j+ 1 )* t - k* P[j])/ j
365
+ P[j] = t
386
366
t = s
387
367
end
388
368
P[p+ 1 ] = t
@@ -391,9 +371,9 @@ function pFqdrummond(α::AbstractVector{T1}, β::AbstractVector{T2}, z::T3; kmax
391
371
t *= β[j]+ k+ 1
392
372
end
393
373
t *= k+ 2
394
- for j in 2 : q+ 2
395
- s = t - Q[j- 1 ]
396
- Q[j- 1 ] = t
374
+ for j in 1 : q+ 1
375
+ s = ((k - j + 1 ) * t - k * Q[j]) / j
376
+ Q[j] = t
397
377
t = s
398
378
end
399
379
Q[q+ 2 ] = t
0 commit comments