@@ -314,6 +314,18 @@ function besselh(nu::Float64, k::Integer, z::Complex{Float64})
314
314
return _besselh (nu,Int32 (k),z,Int32 (1 ))
315
315
end
316
316
317
+ function besselh (nu:: Float64 , k:: Integer , x:: Float64 )
318
+ # Given that x is real, Jnu(x) and Ynu(x) are also real.
319
+ if k == 1
320
+ return complex (besselj (nu, x), bessely (nu, x))
321
+ elseif k == 2
322
+ return complex (besselj (nu, x), - bessely (nu, x))
323
+ else
324
+ # We emulate ZBESH's behaviour
325
+ throw (AmosException (1 ))
326
+ end
327
+ end
328
+
317
329
"""
318
330
besselhx(nu, [k=1,] z)
319
331
583
595
for bfn in (:besselh , :besselhx )
584
596
@eval begin
585
597
$ bfn (nu, z) = $ bfn (nu, 1 , z)
586
- $ bfn (nu:: Real , k:: Integer , x:: Real ) = $ bfn (nu, k, float (x))
587
- $ bfn (nu:: Real , k:: Integer , x:: AbstractFloat ) = $ bfn (float (nu), k, complex (x))
588
-
598
+ $ bfn (nu:: Real , k:: Integer , x:: Real ) = $ bfn (float (nu), k, float (x))
599
+ $ bfn (nu:: AbstractFloat , k:: Integer , x:: AbstractFloat ) = $ bfn (float (nu), k, complex (x))
589
600
function $bfn (nu:: Real , k:: Integer , z:: Complex )
590
601
Tf = promote_type (float (typeof (nu)),float (typeof (real (z))))
591
602
$ bfn (Tf (nu), k, Complex {Tf} (z))
@@ -596,6 +607,9 @@ for bfn in (:besselh, :besselhx)
596
607
end
597
608
end
598
609
610
+ besselh (nu:: Float16 , k:: Integer , x:: Float16 ) = Complex {Float16} (besselh (Float32 (nu), k, Float32 (x)))
611
+ besselh (nu:: Float32 , k:: Integer , x:: Float32 ) = Complex {Float32} (besselh (Float64 (nu), k, Float64 (x)))
612
+
599
613
"""
600
614
besselj0(x)
601
615
0 commit comments