GSL 系列 4

您所在的位置:网站首页 besselk函数 GSL 系列 4

GSL 系列 4

2024-03-23 13:04| 来源: 网络整理| 查看: 265

1 写在前面

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

gsl_sf_result * result

gsl_mode_t mode

gsl_sf_result_e10 * result

2 头文件

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

3 贝塞尔 (Bessel) 函数 基本介绍1 符号说明

$w^{\prime \prime} = \frac{d^{2} w}{d z^{2}},w^{\prime}=\frac{d w}{d z}$

$z$ 为复数自变量

$\nu$ 为复数常量

$n$ 为整数

3.1.2 贝塞尔函数

微分方程:

$$z^{2} \frac{d^{2} w}{d z^{2}}+z \frac{d w}{d z}+\left(z^{2}-\nu^{2}\right) {w}=0$$

通解构成:

第一类贝塞尔函数:$J_{\pm \nu}(z)$

第二类贝塞尔函数(韦伯函数):$Y_{\nu}(z)$

第三类贝塞尔函数(汉克尔函数):$H_{\nu}^{(1)}(z)、H_{\nu}^{(2)}(z)$

关系式: $$J_{\nu}(z)=\left(\frac{1}{2} z\right)^{\nu} \sum_{k=0}^{\infty} \frac{\left(-\frac{1}{4} z^{2}\right)^{k}}{k ! \Gamma(\nu+k+1)}$$

$$Y_{\nu}(z)=\frac{J_{{\nu}}(z) \cos ({\nu} \pi)-{J}_{-{\nu}}({z})}{\sin ({\nu} \pi)}$$

阶数:$\nu$

修正贝塞尔函数

微分方程:

$$z^{2} \frac{d^{2} w}{d z^{2}}+z \frac{d w}{d z}-\left(z^{2}+\nu^{2}\right) w=0$$

通解构成:

第一类修正贝塞尔函数:$I_{\pm \nu}(z)$

第二类修正贝塞尔函数:$K_{\nu}(z)$

关系式:

$$I_{\nu}(z)=i^{-\nu} J_{\nu}(i z)$$

$$K_{\nu}(z)=\frac{1}{2} \pi \frac{I_{-\nu}(z)-I_{\nu}(z)}{\sin (\nu \pi)}$$

球贝塞尔函数

微分方程:

$$z^{2} w^{\prime \prime}+2 z w^{\prime}+\left[z^{2}-n(n+1)\right] w=0$$

通解构成:

第一类球贝塞尔函数:$j_n(z)$

第二类球贝塞尔函数:$y_n(z)$

第三类球贝塞尔函数:$h_n^{(1)}(z),h_n^{(2)}(z)$

关系式:

$$j_{n}(z)=\sqrt{\frac{1}{2} \pi / z} J_{n+\frac{1}{2}}(z)$$

$$y_{n}(z)=\sqrt{\frac{1}{2} \pi / z} Y_{n+\frac{1}{2}}(z)$$

$$h_n^{(1)}(z) = j_n(z)+iy_n(z)$$

$$h_n^{(2)}(z) = j_n(z)-iy_n(z)$$

修正球贝塞尔函数

微分方程:

$$z^{2} w^{\prime \prime}+2 z w^{\prime}-\left[z^{2}+n(n+1)\right] w=0$$

通解构成:

第一类修正球贝塞尔函数:$\sqrt{\frac{1}{2} \pi / z} I_{n+\frac{1}{2}}(z)$

第二类修正球贝塞尔函数:$\sqrt{\frac{1}{2} \pi / z} I_{-n-\frac{1}{2}}(z)$

第三类修正球贝塞尔函数:$\sqrt{\frac{1}{2} \pi / z} K_{n+\frac{1}{2}}(z)$

关系式:

$$\sqrt{\frac{1}{2} \pi / z} I_{n+\frac{1}{2}}(z) = i^{-n}j_n(iz)$$

$$\sqrt{\frac{1}{2} \pi / z} I_{-n-\frac{1}{2}}(z)=i^{-(n+1)}y_n(iz)$$

$$\sqrt{\frac{1}{2} \pi / z} K_{n+\frac{1}{2}}(z)=\frac{1}{2} \pi(-1)^{n+1} \sqrt{\frac{1}{2} \pi / z}\left[I_{n+\frac{1}{2}}(z)-I_{-n-\frac{1}{2}}(z)\right]$$

