@@ -188,39 +188,35 @@ Bessel function of the first kind of order nu, ``J_{nu}(x)``.
188
188
Nu must be real.
189
189
"""
190
190
191
-
192
191
function bessely (nu:: Real , x:: T ) where T
192
+ isinteger (nu) && return bessely (Int (nu), x)
193
193
abs_nu = abs (nu)
194
194
abs_x = abs (x)
195
195
196
196
Ynu = bessely_positive_args (abs_nu, abs_x)
197
+ Jnu = besselj_positive_args (abs_nu, abs_x)
198
+ spi, cpi = sincospi (abs_nu)
199
+ if nu >= zero (T)
200
+ return x >= zero (T) ? Ynu : cispi (- nu)* Ynu + 2im * cpi* Jnu
201
+ else
202
+ return x >= zero (T) ? cpi* Ynu + spi* Jnu : cpi * (cispi (nu)* Ynu + 2im * cpi * Jnu) + spi * cispi (abs_nu) * Jnu
203
+ end
204
+ end
205
+ function bessely (nu:: Int , x:: T ) where T
206
+ abs_nu = abs (nu)
207
+ abs_x = abs (x)
208
+ sg = (iseven (Int (abs_nu)) ? 1 : - 1 )
197
209
198
- if nu > zero (T)
199
- if x > zero (T)
200
- return Ynu
201
- else
202
- Jnu = besselj_positive_args (abs_nu, abs_x)
203
- return cispi (- nu)* Ynu + 2im * cospi (nu)* Jnu
204
- end
210
+ Ynu = bessely_positive_args (abs_nu, abs_x)
211
+ if nu >= zero (T)
212
+ return x >= zero (T) ? Ynu : Ynu * sg + 2im * sg * besselj_positive_args (abs_nu, abs_x)
205
213
elseif nu < zero (T)
206
- if x > zero (T)
207
- isinteger (nu) && return Ynu * (iseven (Int (abs_nu)) ? 1 : - 1 )
208
- Jnu = besselj_positive_args (abs_nu, abs_x)
209
- spi, cpi = sincospi (abs_nu)
210
- return cpi* Ynu + spi* Jnu
211
- else
212
- Jnu = besselj_positive_args (abs_nu, abs_x)
213
- isinteger (nu) && return Ynu + 2im * Jnu
214
- spi, cpi = sincospi (abs_nu)
215
- out = cpi * (cispi (nu)* Ynu + 2im * cpi * Jnu)
216
- return out + spi * cispi (abs_nu) * Jnu
217
- end
218
- else
219
- return - T (Inf )
214
+ return x > zero (T) ? Ynu * sg : Ynu + 2im * besselj_positive_args (abs_nu, abs_x)
220
215
end
221
216
end
222
217
223
218
function bessely_positive_args (nu, x:: T ) where T
219
+ iszero (x) && return - T (Inf )
224
220
225
221
# use forward recurrence if nu is an integer up until it becomes inefficient
226
222
(isinteger (nu) && nu < 250 ) && return besselj_up_recurrence (x, bessely1 (x), bessely0 (x), 1 , nu)[1 ]
0 commit comments