for (i=m; i>0; i--)
{
p=b0+i*y*b1; b0=b1; b1=p;
if (fabs(b1)>1.0e+10)
{
t=t*1.0e-10; b0=b0*1.0e-10;
b1=b1*1.0e-10;
}
if (i==n) t=b0;
}
p=t*q/b1;
if ((x<0.0)&&(n%2==1)) p=-p;
return(p);
}
double second_modified_Bessel(int n,double x)
{
int i;
double y,p,b0,b1;
static double a[7]={ -0.57721566,0.4227842,0.23069756,
0.0348859,0.00262698,0.0001075,0.0000074};
static double b[7]={ 1.0,0.15443144,-0.67278579,
-0.18156897,-0.01919402,-0.00110404,-0.00004686};
static double c[7]={ 1.25331414,-0.07832358,0.02189568,
-0.01062446,0.00587872,-0.0025154,0.00053208};
static double d[7]={ 1.25331414,0.23498619,-0.0365562,
0.01504268,-0.00780353,0.00325614,-0.00068245};
if (n<0) n=-n;
if (x<0.0) x=-x;
if (x==0.0) return(1.0e+70);
if (n!=1)
{
if (x<=2.0)
{
y=x*x/4.0; p=a[6];
for (i=5; i>=0; i--) p=p*y+a[i];
p=p-first_modified_Bessel(0,x)*log(x/2.0);
}
else
{
y=2.0/x; p=c[6];
for (i=5; i>=0; i--) p=p*y+c[i];
p=p*exp(-x)/sqrt(x);
}
}
if (n==0) return(p);
b0=p;
if (x<=2.0)
{
y=x*x/4.0; p=b[6];
for (i=5; i>=0; i--) p=p*y+b[i];
p=p/x+first_modified_Bessel(1,x)*log(x/2.0);
}
else
{
y=2.0/x; p=d[6];
for (i=5; i>=0; i--) p=p*y+d[i];
p=p*exp(-x)/sqrt(x);
}
if (n==1) return(p);
b1=p;
y=2.0/x;
for (i=1; i<n; i++)
{
p=b0+i*y*b1; b0=b1; b1=p;
}
return(p);
}
main()
{
int n;
double x;
double y0,y1;
FILE * fp = fopen("D://data.txt","w");
fprintf(fp,"x K0(x) K1(x)/n");
for (x=0.5;x<6;x+=0.01)
{
y0 = second_modified_Bessel(0,x);
y1 = second_modified_Bessel(1,x);
fprintf(fp,"%6.3f %6.3f %6.3f/n",x,y0,y1);
}
fprintf(fp,"/n");
fclose(fp);
}
对得到的TXT数据作图如下所示: