1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
//! Special Mathematical Functions Module
//!
//! This module provides comprehensive special mathematical functions commonly used in
//! scientific computing, engineering, statistics, and physics. Built on top of `scirs2-special`,
//! it includes:
//!
//! - **Gamma Functions**: Gamma, log-gamma, beta, incomplete gamma
//! - **Error Functions**: erf, erfc, erfcx, erfi, inverse erf
//! - **Bessel Functions**: J (first kind), Y (second kind), I (modified first kind), K (modified second kind), spherical
//! - **Elliptic Integrals**: Complete and incomplete elliptic integrals of first and second kind
//! - **Orthogonal Polynomials**: Legendre, Chebyshev (T, U), Hermite, Laguerre, Jacobi
//! - **Airy Functions**: Ai, Bi and their derivatives
//! - **Hypergeometric Functions**: 1F1, 2F1
//! - **Spherical Harmonics**: Real and complex spherical harmonics
//! - **Zeta Functions**: Riemann and Hurwitz zeta functions
//! - **Mathieu Functions**: Solutions to Mathieu's differential equation
//!
//! # Examples
//!
//! ## Gamma and Beta Functions
//!
//! ```
//! use numrs2::special;
//!
//! // Gamma function: Γ(x) = ∫₀^∞ t^(x-1) e^(-t) dt
//! let gamma_4_5: f64 = special::gamma(4.5);
//! println!("Γ(4.5) = {}", gamma_4_5);
//!
//! // Log-gamma for numerical stability with large arguments
//! let log_gamma_100: f64 = special::loggamma(100.0);
//! println!("log Γ(100) = {}", log_gamma_100);
//!
//! // Beta function: B(a,b) = Γ(a)Γ(b)/Γ(a+b)
//! let beta_2_3: f64 = special::beta(2.0, 3.0);
//! println!("B(2,3) = {}", beta_2_3);
//! ```
//!
//! ## Error Functions
//!
//! ```
//! use numrs2::special;
//!
//! // Error function: erf(x) = (2/√π) ∫₀^x e^(-t²) dt
//! let erf_1: f64 = special::erf(1.0);
//! println!("erf(1) = {}", erf_1);
//!
//! // Complementary error function: erfc(x) = 1 - erf(x)
//! let erfc_1: f64 = special::erfc(1.0);
//! println!("erfc(1) = {}", erfc_1);
//!
//! // Inverse error function
//! let inv_erf: f64 = special::erfinv(0.8);
//! println!("erf⁻¹(0.8) = {}", inv_erf);
//! ```
//!
//! ## Bessel Functions
//!
//! ```
//! use numrs2::special;
//!
//! // Bessel function of the first kind: J₀(x)
//! let j0_1: f64 = special::j0(1.0);
//! println!("J₀(1) = {}", j0_1);
//!
//! // Modified Bessel function of the first kind: I₀(x)
//! let i0_1: f64 = special::i0(1.0);
//! println!("I₀(1) = {}", i0_1);
//!
//! // Spherical Bessel function: j₀(x)
//! let sj0_1: f64 = special::spherical_jn(0, 1.0);
//! println!("j₀(1) = {}", sj0_1);
//! ```
//!
//! ## Elliptic Integrals
//!
//! ```
//! use numrs2::special;
//!
//! // Complete elliptic integral of the first kind: K(m)
//! let k1: f64 = special::ellipk(0.5);
//! println!("K(0.5) = {}", k1);
//!
//! // Complete elliptic integral of the second kind: E(m)
//! let e1: f64 = special::ellipe(0.5);
//! println!("E(0.5) = {}", e1);
//! ```
//!
//! ## Orthogonal Polynomials
//!
//! ```
//! use numrs2::special;
//!
//! // Legendre polynomial: P₃(0.5)
//! let p3: f64 = special::legendre(3, 0.5);
//! println!("P₃(0.5) = {}", p3);
//!
//! // Chebyshev polynomial of the first kind: T₃(0.5)
//! let t3: f64 = special::chebyshev(3, 0.5, true);
//! println!("T₃(0.5) = {}", t3);
//!
//! // Hermite polynomial (physicist's version): H₃(0.5)
//! let h3: f64 = special::hermite(3, 0.5);
//! println!("H₃(0.5) = {}", h3);
//! ```
//!
//! ## Airy Functions
//!
//! ```
//! use numrs2::special;
//!
//! // Airy function of the first kind: Ai(x)
//! let airy_ai: f64 = special::ai(1.0);
//! println!("Ai(1) = {}", airy_ai);
//!
//! // Airy function of the second kind: Bi(x)
//! let airy_bi: f64 = special::bi(1.0);
//! println!("Bi(1) = {}", airy_bi);
//! ```
//!
//! # Mathematical Background
//!
//! Special functions arise naturally in solutions to differential equations and are fundamental
//! in many areas of mathematics, physics, and engineering:
//!
//! - **Gamma/Beta**: Extend factorials to real/complex numbers, used in probability distributions
//! - **Error functions**: Probability integrals, appear in statistics and diffusion equations
//! - **Bessel functions**: Solutions to Bessel's differential equation, used in wave propagation
//! - **Elliptic integrals**: Arc length of ellipse, pendulum motion, classical mechanics
//! - **Orthogonal polynomials**: Quantum mechanics, approximation theory, numerical analysis
//! - **Airy functions**: Wave propagation, quantum mechanics, optics
//!
//! # Performance Notes
//!
//! - Functions use numerically stable algorithms (e.g., log-gamma for large arguments)
//! - Implementations leverage special algorithms (continued fractions, series expansions)
//! - For high-precision needs, consider enabling the `high-precision` feature
//! - Parallel computation available for array operations with `parallel` feature
// Re-export all scirs2-special modules
pub use *;
// Additional NumRS2-specific convenience functions and aliases can be added here