⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bessel1_cpp.txt

📁 BESSEL PROGRAMS IN C/C
💻 TXT
字号:
/*****************************************************************
*  Program to demonstrate the Bessel function asymptotic series  *
* -------------------------------------------------------------- *
*       Reference: BASIC Scientific Subroutines, Vol. II         *
*         by F.R. Ruckdeschel, BYTE/McGRAWW-HILL, 1981.          *
*                                                                *
*                  C++ Version by J.-P. Moreau, Paris.           *
* -------------------------------------------------------------- *
* SAMPLE RUN:                                                    *
*                                                                *
*  X            J0(X)            J1(X)        N            E     *
* -------------------------------------------------------------- *
*  1           0.733562         0.402234      1       0.1121521  *
*  2           0.221488         0.578634      1       0.0070095  *
*  3          -0.259956         0.340699      2       0.0007853  *
*  4          -0.396826        -0.065886      2       0.0001398  *
*  5          -0.177486        -0.327696      3       0.0000155  *
*  6           0.150635        -0.276760      3       0.0000036  *
*  7           0.300051        -0.004696      4       0.0000004  *
*  8           0.171638         0.234650      5       0.0000000  *
*  9          -0.090332         0.245324      5       0.0000000  *
* 10          -0.245930         0.043476      6       0.0000000  *
* 11          -0.171187        -0.176788      5       0.0000000  *
* 12           0.047689        -0.223450      5       0.0000000  *
* 13           0.206925        -0.070319      4       0.0000000  *
* 14           0.171072         0.133376      4       0.0000000  *
* 15          -0.014225         0.205105      4       0.0000000  *
* -------------------------------------------------------------- *
*                                                                *
*****************************************************************/
#include <stdio.h>
#include <math.h>

#define PI 4*atan(1)

double e, e3, J0, J1, x;
double m1, m2, n1, n2;
int    i, n;


/*********************************************************
* Bessel function asymptotic series subroutine. This     *
* program calculates the zeroth and first order Bessel   *
* functions using an asymptotic series expansion.        *
* The required input are X and a convergence factor e.   *
* Returned are the two Bessel functions, J0(X) and J1(X) *
* ------------------------------------------------------ *
* Reference; Algorithms for RPN calculators, by Ball,    *
* L.A. Wiley and sons.                                   *
*********************************************************/
void Calcul_Bessel()  {
//Labels: e100, e200
  double a,a1,a2,b,c,e1,e2,e4,x1;
  int    m;
  //Calculate P and Q polynomials; P0(x)=m1, P1(x)=m2,
  //Q0(x)=n1, Q1(x)=n2  
  a = 1; a1 = 1; a2 = 1; b = 1; c = 1;
  e1 = 1e6;
  m = -1;
  x1 = 1.0 / (8.0 * x);
  x1 = x1 * x1;
  m1 = 1.0; m2 = 1.0;
  n1 = -1.0 / (8.0 * x);
  n2 = -3.0 * n1;
  n = 0;
e100:  m = m + 2; a = a * m * m;
  m = m + 2; a = a * m * m;
  c = c * x1;
  a1 = a1 * a2; a2 = a2 + 1.0; a1 = a1 * a2;
  a2 = a2 + 1.0; e2 = a * c / a1;
  e4 = 1.0 + (m + 2) / m + (m + 2) * (m + 2) / (a2 * 8 * x) + (m + 2) * (m + 4) / (a2 * 8 * x);
  e4 = e4 * e2;
  //Test for divergence
  if (fabs(e4) > e1) goto e200;
  e1 = fabs(e2);
  m1 = m1 - e2;
  m2 = m2 + e2 * (m + 2) / m;
  n1 = n1 + e2 * (m + 2) * (m + 2) / (a2 * 8 * x);
  n2 = n2 - e2 * (m + 2) * (m + 4) / (a2 * 8 * x);
  n++;
  //Test for convergence criterion
  if (e1 < e3) goto e200;
  goto e100;
e200: a = PI;
  e = e2;
  b = sqrt(2.0 / (a * x));
  J0 = b * (m1 * cos(x - a / 4) - n1 * sin(x - a / 4.0));
  J1 = b * (m2 * cos(x - 3 * a / 4.0) - n2 * sin(x - 3 * a / 4.0));
}


void main()  {
  e3=1e-8;
  printf("\n   X            J0(X)            J1(X)        N            E      \n");
  printf("------------------------------------------------------------------\n");
  for (i = 1; i < 16; i++) {
    x = (double) i;
    Calcul_Bessel();
    printf("  %2d          %9.6f        %9.6f      %d       %9.7f\n",i,J0,J1,n,e);
  }
  printf("------------------------------------------------------------------\n");
}

// End of file Bessel1.cpp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -