Skip to content

Commit 13cba3f

Browse files
committed
add hankel, i1, k1
1 parent 69f936b commit 13cba3f

File tree

3 files changed

+167
-0
lines changed

3 files changed

+167
-0
lines changed

src/hankel.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
function besselh(nu::Float64, k::Integer, x::AbstractFloat)
2+
if k == 1
3+
return complex(besselj(nu, x), bessely(nu, x))
4+
elseif k == 2
5+
return complex(besselj(nu, x), -bessely(nu, x))
6+
else
7+
throw(ArgumentError("k must be 1 or 2"))
8+
end
9+
end
10+
11+
hankelh1(nu, z) = besselh(nu, 1, z)
12+
hankelh2(nu, z) = besselh(nu, 2, z)

src/i1.jl

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
const A_i1 = (
2+
2.77791411276104639959E-18,
3+
-2.11142121435816608115E-17,
4+
1.55363195773620046921E-16,
5+
-1.10559694773538630805E-15,
6+
7.60068429473540693410E-15,
7+
-5.04218550472791168711E-14,
8+
3.22379336594557470981E-13,
9+
-1.98397439776494371520E-12,
10+
1.17361862988909016308E-11,
11+
-6.66348972350202774223E-11,
12+
3.62559028155211703701E-10,
13+
-1.88724975172282928790E-9,
14+
9.38153738649577178388E-9,
15+
-4.44505912879632808065E-8,
16+
2.00329475355213526229E-7,
17+
-8.56872026469545474066E-7,
18+
3.47025130813767847674E-6,
19+
-1.32731636560394358279E-5,
20+
4.78156510755005422638E-5,
21+
-1.61760815825896745588E-4,
22+
5.12285956168575772895E-4,
23+
-1.51357245063125314899E-3,
24+
4.15642294431288815669E-3,
25+
-1.05640848946261981558E-2,
26+
2.47264490306265168283E-2,
27+
-5.29459812080949914269E-2,
28+
1.02643658689847095384E-1,
29+
-1.76416518357834055153E-1,
30+
2.52587186443633654823E-1
31+
)
32+
33+
const B_i1 = (
34+
7.51729631084210481353E-18,
35+
4.41434832307170791151E-18,
36+
-4.65030536848935832153E-17,
37+
-3.20952592199342395980E-17,
38+
2.96262899764595013876E-16,
39+
3.30820231092092828324E-16,
40+
-1.88035477551078244854E-15,
41+
-3.81440307243700780478E-15,
42+
1.04202769841288027642E-14,
43+
4.27244001671195135429E-14,
44+
-2.10154184277266431302E-14,
45+
-4.08355111109219731823E-13,
46+
-7.19855177624590851209E-13,
47+
2.03562854414708950722E-12,
48+
1.41258074366137813316E-11,
49+
3.25260358301548823856E-11,
50+
-1.89749581235054123450E-11,
51+
-5.58974346219658380687E-10,
52+
-3.83538038596423702205E-9,
53+
-2.63146884688951950684E-8,
54+
-2.51223623787020892529E-7,
55+
-3.88256480887769039346E-6,
56+
-1.10588938762623716291E-4,
57+
-9.76109749136146840777E-3,
58+
7.78576235018280120474E-1
59+
)
60+
61+
function besseli1(x)
62+
z = abs(x)
63+
if z <= 8.0
64+
y = z / 2.0 - 2.0
65+
z = chbevl(y, A_i1) * z * exp(z)
66+
else
67+
z = exp(z) * chbevl(32.0 / z - 2.0, B_i1) / sqrt(z)
68+
end
69+
if x < zero(x)
70+
z = -z
71+
end
72+
return z
73+
end
74+
function besseli1(x)
75+
z = abs(x)
76+
if z <= 8.0
77+
y = z / 2.0 - 2.0
78+
z = chbevl(y, A_i1) * z
79+
else
80+
z = chbevl(32.0 / z - 2.0, B_i1) / sqrt(z)
81+
end
82+
if x < zero(x)
83+
z = -z
84+
end
85+
return z
86+
end

src/k1.jl

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
function besselk1(x)
2+
z = 0.5 * x
3+
if x <= zero(x)
4+
return throw(DomainError(x, "NaN result for non-NaN input."))
5+
end
6+
if x <= 2.0
7+
y = x * x - 2.0
8+
y = log(z) * besseli1(x) + chbevl(y, A_k1) / x
9+
return y
10+
else
11+
return exp(-x) * chbevl(8.0 / x - 2.0, B_k1) / sqrt(x)
12+
end
13+
end
14+
function besselk1e(x)
15+
z = 0.5 * x
16+
if x <= zero(x)
17+
return throw(DomainError(x, "NaN result for non-NaN input."))
18+
end
19+
if x <= 2.0
20+
y = x * x - 2.0
21+
y = log(z) * besseli1(x) + chbevl(y, A_k1) / x
22+
return y * exp(x)
23+
else
24+
return chbevl(8.0 / x - 2.0, B_k1) / sqrt(x)
25+
end
26+
end
27+
28+
29+
const A_k1 = (
30+
-7.02386347938628759343E-18,
31+
-2.42744985051936593393E-15,
32+
-6.66690169419932900609E-13,
33+
-1.41148839263352776110E-10,
34+
-2.21338763073472585583E-8,
35+
-2.43340614156596823496E-6,
36+
-1.73028895751305206302E-4,
37+
-6.97572385963986435018E-3,
38+
-1.22611180822657148235E-1,
39+
-3.53155960776544875667E-1,
40+
1.52530022733894777053E0
41+
)
42+
43+
const B_k1 = (
44+
-5.75674448366501715755E-18,
45+
1.79405087314755922667E-17,
46+
-5.68946255844285935196E-17,
47+
1.83809354436663880070E-16,
48+
-6.05704724837331885336E-16,
49+
2.03870316562433424052E-15,
50+
-7.01983709041831346144E-15,
51+
2.47715442448130437068E-14,
52+
-8.97670518232499435011E-14,
53+
3.34841966607842919884E-13,
54+
-1.28917396095102890680E-12,
55+
5.13963967348173025100E-12,
56+
-2.12996783842756842877E-11,
57+
9.21831518760500529508E-11,
58+
-4.19035475934189648750E-10,
59+
2.01504975519703286596E-9,
60+
-1.03457624656780970260E-8,
61+
5.74108412545004946722E-8,
62+
-3.50196060308781257119E-7,
63+
2.40648494783721712015E-6,
64+
-1.93619797416608296024E-5,
65+
1.95215518471351631108E-4,
66+
-2.85781685962277938680E-3,
67+
1.03923736576817238437E-1,
68+
2.72062619048444266945E0
69+
)

0 commit comments

Comments
 (0)