home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_progs / libs / matlab.lzh / MATLAB / MATLAB.LZH / Source / MatLab / RREF.FOR < prev    next >
Encoding:
Text File  |  1991-04-13  |  1.2 KB  |  46 lines

  1.       SUBROUTINE RREF (AR, AI, LDA, M, N, EPS)
  2.       IMPLICIT NONE
  3. C
  4.       INTEGER LDA, M, N
  5.       DOUBLE PRECISION AR(LDA,1), AI(LDA,1), EPS
  6. C
  7.       INTEGER I, J, K, L
  8.       DOUBLE PRECISION TOL, TR, TI
  9. C
  10.       INTEGER IWAMAX
  11.       DOUBLE PRECISION WASUM, DFLOAT
  12. C
  13. C
  14.       TOL = 0.0D0
  15.       DO 10 J = 1, N
  16.         TOL = DMAX1 (TOL, WASUM (M, AR(1,J), AI(1,J), 1))
  17. 10    CONTINUE
  18.       TOL = EPS*DFLOAT (2*MAX0 (M, N))*TOL
  19.       K = 1
  20.       L = 1
  21. 20    CONTINUE
  22.       IF (K.GT.M .OR. L.GT.N) RETURN
  23.       I = IWAMAX (M-K+1, AR(K,L), AI(K,L), 1)+K-1
  24.       IF (DABS (AR(I,L))+DABS (AI(I,L)).GT.TOL) GO TO 30
  25.       CALL WSET (M-K+1, 0.0D0, 0.0D0, AR(K,L), AI(K,L), 1)
  26.       L = L+1
  27.       GO TO 20
  28. C
  29. 30    CONTINUE
  30.       CALL WSWAP (N-L+1, AR(I,L), AI(I,L), LDA, AR(K,L), AI(K,L), LDA)
  31.       CALL WDIV (1.0D0, 0.0D0, AR(K,L), AI(K,L), TR, TI)
  32.       CALL WSCAL (N-L+1, TR, TI, AR(K,L), AI(K,L), LDA)
  33.       AR(K,L) = 1.0D0
  34.       AI(K,L) = 0.0D0
  35.       DO 40 I = 1, M
  36.         TR = -AR(I,L)
  37.         TI = -AI(I,L)
  38.         IF (I.NE.K) CALL WAXPY (N-L+1, TR, TI, AR(K,L), AI(K,L), LDA,
  39.      .                                         AR(I,L), AI(I,L), LDA)
  40. 40    CONTINUE
  41.       K = K+1
  42.       L = L+1
  43.       GO TO 20
  44. C
  45.       END
  46.