File: MACHK4.FT of Tape: Various/ETH/eth11-1
(Source file text)
C MACHK4.FTN - SAMPLE PROGRAM (MATRIX OPERATIONS) C RCPY - COPY ROW INTO VECTOR C MSTR - CONVERT STORAGE MODE C MPRD - MULTIPLY TWO MATRICES C SADD - ADD SCALAR TO MATRIX C SSUB - SUBTRACT SCALAR FROM MATRIX C SDIV - DIVIDE MATRIX BY SCALAR C SCLA - SET MATRIX ELEMENTS EQUAL TO A SCALAR C RADD - ADD ROW TO ROW OF ANOTHER MATRIX C CADD - ADD COL. TO COL. OF ANOTHER MATRIX C RTAB - TABULATE ROWS OF A MATRIX C CTAB - TABULATE COLS. OF A MATRIX C CSRT - SORT COLUMNS C RECP - RECIPROCAL FUNCTION FOR MFUN C ALSO - MFUN, CCPY, LOC C EXTERNAL RECP DIMENSION A(3,3),B(3,3),C(3,3),R(3),U(4),S(4),T(3) EQUIVALENCE (R,U), (S,T) DATA A/1.,1.,-1.,2.,0.,3.,3.,-1.,2./,R/1.,2.,3./ C OUTPUT CHANNEL = IOUT IOUT=2 WRITE(IOUT,100) ((A(I,J),J=1,3),I=1,3) 100 FORMAT(//' ORIGINAL MATRIX:'/(3F10.2)) C SET B = ALL ONES CALL SCLA(B,1.0,3,3,0) CALL SADD(A,1.0,C,3,3,0) WRITE(IOUT,101) ((B(I,J),J=1,3),I=1,3) 101 FORMAT(//' MATRIX OF ONES BY SCLA:'/(3F10.2)) WRITE(IOUT,102) ((C(I,J),J=1,3),I=1,3) 102 FORMAT(//' SIMULATE ADDITION BY SADD:'/(3F10.2)) C CONVERT DIAGONAL R TO GENERAL A CALL MSTR(R,A,3,2,0) WRITE(IOUT,103) R,((A(I,J),J=1,3),I=1,3) 103 FORMAT(//' EXPAND DIAGONAL TO GENERAL BY MSTR:'/3F10.2//(3F10.2)) C MULTIPLY MATRICES CALL MPRD(A,C,B,3,3,0,0,3) WRITE(IOUT,104) ((B(I,J),J=1,3),I=1,3) 104 FORMAT(//' PRODUCT OF MATRICES USING MPRD:'/(3F10.2)) C GET THE FIRST COLUMN CALL CADD(C,1,B,1,3,3,0,3) WRITE(IOUT,105) ((B(I,J),J=1,3),I=1,3) 105 FORMAT(//' ADDING (2,2,0) TO THE FIRST COL. BY CADD:'/(3F10.2)) C GET A ROW CALL RCPY(B,1,R,3,3,0) WRITE(IOUT,106) R 106 FORMAT(//' FIRST ROW BY RCPY:'/3F10.2) CALL SDIV(B,2.,B,3,3,0) CALL SSUB(R,1.9,R,3,1,0) WRITE(IOUT,107) ((B(I,J),J=1,3),R(I),I=1,3) 107 FORMAT(//' DIVIDING 3X3 MATRIX BY 2. AND SUBTRACTING 1 1.9 FROM ROW VECTOR:'/(3F10.2,10X,F10.2)) CALL CTAB(B,R,A,S,3,3,0,3) WRITE(IOUT,108) ((A(I,J),J=1,3),I=1,3),S 108 FORMAT(//' TABULATING THE COLUMNS BY CTAB:'/3(3F10.2/)/ 1' NUMBER OF OLD COLUMNS USED IN NEW COLUMNS:'/4F10.2) CALL CSRT(A,T,B,3,3,0) WRITE(IOUT,109) ((B(I,J),J=1,3),I=1,3) 109 FORMAT(//' COLUMNS ALIGNED BY NUMBER OF OLD COLS.'/ 1' IN THEM VIA CSRT:'/(3F10.2)) CALL RTAB(B,T,A,U,3,3,0,3) WRITE(IOUT,110) ((A(I,J),J=1,3),I=1,3),U 110 FORMAT(//' TABULATING THE ROWS BY RTAB:'/3(3F10.2/)/ 1' NUMBER OF OLD ROWS USED IN NEW ROWS:'/4F10.2) CALL SADD(A,1.5,B,3,3,0) CALL MFUN(B,RECP,A,3,3,0) WRITE(IOUT,111) ((A(I,J),J=1,3),I=1,3) 111 FORMAT(//' ADDING 1.5 TO EACH ELEMENT AND TAKING THE RECIPROCAL:' 1/(3F10.2)) STOP END