Skip to content

Commit b80860c

Browse files
committed
remove complex output for real inputs
1 parent 497b118 commit b80860c

File tree

8 files changed

+50
-26
lines changed

8 files changed

+50
-26
lines changed

src/besseli.jl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,15 +173,17 @@ function besseli(nu::Real, x::T) where T
173173
if x >= 0
174174
return besseli_positive_args(abs_nu, abs_x)
175175
else
176-
return cispi(abs_nu) * besseli_positive_args(abs_nu, abs_x)
176+
return throw(DomainError(x, "Complex result returned for real arguments. Complex arguments are currently not supported"))
177+
#return cispi(abs_nu) * besseli_positive_args(abs_nu, abs_x)
177178
end
178179
else
179180
if x >= 0
180181
return besseli_positive_args(abs_nu, abs_x) + 2 / π * sinpi(abs_nu) * besselk_positive_args(abs_nu, abs_x)
181182
else
182-
Iv = besseli_positive_args(abs_nu, abs_x)
183-
Kv = besselk_positive_args(abs_nu, abs_x)
184-
return cispi(abs_nu) * Iv + 2 / π * sinpi(abs_nu) * (cispi(-abs_nu) * Kv - im * π * Iv)
183+
#Iv = besseli_positive_args(abs_nu, abs_x)
184+
#Kv = besselk_positive_args(abs_nu, abs_x)
185+
#return cispi(abs_nu) * Iv + 2 / π * sinpi(abs_nu) * (cispi(-abs_nu) * Kv - im * π * Iv)
186+
return throw(DomainError(x, "Complex result returned for real arguments. Complex arguments are currently not supported"))
185187
end
186188
end
187189
end

src/besselj.jl

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,12 +199,22 @@ function besselj(nu::Real, x::T) where T
199199

200200
Jnu = besselj_positive_args(abs_nu, abs_x)
201201
if nu >= zero(T)
202-
return x >= zero(T) ? Jnu : Jnu * cispi(abs_nu)
202+
if x >= zero(T)
203+
return Jnu
204+
else
205+
return throw(DomainError(x, "Complex result returned for real arguments. Complex arguments are currently not supported"))
206+
#return Jnu * cispi(abs_nu)
207+
end
203208
else
204209
Ynu = bessely_positive_args(abs_nu, abs_x)
205210
spi, cpi = sincospi(abs_nu)
206211
out = Jnu * cpi - Ynu * spi
207-
return x >= zero(T) ? out : out * cispi(nu)
212+
if x >= zero(T)
213+
return out
214+
else
215+
return throw(DomainError(x, "Complex result returned for real arguments. Complex arguments are currently not supported"))
216+
#return out * cispi(nu)
217+
end
208218
end
209219
end
210220

src/besselk.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,8 @@ function besselk(nu::Real, x::T) where T
193193
if x >= 0
194194
return besselk_positive_args(abs_nu, abs_x)
195195
else
196-
return cispi(-abs_nu)*besselk_positive_args(abs_nu, abs_x) - besseli_positive_args(abs_nu, abs_x) * im * π
196+
return throw(DomainError(x, "Complex result returned for real arguments. Complex arguments are currently not supported"))
197+
#return cispi(-abs_nu)*besselk_positive_args(abs_nu, abs_x) - besseli_positive_args(abs_nu, abs_x) * im * π
197198
end
198199
end
199200
function besselk(nu::Integer, x::T) where T
@@ -204,7 +205,8 @@ function besselk(nu::Integer, x::T) where T
204205
if x >= 0
205206
return besselk_positive_args(abs_nu, abs_x)
206207
else
207-
return sg * besselk_positive_args(abs_nu, abs_x) - im * π * besseli_positive_args(abs_nu, abs_x)
208+
return throw(DomainError(x, "Complex result returned for real arguments. Complex arguments are currently not supported"))
209+
#return sg * besselk_positive_args(abs_nu, abs_x) - im * π * besseli_positive_args(abs_nu, abs_x)
208210
end
209211
end
210212

