GSL 系列 4 |
您所在的位置:网站首页 › besselk函数 › GSL 系列 4 |
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 |