1
1
function sphericalbesselj (nu:: Real , x:: T ) where T
2
- isinteger (nu) && return sphericalbesselj (Int (nu), x)
2
+ isnan (nu) || isnan (x) && return NaN
3
+ x < zero (T) && return throw (DomainError (x, " Complex result returned for real arguments. Complex arguments are currently not supported" ))
3
4
abs_nu = abs (nu)
4
- abs_x = abs (x)
5
5
6
- Jnu = sphericalbesselj_positive_args (abs_nu, abs_x)
7
- if nu >= zero (T)
8
- if x >= zero (T)
9
- return Jnu
10
- else
11
- return throw (DomainError (x, " Complex result returned for real arguments. Complex arguments are currently not supported" ))
12
- # return Jnu * cispi(abs_nu)
13
- end
14
- else
15
- Ynu = sphericalbessely_positive_args (abs_nu, abs_x)
16
- spi, cpi = sincospi (abs_nu)
17
- out = Jnu * cpi - Ynu * spi
18
- if x >= zero (T)
19
- return out
20
- else
21
- return throw (DomainError (x, " Complex result returned for real arguments. Complex arguments are currently not supported" ))
22
- # return out * cispi(nu)
23
- end
24
- end
25
- end
26
-
27
- function sphericalbesselj (nu:: Integer , x:: T ) where T
28
- abs_nu = abs (nu)
29
- abs_x = abs (x)
30
- sg = iseven (abs_nu) ? 1 : - 1
31
-
32
- Jnu = sphericalbesselj_positive_args (abs_nu, abs_x)
33
- if nu >= zero (T)
34
- return x >= zero (T) ? Jnu : Jnu * sg
6
+ if nu < zero (T)
7
+ return SQPIO2 (T) * besselj (nu + 1 / 2 , x) / sqrt (x)
35
8
else
36
- if x >= zero (T)
37
- return Jnu * sg
38
- else
39
- Ynu = sphericalbessely_positive_args (abs_nu, abs_x)
40
- spi, cpi = sincospi (abs_nu)
41
- return (cpi* Jnu - spi* Ynu) * sg
42
- end
9
+ return sphericalbesselj_positive_args (nu, x)
43
10
end
44
11
end
45
12
@@ -52,7 +19,7 @@ function sphericalbesselj_positive_args(nu::Real, x::T) where T
52
19
return x^ nu * a * coef
53
20
elseif isinteger (nu)
54
21
if (x >= nu && nu < 250 ) || (x < nu && nu < 60 )
55
- return sphericalbesselj_recurrence (nu , x)
22
+ return sphericalbesselj_recurrence (Int (nu) , x)
56
23
else
57
24
return SQPIO2 (T) * besselj (nu + 1 / 2 , x) / sqrt (x)
58
25
end
@@ -89,52 +56,15 @@ function sphericalbesselj_recurrence(nu::Integer, x::T) where T
89
56
end
90
57
end
91
58
92
-
93
-
94
59
function sphericalbessely (nu:: Real , x:: T ) where T
95
- isinteger (nu) && return sphericalbessely (Int (nu), x)
60
+ isnan (nu) || isnan (x) && return NaN
61
+ x < zero (T) && return throw (DomainError (x, " Complex result returned for real arguments. Complex arguments are currently not supported" ))
96
62
abs_nu = abs (nu)
97
- abs_x = abs (x)
98
63
99
- Ynu = sphericalbessely_positive_args (abs_nu, abs_x)
100
- if nu >= zero (T)
101
- if x >= zero (T)
102
- return Ynu
103
- else
104
- return throw (DomainError (x, " Complex result returned for real arguments. Complex arguments are currently not supported" ))
105
- # return Ynu * cispi(-nu) + 2im * besselj_positive_args(abs_nu, abs_x) * cospi(abs_nu)
106
- end
107
- else
108
- Jnu = sphericalbesselj_positive_args (abs_nu, abs_x)
109
- spi, cpi = sincospi (abs_nu)
110
- if x >= zero (T)
111
- return Ynu * cpi + Jnu * spi
112
- else
113
- return throw (DomainError (x, " Complex result returned for real arguments. Complex arguments are currently not supported" ))
114
- # return cpi * (Ynu * cispi(nu) + 2im * Jnu * cpi) + Jnu * spi * cispi(abs_nu)
115
- end
116
- end
117
- end
118
- function sphericalbessely (nu:: Integer , x:: T ) where T
119
- abs_nu = abs (nu)
120
- abs_x = abs (x)
121
- sg = iseven (abs_nu) ? 1 : - 1
122
-
123
- Ynu = sphericalbessely_positive_args (abs_nu, abs_x)
124
- if nu >= zero (T)
125
- if x >= zero (T)
126
- return Ynu
127
- else
128
- return throw (DomainError (x, " Complex result returned for real arguments. Complex arguments are currently not supported" ))
129
- # return Ynu * sg + 2im * sg * besselj_positive_args(abs_nu, abs_x)
130
- end
64
+ if nu < zero (T)
65
+ return SQPIO2 (T) * bessely (nu + 1 / 2 , x) / sqrt (x)
131
66
else
132
- if x >= zero (T)
133
- return Ynu * sg
134
- else
135
- return throw (DomainError (x, " Complex result returned for real arguments. Complex arguments are currently not supported" ))
136
- # return Ynu + 2im * besselj_positive_args(abs_nu, abs_x)
137
- end
67
+ return sphericalbessely_positive_args (nu, x)
138
68
end
139
69
end
140
70
0 commit comments