Skip to content

Commit e0f094b

Browse files
committed
add continued fractions
1 parent 2c7ced1 commit e0f094b

File tree

3 files changed

+25
-3
lines changed

3 files changed

+25
-3
lines changed

src/besseli.jl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,3 +193,25 @@ function besseli_large_orders_scaled(v, x::T) where T <: Union{Float32, Float64,
193193

194194
return T(coef*Uk_poly_In(p, v, p2, T))
195195
end
196+
197+
function _besseli_continued_fractions(nu, x)
198+
knu, knum1 = up_recurrence(x, besselk0(x), besselk1(x), nu)
199+
return 1 / (x * (knum1 + knu / steed(nu, x)))
200+
end
201+
202+
function steed(n, x::T) where T
203+
xinv = inv(x)
204+
xinv2 = 2 * xinv
205+
d = x / (n + n)
206+
a = d
207+
h = a
208+
b = muladd(2, n, 2) * xinv
209+
for _ in 1:100000
210+
d = inv(b + d)
211+
a = muladd(b, d, -1) * a
212+
h = h + a
213+
b = b + xinv2
214+
abs(a / h) <= eps(T) && break
215+
end
216+
return h
217+
end

src/besselk.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ Modified Bessel function of the second kind of order nu, ``K_{nu}(x)``.
161161
function besselk(nu, x::T) where T <: Union{Float32, Float64, BigFloat}
162162
T == Float32 ? branch = 20 : branch = 50
163163
if nu < branch
164-
return up_recurrence(x, besselk0(x), besselk1(x), nu)
164+
return up_recurrence(x, besselk0(x), besselk1(x), nu)[1]
165165
else
166166
return besselk_large_orders(nu, x)
167167
end
@@ -175,7 +175,7 @@ Scaled modified Bessel function of the second kind of order nu, ``K_{nu}(x)*e^{x
175175
function besselkx(nu::Int, x::T) where T <: Union{Float32, Float64}
176176
T == Float32 ? branch = 20 : branch = 50
177177
if nu < branch
178-
return up_recurrence(x, besselk0x(x), besselk1x(x), nu)
178+
return up_recurrence(x, besselk0x(x), besselk1x(x), nu)[1]
179179
else
180180
return besselk_large_orders_scaled(nu, x)
181181
end

src/recurrence.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@ end
2828
k0 = k1
2929
k1 = k2
3030
end
31-
return k2
31+
return k2, k0
3232
end

0 commit comments

Comments
 (0)