fork download
  1. PROGRAM GRAM_SCHMIDT
  2. IMPLICIT NONE
  3. INTEGER, PARAMETER :: N = 3
  4. DOUBLE PRECISION :: A(N,N), Q(N,N), R(N,N)
  5. INTEGER :: I, J, K
  6.  
  7. ! Initialize the given vectors a1, a2, a3
  8. DATA A /1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0/
  9.  
  10. ! Gram-Schmidt process
  11. DO K = 1, N
  12. Q(:,K) = A(:,K)
  13. DO I = 1, K-1
  14. R(I,K) = DOT_PRODUCT(Q(:,I), A(:,K))
  15. Q(:,K) = Q(:,K) - R(I,K) * Q(:,I)
  16. END DO
  17. R(K,K) = SQRT(DOT_PRODUCT(Q(:,K), Q(:,K)))
  18. Q(:,K) = Q(:,K) / R(K,K)
  19. END DO
  20.  
  21. ! Output the orthonormal vectors
  22. PRINT *, 'Orthonormal vectors:'
  23. DO I = 1, N
  24. PRINT *, 'q', I, ':', Q(:,I)
  25. END DO
  26.  
  27. END PROGRAM GRAM_SCHMIDT
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
 Orthonormal vectors:
 q           1 :  0.57735026918962584       0.57735026918962584       0.57735026918962584     
 q           2 :  0.40824829046386280       0.40824829046386280      -0.81649658092772626     
 q           3 :  0.70710678118654735      -0.70710678118654768       -9.4205547521026495E-016