c******************************************************************* SUBROUTINE svd_cov(v,w,n,c) c voir "numerical receipes" 15.4 p. 673 c calcul de la matrice des covariances c entrées: c v, w: matrices de la décomposition SVD A=U W Vt données par svd_cmp c W est diagonale c sortie; c c: matrice des corrélations c Auteur: P. Morel, Département J.D. Cassini, O.C.A., Observatoire de Nice c------------------------------------------------------------------ USE mod_kind IMPLICIT NONE REAL (kind=dp), INTENT(in), DIMENSION(:,:) :: v REAL (kind=dp), INTENT(in), DIMENSION(:) :: w INTEGER, INTENT(in) :: n REAL (kind=dp), INTENT(inout), DIMENSION(:,:) :: c REAL (kind=dp),allocatable, DIMENSION(:) :: unsw REAL (kind=dp), parameter :: epsi=1.d-12 REAL (kind=dp) :: s INTEGER i, j, k c------------------------------------------------------------------ s=MAXVAL(w)*epsi !les valeurs singulieres sont >= 0 ALLOCATE (unsw(n)) WHERE(w > s) unsw=1.d0/w**2 ELSEWHERE unsw=0.d0 ENDWHERE c=0.d0 DO j=1,n DO k=1,n DO i=1,n c(j,k)=c(j,k)+v(j,i)*v(k,i)*unsw(i) ENDDO ENDDO ENDDO RETURN END SUBROUTINE svd_cov