OPTIONS NOCENTER LINESIZE=90; TITLE1 "EXAMPLE1.SAS--Compute confluent hypergeometric, M(a,b,x)]"; TITLE2 "ln[M(a,b,x)] top left, ln[exp(X)*M(b-a,b,x)] bottom left"; TITLE3 "Corresponding continued fraction versions to right of each"; TITLE4 "Converged=1 if program declared convergence, 0 otherwise"; TITLE5 "Note a few silent failures for Methods 1, 1C, 2, 2C, 4, 4C"; ****Change the following line point to the correct file name***; FILENAME IN01 ".\MABX0101.IML"; ***************************************************************; PROC IML SYMSIZE=3000 WORKSIZE=24000; RESET FW=6 SPACES=3 NONAME; %INCLUDE IN01 /NOSOURCE2; ROWNM1={" lnM(A,B,X) " "terms" "converged?" "max|term(i)|"}; ROWNM2={"X+lnM(B-A,B,X)" "terms" "converged?" "max|term(i)|"}; COLNM0={A B X R1 R2}; COLNM1={"1" "2" "3" "4" "5" }; COLNM2={"1C" "2C" "." "4C" "5C"}; MAXTERMS=300; ASET={1,10,100}; XSET={1,10,100}; DO I3=1 TO NROW(XSET); X=XSET[I3]; DO I1=1 TO NROW(ASET); A=ASET[I1]; B=A+2; R1=ABS(X#A/B); R2=ABS((B-A)#A/X); M1 =_MABX1_ (A,B,X,MAXTERMS); M1C=_MABX1C_(A,B,X,MAXTERMS); M2 =_MABX2_ (A,B,X,MAXTERMS); M2C=_MABX2C_(A,B,X,MAXTERMS); M3 =_MABX3_ (A,B,X,MAXTERMS); M4 =_MABX4_ (A,B,X,MAXTERMS); M4C=_MABX4C_(A,B,X,MAXTERMS); M5 =_MABX5_ (A,B,X,MAXTERMS); M5C=_MABX5C_(A,B,X,MAXTERMS); HOLD1 =M1||M2||M3||M4||M5; HOLD =( LOG(ABS(HOLD1[1,*]))+HOLD1[2,*] ) // HOLD1[3:5,*]; HOLD1C=M1C||M2C||J(5,1,.)||M4C||M5C; HOLDC =( LOG(ABS(HOLD1C[1,*]))+HOLD1C[2,*] ) // HOLD1C[3:5,*]; M1 =_MABX1_ (B-A,B,-X,MAXTERMS); M1C =_MABX1C_(B-A,B,-X,MAXTERMS); M2 =_MABX2_ (B-A,B,-X,MAXTERMS); M2C =_MABX2C_(B-A,B,-X,MAXTERMS); M3 =_MABX3_ (B-A,B,-X,MAXTERMS); M4 =_MABX4_ (B-A,B,-X,MAXTERMS); M4C =_MABX4C_(B-A,B,-X,MAXTERMS); M5 =_MABX5_ (B-A,B,-X,MAXTERMS); M5C =_MABX5C_(B-A,B,-X,MAXTERMS); HOLD1N =M1||M2||M3||M4||M5; HOLDN =(X + LOG(ABS(HOLD1N[1,*]))+HOLD1N[2,*] ) // HOLD1N[3:5,*]; HOLD1CN=M1C||M2C||J(5,1,.)||M4C||M5C; HOLDCN =(X + LOG(ABS(HOLD1CN[1,*]))+HOLD1CN[2,*] ) // HOLD1CN[3:5,*]; CASE=A||B||X||R1||R2; PRINT ,, CASE [COLNAME=COLNM0] , HOLD [ROWNAME=ROWNM1 COLNAME=COLNM1] HOLDC [ COLNAME=COLNM2] , HOLDN [ROWNAME=ROWNM2 ] HOLDCN ; END; END;