QR decomposition using Modified Gram-Schmidt method
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=dp), | intent(in), | DIMENSION(:, :) | :: | A | ||
real(kind=dp), | intent(out), | DIMENSION(SIZE(A, 1) ,SIZE(A, 2)) | :: | Q | ||
real(kind=dp), | intent(out), | DIMENSION(SIZE(A, 1) ,SIZE(A, 2)) | :: | R |
SUBROUTINE QR_Gram_Schmidt_Modified_decomposition(A, Q, R) REAL(dp), DIMENSION(:, :), INTENT(IN) :: A REAL(dp), DIMENSION(SIZE(A, 1) ,SIZE(A, 2)), INTENT(OUT) :: Q, R REAL(dp), DIMENSION(SIZE(A, 1),SIZE(A, 2)) :: u INTEGER :: N, i, j N = SIZE(A,1) u = A Q = 0.d0 R = 0.d0 DO i = 1, N R(i, i) = NORM2(u(:, i)) Q(:, i) = u(:, i)/R(i, i) DO j = i+1, N R(i, j) = DOT_PRODUCT(Q(:, i),u(:, j)) u(:, j) = u(:,j) - R(i, j)*Q(:, i) END DO END DO END SUBROUTINE QR_Gram_Schmidt_Modified_decomposition