src/bessely.jl

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ end
234234
Bessel function of the first kind of order nu, ``Y_{nu}(x)``.
235235
nu and x must be real where nu and x can be positive or negative.
236236
"""
237+
237238
function bessely(nu::Real, x::T) where T
238239
isinteger(nu) && return bessely(Int(nu), x)
239240
abs_nu = abs(nu)
@@ -244,29 +245,38 @@ function bessely(nu::Real, x::T) where T
244245
if x >= zero(T)
245246
return Ynu
246247
else
247-
return Ynu * cispi(-nu) + 2im * besselj_positive_args(abs_nu, abs_x) * cospi(abs_nu)
248+
return throw(DomainError(x, "Complex result returned for real arguments. Complex arguments are currently not supported"))
249+
#return Ynu * cispi(-nu) + 2im * besselj_positive_args(abs_nu, abs_x) * cospi(abs_nu)
248250
end
249251
else
250252
Jnu = besselj_positive_args(abs_nu, abs_x)
251253
spi, cpi = sincospi(abs_nu)
252254
if x >= zero(T)
253255
return Ynu * cpi + Jnu * spi
254256
else
255-
return cpi * (Ynu * cispi(nu) + 2im * Jnu * cpi) + Jnu * spi * cispi(abs_nu)
257+
return throw(DomainError(x, "Complex result returned for real arguments. Complex arguments are currently not supported"))
258+
#return cpi * (Ynu * cispi(nu) + 2im * Jnu * cpi) + Jnu * spi * cispi(abs_nu)
256259
end
257260
end
258261
end
259-
260262
function bessely(nu::Integer, x::T) where T
261263
abs_nu = abs(nu)
262264
abs_x = abs(x)
263265
sg = iseven(abs_nu) ? 1 : -1
264266

265267
Ynu = bessely_positive_args(abs_nu, abs_x)
266268
if nu >= zero(T)
267-
return x >= zero(T) ? Ynu : Ynu * sg + 2im * sg * besselj_positive_args(abs_nu, abs_x)
268-
elseif nu < zero(T)
269-
return x >= zero(T) ? Ynu * sg : Ynu + 2im * besselj_positive_args(abs_nu, abs_x)
269+
if x >= zero(T)
270+
return Ynu
271+
else
272+
return throw(DomainError(x, "Complex result returned for real arguments. Complex arguments are currently not supported"))
273+
#return Ynu * sg + 2im * sg * besselj_positive_args(abs_nu, abs_x)
274+
else
275+
if x >= zero(T)
276+
return Ynu * sg
277+
else
278+
return throw(DomainError(x, "Complex result returned for real arguments. Complex arguments are currently not supported"))
279+
#return Ynu + 2im * besselj_positive_args(abs_nu, abs_x)
270280
end
271281
end
272282

test/besseli_test.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ end
111111
@test besseli(v,x) -1.995631678207200756444e-14
112112

113113
(v,x) = 12.6, -3.0
114-
@test besseli(v,x) -2.725684975265100582482e-8 + 8.388795775899337839603e-8 * im
114+
#@test besseli(v,x) ≈ -2.725684975265100582482e-8 + 8.388795775899337839603e-8 * im
115115

116116
(v, x) = -8.0, 4.2
117117
@test besseli(v,x) 0.0151395115677545706602449919627
@@ -126,4 +126,4 @@ end
126126
@test besseli(v,x) 0.2892290867115615816280234648
127127

128128
(v, x) = -14.6, -10.6
129-
@test besseli(v,x) -0.157582642056898598750175404443 - 0.484989503203097528858271270828*im
129+
#@test besseli(v,x) ≈ -0.157582642056898598750175404443 - 0.484989503203097528858271270828*im

test/besselj_test.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ end
118118
# values taken from https://keisan.casio.com/exec/system/1180573474 which match mathematica
119119
# need to also account for different branches when nu isa integer
120120
nu = -9.102; x = -12.48
121-
@test isapprox(besselj(nu, x), 0.09842356047575545808128 -0.03266486217437818486161im, rtol=8e-14)
121+
#@test isapprox(besselj(nu, x), 0.09842356047575545808128 -0.03266486217437818486161im, rtol=8e-14)
122122
nu = -5.0; x = -5.1
123123
@test isapprox(besselj(nu, x), 0.2740038554704588327387, rtol=8e-14)
124124
nu = -7.3; x = 19.1
@@ -128,4 +128,4 @@ nu = -14.0; x = 21.3
128128
nu = 13.0; x = -8.5
129129
@test isapprox(besselj(nu, x), -0.006128034621313167000171, rtol=8e-14)
130130
nu = 17.45; x = -16.23
131-
@test isapprox(besselj(nu, x), -0.01607335977752705869797 -0.1014831996412783806255im, rtol=8e-14)
131+
#@test isapprox(besselj(nu, x), -0.01607335977752705869797 -0.1014831996412783806255im, rtol=8e-14)

test/besselk_test.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,10 @@ end
126126
@test besselk(v,x) 56331.504348755621996013084096
127127

128128
(v,x) = 13.0, -1.0
129-
@test besselk(v,x) -1921576392792.994084565 - 6.26946181952681217841e-14*im
129+
#@test besselk(v,x) ≈ -1921576392792.994084565 - 6.26946181952681217841e-14*im
130130

131131
(v,x) = 12.6, -3.0
132-
@test besselk(v,x) -135222.7926354826692727 - 416172.9627453652120223*im
132+
#@test besselk(v,x) ≈ -135222.7926354826692727 - 416172.9627453652120223*im
133133

134134
(v, x) = -8.0, 4.2
135135
@test besselk(v,x) 3.65165949039881135495282699061
@@ -141,7 +141,7 @@ end
141141
@test besselk(v,x) 0.299085139926840649406079315812
142142

143143
(v, x) = -14.0, -9.9
144-
@test besselk(v,x) 0.100786833375605803570325345603 - 0.90863997401752715470886289641*im
144+
#@test besselk(v,x) ≈ 0.100786833375605803570325345603 - 0.90863997401752715470886289641*im
145145

146146
(v, x) = -14.6, -10.6
147-
@test besselk(v,x) -0.0180385087581148387140033906859 - 1.54653251445680014758965158559*im
147+
#@test besselk(v,x) ≈ -0.0180385087581148387140033906859 - 1.54653251445680014758965158559*im

test/bessely_test.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,14 @@ end
9292
# values taken from https://keisan.casio.com/exec/system/1180573474 which match mathematica
9393
# need to also account for different branches when nu isa integer
9494
nu = -2.3; x = -2.4
95-
@test isapprox(bessely(nu, x), -0.0179769671833457636186 + 0.7394120337538928700168im, rtol=5e-14)
95+
#@test isapprox(bessely(nu, x), -0.0179769671833457636186 + 0.7394120337538928700168im, rtol=5e-14)
9696
nu = -4.0; x = -12.6
97-
@test isapprox(bessely(nu, x), -0.02845106816742465563357 + 0.4577922229605476882792im, rtol=5e-14)
97+
#@test isapprox(bessely(nu, x), -0.02845106816742465563357 + 0.4577922229605476882792im, rtol=5e-14)
9898
nu = -6.2; x = 18.6
9999
@test isapprox(bessely(nu, x), -0.05880321550673669650027, rtol=5e-14)
100100
nu = -8.0; x = 23.2
101101
@test isapprox(bessely(nu, x),-0.166071277370329242677, rtol=5e-14)
102102
nu = 11.0; x = -8.2
103-
@test isapprox(bessely(nu, x),1.438494049708244558901 -0.06222860017222637350092im, rtol=5e-14)
103+
#@test isapprox(bessely(nu, x),1.438494049708244558901 -0.06222860017222637350092im, rtol=5e-14)
104104
nu = 13.678; x = -12.98
105-
@test isapprox(bessely(nu, x),-0.2227392320508850571009 -0.2085585256158188848322im, rtol=5e-14)
105+
#@test isapprox(bessely(nu, x),-0.2227392320508850571009 -0.2085585256158188848322im, rtol=5e-14)

0 commit comments

Comments
 (0)