Пример #1
0
void airy(float x, float *ai, float *bi, float *aip, float *bip)
{
	void bessik(float x, float xnu, float *ri, float *rk, float *rip,
		float *rkp);
	void bessjy(float x, float xnu, float *rj, float *ry, float *rjp,
		float *ryp);
	float absx,ri,rip,rj,rjp,rk,rkp,rootx,ry,ryp,z;

	absx=fabs(x);
	rootx=sqrt(absx);
	z=TWOTHR*absx*rootx;
	if (x > 0.0) {
		bessik(z,THIRD,&ri,&rk,&rip,&rkp);
		*ai=rootx*ONOVRT*rk/PI;
		*bi=rootx*(rk/PI+2.0*ONOVRT*ri);
		bessik(z,TWOTHR,&ri,&rk,&rip,&rkp);
		*aip = -x*ONOVRT*rk/PI;
		*bip=x*(rk/PI+2.0*ONOVRT*ri);
	} else if (x < 0.0) {
		bessjy(z,THIRD,&rj,&ry,&rjp,&ryp);
		*ai=0.5*rootx*(rj-ONOVRT*ry);
		*bi = -0.5*rootx*(ry+ONOVRT*rj);
		bessjy(z,TWOTHR,&rj,&ry,&rjp,&ryp);
		*aip=0.5*absx*(ONOVRT*ry+rj);
		*bip=0.5*absx*(ONOVRT*rj-ry);
	} else {
		*ai=0.35502805;
		*bi=(*ai)/ONOVRT;
		*aip = -0.25881940;
		*bip = -(*aip)/ONOVRT;
	}
}
int main(void)
{
    char txt[MAXSTR];
    int i,nval;
    float rj,ry,rjp,ryp,x,xnu,xrj,xry,xrjp,xryp;
    FILE *fp;

    if ((fp = fopen("fncval.dat","r")) == NULL)
        nrerror("Data file fncval.dat not found\n");
    fgets(txt,MAXSTR,fp);
    while (strncmp(txt,"Ordinary Bessel Functions",25)) {
        fgets(txt,MAXSTR,fp);
        if (feof(fp)) nrerror("Data not found in fncval.dat\n");
    }
    fscanf(fp,"%d %*s",&nval);
    printf("\n%s\n",txt);
    printf("%5s %7s\n%14s %16s %17s %16s\n%14s %16s %17s %16s\n",
           "xnu","x","rj","ry","rjp","ryp","xrj","xry","xrjp","xryp");
    for (i=1; i<=nval; i++) {
        fscanf(fp,"%f %f %f %f %f %f",&xnu,&x,&rj,&ry,&rjp,&ryp);
        bessjy(x,xnu,&xrj,&xry,&xrjp,&xryp);
        printf("%5.2f %5.2f\n\t%16.6e %16.6e %16.6e %16.6e\n",xnu,x,rj,ry,rjp,ryp);
        printf("\t%16.6e %16.6e %16.6e %16.6e\n",xrj,xry,xrjp,xryp);
    }
    fclose(fp);
    return 0;
}
Пример #3
0
void mbesselall (header *hdx)
{	header *st=hdx,*hd=nextof(hdx);
	double bj,by,bdj,bdy;
	hd=getvalue(hd); if (error) return;
	hdx=getvalue(hdx); if (error) return;
	if (hd->type!=s_real || hdx->type!=s_real)
		wrong_arg_in("besselall");
	bessjy(*realof(hd),*realof(hdx),&bj,&by,&bdj,&bdy);
	if (error) return;
	newram=(char *)st;
	new_real(bj,""); if (error) return;
	new_real(by,""); if (error) return;
	new_real(bdj,""); if (error) return;
	new_real(bdy,"");
}
Пример #4
0
void sphbes(int n, float x, float *sj, float *sy, float *sjp, float *syp)
{
	void bessjy(float x, float xnu, float *rj, float *ry, float *rjp,
		float *ryp);
	void nrerror(char error_text[]);
	float factor,order,rj,rjp,ry,ryp;

	if (n < 0 || x <= 0.0) nrerror("bad arguments in sphbes");
	order=n+0.5;
	bessjy(x,order,&rj,&ry,&rjp,&ryp);
	factor=RTPIO2/sqrt(x);
	*sj=factor*rj;
	*sy=factor*ry;
	*sjp=factor*rjp-(*sj)/(2.0*x);
	*syp=factor*ryp-(*sy)/(2.0*x);
}
Пример #5
0
	double bessj3_5(double x)
	{
		double rj, ry, rjp, ryp;
		bessjy(x, 3.5, &rj, &ry, &rjp, &ryp);
		return rj;
	}
Пример #6
0
void bessely (double *x, double *k, double *r)
{	double h1,h2;
	bessjy(*k,*x,&h1,r,&h2,&h2);
}