目录

GSL 系列 4 — 特殊函数 2 — 艾里 (Airy) 函数

对以下变量参见:变量定义

gsl_sf_result * result

gsl_mode_t mode

若无特别说明,本篇代码均来自头文件 gsl_sf_airy.h

yxy=0y^{\prime \prime}-x y=0

此方程有两个线性独立解:

Ai(x)=1π0cos(t33+xt)dt\operatorname{Ai}(x)=\frac{1}{\pi} \int_{0}^{\infty} \cos \left(\frac{t^{3}}{3}+x t\right) d t Bi(x)=1π0e(t33+xt)+sin(t33+xt)dt\mathrm{Bi}(x)=\frac{1}{\pi} \int_{0}^{\infty} e^{\left(-\frac{t^{3}}{3}+x t\right)}+\sin \left(\frac{t^{3}}{3}+x t\right) d t

xx 趋于正无穷,

Ai(x)e23x3/22πx1/4\operatorname{Ai}(x) \sim \frac{e^{-\frac{2}{3} x^{3 / 2}}}{2 \sqrt{\pi} x^{1 / 4}}

Bi(x)e23x3/2πx1/4\operatorname{Bi}(x) \sim \frac{e^{\frac{2}{3} x^{3 / 2}}}{\sqrt{\pi} x^{1 / 4}}

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int gsl_sf_airy_Ai_e(const double x, const gsl_mode_t mode, gsl_sf_result * result);
double gsl_sf_airy_Ai(const double x, gsl_mode_t mode);

int gsl_sf_airy_Bi_e(const double x, gsl_mode_t mode, gsl_sf_result * result);
double gsl_sf_airy_Bi(const double x, gsl_mode_t mode);

/* scaled Ai(x):
 *                     Ai(x)   x < 0
 *   exp(+2/3 x^{3/2}) Ai(x)   x > 0
 *
 * exceptions: none
 */
int gsl_sf_airy_Ai_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result);
double gsl_sf_airy_Ai_scaled(const double x, gsl_mode_t mode);


/* scaled Bi(x):
 *                     Bi(x)   x < 0
 *   exp(-2/3 x^{3/2}) Bi(x)   x > 0
 *
 * exceptions: none
 */
int gsl_sf_airy_Bi_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result);
double gsl_sf_airy_Bi_scaled(const double x, gsl_mode_t mode);
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int gsl_sf_airy_Ai_deriv_e(const double x, gsl_mode_t mode, gsl_sf_result * result);
double gsl_sf_airy_Ai_deriv(const double x, gsl_mode_t mode);

int gsl_sf_airy_Bi_deriv_e(const double x, gsl_mode_t mode, gsl_sf_result * result);
double gsl_sf_airy_Bi_deriv(const double x, gsl_mode_t mode);

/* scaled derivative Ai'(x):
 *                     Ai'(x)   x < 0
 *   exp(+2/3 x^{3/2}) Ai'(x)   x > 0
 *
 * exceptions: none
 */
int gsl_sf_airy_Ai_deriv_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result);
double gsl_sf_airy_Ai_deriv_scaled(const double x, gsl_mode_t mode);


/* scaled derivative:
 *                     Bi'(x)   x < 0
 *   exp(-2/3 x^{3/2}) Bi'(x)   x > 0
 *
 * exceptions: none
 */
int gsl_sf_airy_Bi_deriv_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result);
double gsl_sf_airy_Bi_deriv_scaled(const double x, gsl_mode_t mode);

计算艾里函数的第 ss 个零点

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
/* Zeros of Ai(x)
 */
int gsl_sf_airy_zero_Ai_e(unsigned int s, gsl_sf_result * result);
double gsl_sf_airy_zero_Ai(unsigned int s);


/* Zeros of Bi(x)
 */
int gsl_sf_airy_zero_Bi_e(unsigned int s, gsl_sf_result * result);
double gsl_sf_airy_zero_Bi(unsigned int s);

计算艾里函数导数的第 ss 个零点

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
/* Zeros of Ai'(x)
 */
int gsl_sf_airy_zero_Ai_deriv_e(unsigned int s, gsl_sf_result * result);
double gsl_sf_airy_zero_Ai_deriv(unsigned int s);


/* Zeros of Bi'(x)
 */
int gsl_sf_airy_zero_Bi_deriv_e(unsigned int s, gsl_sf_result * result);
double gsl_sf_airy_zero_Bi_deriv(unsigned int s);