1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        WAVFN:   COMPUTES AND PLOTS THE RADIAL PART OF 
4  REM                 HYDROGEN-LIKE WAVE FUNCTIONS
5  REM        36733 REV  A   10/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
20  PRINT "MAX. DISTANCE FROM NUCLEUS";
40  INPUT X3
60  PRINT "DESIRED INTERVAL";
80  INPUT X1
100  LET X2=0
110  LET X8=INT(X2/X1)
120  LET X9=INT(X3/X1)
130  DEF FNI()=INT(/X1)
140  DEF FNJ()=INT((-Y2)/D+.5)+1
150  DIM A$[72],Z$[10],Y[10]
160  PRINT "ENTER Z,N,L"
170  PRINT "Z=";
180  INPUT Z
190  PRINT "N=";
200  INPUT N
210  PRINT "L=";
220  INPUT L1
230  LET A1=N+L1
240  LET B1=2*L1+1
250  DEF FNS()=(Z*)/.59
260  DEF FNA()=D9*((X9+1.E-10)^L1)*(EXP(-FNS()/N)*T)
270  DEF FNB()=((FNA())^2)*(^2)
280  LET N2=(N-L1)-1
290  LET K6=1
300  IF N2=0 THEN 340
310  FOR I=1 TO N2
320  LET K6=K6*I
330  NEXT I
340  LET N3=N+L1
350  LET K8=1
360  IF N3=0 THEN 400
370  FOR I=1 TO N3
380  LET K8=K8*I
390  NEXT I
400  LET C9=-SQR((4*K6)/((N^4)*(K8^3)))
410  LET C9=C9*(-1)^(N+L1)*K8/K6
420  LET D9=C9*((Z/.529)^1.5)
440  LET M=2
450  LET Z$="12"
460  LET Y2=Y3=0
470  FOR X=X2 TO X3 STEP X1
480  LET X9=FNS(X)*2/N
490  LET T=0
500  LET C3=1
510  FOR N1=(A1-B1) TO 0 STEP -1
520  LET T=T+C3*(X9+1.E-10)^N1
530  LET C3=C3*N1*(N1+B1)/(N1+B1-A1-1+1.E-10)
540  NEXT N1
550  LET Y[1]=FNA(X)
560  LET Y[2]=FNB(X)
570  FOR I=1 TO M
580  LET Y2=Y2 MIN Y[I]
590  LET Y3=Y3 MAX Y[I]
600  NEXT I
610  NEXT X
612  PRINT "YMIN= ";Y2
614  PRINT "YMAX= "Y3
620  LET D=(Y3-Y2)/70
628  GOSUB 990
630  FOR X=X2 TO X3 STEP X1
640  LET X9=FNS(X)*2/N
650  LET T=0
660  LET C3=1
670  FOR N1=(A1-B1) TO 0 STEP -1
680  LET T=T+C3*(X9+1.E-10)^N1
690  LET C3=C3*N1*(N1+B1)/(N1+B1-A1-1+1.E-10)
700  NEXT N1
710  FOR I=1 TO 72
720  LET A$[I,I]=" "
730  NEXT I
740  LET Y[1]=FNA(X)
750  LET Y[2]=FNB(X)
760  LET J1=M
770  FOR I=1 TO M
780  LET Y[I]=FNJ(Y[I])
790  IF Y[I]>71 THEN 850
800  IF Y[I]<1 THEN 850
810  IF A$[Y[I],Y[I]]#" " THEN 840
820  LET A$[Y[I],Y[I]]=Z$[I]
830  GOTO 860
840  LET A$[Y[I],Y[I]]="X"
850  LET J1=J1-1
860  NEXT I
870  LET J2=0
880  PRINT ".";
890  FOR I=1 TO 71
900  IF J2=J1 THEN 950
910  PRINT A$[I,I];
920  IF A$[I,I]=" " THEN 940
930  LET J2=J2+1
940  NEXT I
950  PRINT 
960  NEXT X
970  GOSUB 990
980  STOP 
990  PRINT " ";
1000  FOR I=1 TO 71
1010  PRINT ".";
1020  NEXT I
1030  PRINT 
1040  RETURN 
1050  END 
