FUNCTION VMISES(T, VK) VMI 10 C VMISES RETURNS THE LEFT TAIL AREA OF THE VON MISES DISTRIBUTION, C EQUAL TO THE INCOMPLETE MODIFIED BESSEL FUNCTION, OF THE FIRST C KIND AND ZERO-TH ORDER. C T = ANGLE IN RADIANS, TREATED AS DEVIATION FROM ZERO (MEAN) C REDUCED MODULO 2PI TO THE RANGE (-PI,+PI). C VK = CONCENTRATION PARAMETER, KAPPA. NEGATIVE VALUES ARE C TREATED AS ZERO. C NEEDS AS AUXILIARY ROUTINE EITHER C FUNCTION GAUSS(X), RETURNING THE NORMAL DISTRIBUTION TAIL AREA C TO THE LEFT OF THE BOUNDING ORDINATE, X, C OR FUNCTION ERF(X), RETURNING THE ERROR FUNCTION AREA BETWEEN C ZERO AND THE BOUNDING ORDINATE, X, WHERE ERF(-X) = -ERF(X). C IF ERF IS USED THEN EACH OF THE LAST 3 COMMENTS (COLUMNS 7 C TO 50 ONLY) MUST REPLACE THE STATEMEMT PRECEDING IT. DATA PI /3.1415926535898/, TPI /6.2831853071760/ C CONSTANTS APPROPRIATE FOR 8 DECIMAL DIGIT ACCURACY. DATA A1, A2, A3, A4, CK, C1 /12.0,0.8,8.0,1.0,10.5,56.0/ Z = VK C CONVERT ANGLE T MODULO 2PI TO RANGE (-PI,+PI). U = AMOD(T+PI,TPI) IF (U.LT.0.0) U = U + TPI Y = U - PI IF (Z.GT.CK) GO TO 30 V = 0.0 IF (Z.LE.0.0) GO TO 20 C FOR SMALL VK SUM IP TERMS BY BACKWARDS RECURSION. IP = Z*A2 - A3/(Z+A4) + A1 P = FLOAT(IP) S = SIN(Y) C = COS(Y) Y = P*Y SN = SIN(Y) CN = COS(Y) R = 0.0 Z = 2.0/Z DO 10 N=2,IP P = P - 1.0 Y = SN SN = SN*C - CN*S CN = CN*C + Y*S R = 1.0/(P*Z+R) V = (SN/P+V)*R 10 CONTINUE 20 VMISES = (U*0.5+V)/PI GO TO 40 C FOR LARGE VK COMPUTE THE NORMAL APPROXIMATION AND LEFT TAIL. 30 C = 24.0*Z V = C - C1 R = SQRT((54.0/(347.0/V+26.0-C)-6.0+C)/6.0) C R=SQRT((54.0/(347.0/V+26.0-C)-6.0+C)/12.0) IF ERF Z = SIN(Y*0.5)*R S = Z*Z C S=Z*Z*2.0 IF ERF V = V - S + 3.0 Y = (C-S-S-16.0)/3.0 Y = ((S+1.75)*S+83.5)/V - Y VMISES = GAUSS(Z-S/(Y*Y)*Z) C VMISES=ERF(Z-S/(Y*Y)*Z)*0.5+0.5 IF ERF 40 IF (VMISES.LT.0.0) VMISES = 0.0 IF (VMISES.GT.1.0) VMISES = 1.0 RETURN END .