贝塞尔函数计算 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 // 第一类 0 阶 int gsl_sf_bessel_J0_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_J0(const double x); // 第一类 1 阶 int gsl_sf_bessel_J1_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_J1(const double x); // 第一类 n 阶 int gsl_sf_bessel_Jn_e(int n, double x, gsl_sf_result * result); double gsl_sf_bessel_Jn(const int n, const double x); // 第一类 计算 nmin 到 nmax 阶,结果存在 result_array 中 int gsl_sf_bessel_Jn_array(int nmin, int nmax, double x, double * result_array); // 第一类 分数阶 nu int gsl_sf_bessel_Jnu_e(const double nu, const double x, gsl_sf_result * result); double gsl_sf_bessel_Jnu(const double nu, const double x); // 第一类 分数阶 nu , 计算贝塞尔函数在一系列 x 的值(数组 v,有序和正的) // 计算出来的结果放在数组 v, 数组 v 得到重写 int gsl_sf_bessel_sequence_Jnu_e(double nu, gsl_mode_t mode, size_t size, double * v); // 第二类,和第一类类似 int gsl_sf_bessel_Y0_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_Y0(const double x); int gsl_sf_bessel_Y1_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_Y1(const double x); int gsl_sf_bessel_Yn_e(int n,const double x, gsl_sf_result * result); double gsl_sf_bessel_Yn(const int n,const double x); int gsl_sf_bessel_Yn_array(const int nmin, const int nmax, const double x, double * result_array); int gsl_sf_bessel_Ynu_e(double nu, double x, gsl_sf_result * result); double gsl_sf_bessel_Ynu(const double nu, const double x); 修正贝塞尔函数计算 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 // 第一类修正 int gsl_sf_bessel_I0_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_I0(const double x); int gsl_sf_bessel_I1_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_I1(const double x); int gsl_sf_bessel_In_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_bessel_In(const int n, const double x); int gsl_sf_bessel_In_array(const int nmin, const int nmax, const double x, double * result_array); // 分数阶 int gsl_sf_bessel_Inu_e(double nu, double x, gsl_sf_result * result); double gsl_sf_bessel_Inu(double nu, double x); // 第一类修正 缩放 // exp(-|x|) I_0(x) int gsl_sf_bessel_I0_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_I0_scaled(const double x); // exp(-|x|) I_1(x) int gsl_sf_bessel_I1_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_I1_scaled(const double x); // exp(-|x|) I_n(x) int gsl_sf_bessel_In_scaled_e(int n, const double x, gsl_sf_result * result); double gsl_sf_bessel_In_scaled(const int n, const double x); int gsl_sf_bessel_In_scaled_array(const int nmin, const int nmax, const double x, double * result_array); // 分数阶 Exp[-|x|] BesselI[nu, x] x >= 0, nu >= 0 int gsl_sf_bessel_Inu_scaled_e(double nu, double x, gsl_sf_result * result); double gsl_sf_bessel_Inu_scaled(double nu, double x); // 第二类修正 // x > 0.0 int gsl_sf_bessel_K0_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_K0(const double x); int gsl_sf_bessel_K1_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_K1(const double x); int gsl_sf_bessel_Kn_e(const int n, const double x, gsl_sf_result * result); double gsl_sf_bessel_Kn(const int n, const double x); int gsl_sf_bessel_Kn_array(const int nmin, const int nmax, const double x, double * result_array); // 分数阶 BesselK[nu, x] x > 0, nu >= 0 int gsl_sf_bessel_Knu_e(const double nu, const double x, gsl_sf_result * result); double gsl_sf_bessel_Knu(const double nu, const double x); // 自然对数,分数阶 ln[BesselK[nu, x]] x > 0, nu >= 0 int gsl_sf_bessel_lnKnu_e(const double nu, const double x, gsl_sf_result * result); double gsl_sf_bessel_lnKnu(const double nu, const double x); // 第二类修正 缩放 // exp(x) K_0(x) x > 0.0 int gsl_sf_bessel_K0_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_K0_scaled(const double x); // exp(x) K_1(x) x > 0.0 int gsl_sf_bessel_K1_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_K1_scaled(const double x); // exp(x) K_n(x) x > 0.0 int gsl_sf_bessel_Kn_scaled_e(int n, const double x, gsl_sf_result * result); double gsl_sf_bessel_Kn_scaled(const int n, const double x); int gsl_sf_bessel_Kn_scaled_array(const int nmin, const int nmax, const double x, double * result_array); // 分数阶 Exp[+|x|] BesselK[nu, x] x > 0, nu >= 0 int gsl_sf_bessel_Knu_scaled_e(const double nu, const double x, gsl_sf_result * result); double gsl_sf_bessel_Knu_scaled(const double nu, const double x); int gsl_sf_bessel_Knu_scaled_e10_e(const double nu, const double x, gsl_sf_result_e10 * result); 球贝塞尔函数计算 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 // 第一类 球 // j_0(x) = sin(x)/x int gsl_sf_bessel_j0_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_j0(const double x); // j_1(x) = (sin(x)/x - cos(x))/x int gsl_sf_bessel_j1_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_j1(const double x); // j_2(x) = ((3/x^2 - 1)sin(x) - 3cos(x)/x)/x int gsl_sf_bessel_j2_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_j2(const double x); // j_l(x) int gsl_sf_bessel_jl_e(const int l, const double x, gsl_sf_result * result); double gsl_sf_bessel_jl(const int l, const double x); // j_l(x) for l=0,1,...,lmax l >= 0, x >= 0.0 int gsl_sf_bessel_jl_array(const int lmax, const double x, double * result_array); // j_l(x) for l=0,1,...,lmax Uses Steed's method. int gsl_sf_bessel_jl_steed_array(const int lmax, const double x, double * jl_x_array); // 第二类 球 int gsl_sf_bessel_y0_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_y0(const double x); int gsl_sf_bessel_y1_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_y1(const double x); int gsl_sf_bessel_y2_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_y2(const double x); int gsl_sf_bessel_yl_e(int l, const double x, gsl_sf_result * result); double gsl_sf_bessel_yl(const int l, const double x); int gsl_sf_bessel_yl_array(const int lmax, const double x, double * result_array); 修正球贝塞尔函数计算 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 // 第一类 修正球 缩放 // Exp[-|x|] i_0(x),这里 i 代表第一类修正球 int gsl_sf_bessel_i0_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_i0_scaled(const double x); // Exp[-|x|] i_2(x) int gsl_sf_bessel_i2_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_i2_scaled(const double x); // Exp[-|x|] i_l(x) ,l >= 0 // i_l(x) = Sqrt[Pi/(2x)] BesselI[l+1/2,x] 使用 第一类修正 计算 int gsl_sf_bessel_il_scaled_e(const int l, double x, gsl_sf_result * result); double gsl_sf_bessel_il_scaled(const int l, const double x); // Exp[-|x|] i_l(x) for l=0,1,...,lmax int gsl_sf_bessel_il_scaled_array(const int lmax, const double x, double * result_array); // 第二类 修正球 缩放 // Exp[x] k_0(x) x > 0.0 int gsl_sf_bessel_k0_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_k0_scaled(const double x); // Exp[x] k_1(x) x > 0.0 int gsl_sf_bessel_k1_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_k1_scaled(const double x); // Exp[x] k_2(x) x > 0.0 int gsl_sf_bessel_k2_scaled_e(const double x, gsl_sf_result * result); double gsl_sf_bessel_k2_scaled(const double x); // Exp[x] k_l[x] k_l(x) = Sqrt[Pi/(2x)] BesselK[l+1/2,x] int gsl_sf_bessel_kl_scaled_e(int l, const double x, gsl_sf_result * result); double gsl_sf_bessel_kl_scaled(const int l, const double x); // Exp[x] k_l(x) for l=0,1,...,lmax int gsl_sf_bessel_kl_scaled_array(const int lmax, const double x, double * result_array); 第一类贝塞尔函数的零点 1 2 3 4 5 6 7 8 9 // 第一类 0 阶 贝塞尔函数 的 第 s 个 正零点 int gsl_sf_bessel_zero_J0_e(unsigned int s, gsl_sf_result * result); double gsl_sf_bessel_zero_J0(unsigned int s); // 第一类 1 阶 贝塞尔函数 的 第 s 个 正零点 int gsl_sf_bessel_zero_J1_e(unsigned int s, gsl_sf_result * result); double gsl_sf_bessel_zero_J1(unsigned int s); // 第一类 nu 阶 贝塞尔函数 的 第 s 个 正零点 int gsl_sf_bessel_zero_Jnu_e(double nu, unsigned int s, gsl_sf_result * result); double gsl_sf_bessel_zero_Jnu(double nu, unsigned int s); 4 参考

Milton Abramowitz and Irene A. Stegun, eds., Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables (Dover: New York, 1972) ↩︎



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3