int main(void) { int i; float b1,b2,b3,b4,xf=X1+HTOT,*y,*yout,*dydx; y=vector(1,NVAR); yout=vector(1,NVAR); dydx=vector(1,NVAR); y[1]=bessj0(X1); y[2]=bessj1(X1); y[3]=bessj(2,X1); y[4]=bessj(3,X1); derivs(X1,y,dydx); b1=bessj0(xf); b2=bessj1(xf); b3=bessj(2,xf); b4=bessj(3,xf); printf("First four Bessel functions:\n"); for (i=5;i<=50;i+=5) { mmid(y,dydx,NVAR,X1,HTOT,i,yout,derivs); printf("\n%s %5.2f %s %5.2f %s %2d %s \n", "x=",X1," to ",X1+HTOT," in ",i," steps"); printf("%14s %9s\n","integration","bessj"); printf("%12.6f %12.6f\n",yout[1],b1); printf("%12.6f %12.6f\n",yout[2],b2); printf("%12.6f %12.6f\n",yout[3],b3); printf("%12.6f %12.6f\n",yout[4],b4); printf("\nPress RETURN to continue...\n"); (void) getchar(); } free_vector(dydx,1,NVAR); free_vector(yout,1,NVAR); free_vector(y,1,NVAR); return 0; }
int main(void) { int i,j; float h,x=1.0,*y,*dydx,*yout; y=vector(1,N); dydx=vector(1,N); yout=vector(1,N); y[1]=bessj0(x); y[2]=bessj1(x); y[3]=bessj(2,x); y[4]=bessj(3,x); derivs(x,y,dydx); printf("\n%16s %5s %12s %12s %12s\n", "Bessel function:","j0","j1","j3","j4"); for (i=1;i<=5;i++) { h=0.2*i; rk4(y,dydx,N,x,h,yout,derivs); printf("\nfor a step size of: %6.2f\n",h); printf("%12s","rk4:"); for (j=1;j<=4;j++) printf(" %12.6f",yout[j]); printf("\n%12s %12.6f %12.6f %12.6f %12.6f\n","actual:", bessj0(x+h),bessj1(x+h),bessj(2,x+h),bessj(3,x+h)); } free_vector(yout,1,N); free_vector(dydx,1,N); free_vector(y,1,N); return 0; }
void bessy01(real_t x, real_t *y0, real_t *y1) { if (x < 8.0) { int i; real_t bessj0(real_t); real_t bessj1(real_t); real_t z,z2,c,lnx,b0,b1,b2; static real_t ar1[15]={0.164349e-14, -0.8747341e-13, 0.402633082e-11, -0.15837552542e-9, 0.524879478733e-8, -0.14407233274019e-6, 0.32065325376548e-5, -0.563207914105699e-4, 0.753113593257774e-3, -0.72879624795521e-2, 0.471966895957634e-1, -0.177302012781143, 0.261567346255047, 0.179034314077182, -0.274474305529745}; static real_t ar2[15]={0.42773e-15, -0.2440949e-13, 0.121143321e-11, -0.5172121473e-10, 0.187547032473e-8, -0.5688440039919e-7, 0.141662436449235e-5, -0.283046401495148e-4, 0.440478629867099e-3, -0.51316411610611e-2, 0.423191803533369e-1, -0.226624991556755, 0.675615780772188, -0.767296362886646, -0.128697384381350}; c=0.636619772367581; lnx=c*log(x); c /= x; x /= 8.0; z=2.0*x*x-1.0; z2=z+z; b1=b2=0.0; for (i=0; i<=14; i++) { b0=z2*b1-b2+ar1[i]; b2=b1; b1=b0; } *y0 = lnx*bessj0(8.0*x)+z*b1-b2-0.33146113203285e-1; b1=b2=0.0; for (i=0; i<=14; i++) { b0=z2*b1-b2+ar2[i]; b2=b1; b1=b0; } *y1 = lnx*bessj1(8.0*x)-c+x*(z*b1-b2+0.2030410588593425e-1); } else { void besspq0(real_t, real_t *, real_t *); void besspq1(real_t, real_t *, real_t *); real_t c,cosx,sinx,p0,q0,p1,q1; c=0.797884560802865/sqrt(x); besspq0(x,&p0,&q0); besspq1(x,&p1,&q1); x -= 0.706858347057703e1; cosx=cos(x); sinx=sin(x); *y0 = c*(p0*sinx+q0*cosx); *y1 = c*(q1*sinx-p1*cosx); } }
int main(void) { int i,j; float eps,hdid,hnext,htry,x=1.0,*y,*dydx,*dysav,*ysav,*yscal; y=vector(1,N); dydx=vector(1,N); dysav=vector(1,N); ysav=vector(1,N); yscal=vector(1,N); ysav[1]=bessj0(x); ysav[2]=bessj1(x); ysav[3]=bessj(2,x); ysav[4]=bessj(3,x); derivs(x,ysav,dysav); for (i=1;i<=N;i++) yscal[i]=1.0; htry=0.6; printf("%10s %11s %12s %13s\n","eps","htry","hdid","hnext"); for (i=1;i<=15;i++) { eps=exp((double) -i); x=1.0; for (j=1;j<=N;j++) { y[j]=ysav[j]; dydx[j]=dysav[j]; } rkqs(y,dydx,N,&x,htry,eps,yscal,&hdid,&hnext,derivs); printf("%13f %8.2f %14.6f %12.6f \n",eps,htry,hdid,hnext); } free_vector(yscal,1,N); free_vector(ysav,1,N); free_vector(dysav,1,N); free_vector(dydx,1,N); free_vector(y,1,N); return 0; }
float bessy1(float x) { float bessj1(float x); float z; double xx,y,ans,ans1,ans2; if (x < 8.0) { y=x*x; ans1=x*(-0.4900604943e13+y*(0.1275274390e13 +y*(-0.5153438139e11+y*(0.7349264551e9 +y*(-0.4237922726e7+y*0.8511937935e4))))); ans2=0.2499580570e14+y*(0.4244419664e12 +y*(0.3733650367e10+y*(0.2245904002e8 +y*(0.1020426050e6+y*(0.3549632885e3+y))))); ans=(ans1/ans2)+0.636619772*(bessj1(x)*log(x)-1.0/x); } else { z=8.0/x; y=z*z; xx=x-2.356194491; ans1=1.0+y*(0.183105e-2+y*(-0.3516396496e-4 +y*(0.2457520174e-5+y*(-0.240337019e-6)))); ans2=0.04687499995+y*(-0.2002690873e-3 +y*(0.8449199096e-5+y*(-0.88228987e-6 +y*0.105787412e-6))); ans=sqrt(0.636619772/x)*(sin(xx)*ans1+z*cos(xx)*ans2); } return ans; }
int main(void) { int i,nbad,nok; float eps=1.0e-4,h1=0.1,hmin=0.0,x1=1.0,x2=10.0,*ystart; ystart=vector(1,N); xp=vector(1,200); yp=matrix(1,10,1,200); ystart[1]=bessj0(x1); ystart[2]=bessj1(x1); ystart[3]=bessj(2,x1); ystart[4]=bessj(3,x1); nrhs=0; kmax=100; dxsav=(x2-x1)/20.0; odeint(ystart,N,x1,x2,eps,h1,hmin,&nok,&nbad,derivs,rkqs); printf("\n%s %13s %3d\n","successful steps:"," ",nok); printf("%s %20s %3d\n","bad steps:"," ",nbad); printf("%s %9s %3d\n","function evaluations:"," ",nrhs); printf("\n%s %3d\n","stored intermediate values: ",kount); printf("\n%8s %18s %15s\n","x","integral","bessj(3,x)"); for (i=1;i<=kount;i++) printf("%10.4f %16.6f %14.6f\n", xp[i],yp[4][i],bessj(3,xp[i])); free_matrix(yp,1,10,1,200); free_vector(xp,1,200); free_vector(ystart,1,N); return 0; }
int main(void) { char txt[MAXSTR]; int i,nval; float val,x; FILE *fp; if ((fp = fopen("fncval.dat","r")) == NULL) nrerror("Data file fncval.dat not found\n"); fgets(txt,MAXSTR,fp); while (strncmp(txt,"Bessel Function J1",18)) { 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 %12s %13s \n","x","actual","bessj1(x)"); for (i=1;i<=nval;i++) { fscanf(fp,"%f %f",&x,&val); printf("%6.2f %12.7f %12.7f\n",x,val,bessj1(x)); } fclose(fp); return 0; }
float dfunc(float x) { return -bessj1(x); }