第一类修正贝塞尔函数[转]

http://blog.csdn.net/wangjiannuaa/article/details/6117988


#include "stdio.h"
#include "math.h"
/*****************************************************************
 第一类变型贝塞尔函数/
 第一类修正贝塞尔函数/
 第一类变态贝塞尔函数/
 第一类虚宗量贝塞尔函数/
 双曲型贝塞尔函数
******************************************************************/
double first_modified_Bessel(int n,double x)
{
	int i,m;
	double t,y,p,b0,b1,q;
	static double a[7]={ 1.0,3.5156229,3.0899424,1.2067492,
				0.2659732,0.0360768,0.0045813};
	static double b[7]={ 0.5,0.87890594,0.51498869,
				0.15084934,0.02658773,0.00301532,0.00032411};
	static double c[9]={ 0.39894228,0.01328592,0.00225319,
				-0.00157565,0.00916281,-0.02057706,
				0.02635537,-0.01647633,0.00392377};
	static double d[9]={ 0.39894228,-0.03988024,-0.00362018,
				0.00163801,-0.01031555,0.02282967,
				-0.02895312,0.01787654,-0.00420059};
	if (n<0) n=-n;
	t=fabs(x);
	if (n!=1)
	{ 
		if (t<3.75)
		{ 
			y=(x/3.75)*(x/3.75); p=a[6];
			for (i=5; i>=0; i--)
				p=p*y+a[i];
		}
		else
		{ 
			y=3.75/t; p=c[8];
			for (i=7; i>=0; i--)
			p=p*y+c[i];
			p=p*exp(t)/sqrt(t);
		}
	}
	if (n==0) return(p);
	q=p;
	if (t<3.75)
	{ 
		y=(x/3.75)*(x/3.75); p=b[6];
		for (i=5; i>=0; i--) p=p*y+b[i];
		p=p*t;
	}
	else
	{ 
		y=3.75/t; p=d[8];
		for (i=7; i>=0; i--) p=p*y+d[i];
		p=p*exp(t)/sqrt(t);
	}
	if (x<0.0) p=-p;
	if (n==1) return(p);
	if (x==0.0) return(0.0);
	y=2.0/t; t=0.0; b1=1.0; b0=0.0;
	m=n+(int)sqrt(40.0*n);
	m=2*m;
	
	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);
}
main()
{ 
	int n;
	double x;
	double y0,y1,y2,y3,y4;
	FILE * fp = fopen("D://data.txt","w");
	fprintf(fp,"x   I0(x)   I1(x)   I2(x)   I3(x)   I4(x)/n");
	for (x=0.0;x<6;x+=0.01)
	{
		y0 = first_modified_Bessel(0,x);
		y1 = first_modified_Bessel(1,x);
		y2 = first_modified_Bessel(2,x);
		y3 = first_modified_Bessel(3,x);
		y4 = first_modified_Bessel(4,x);
		fprintf(fp,"%6.3f   %6.3f   %6.3f   %6.3f   %6.3f   %6.3f/n",x,y0,y1,y2,y3,y4);
	}
	fprintf(fp,"/n");
	fclose(fp);
}


  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值