elpdr1
C ELPDR1 SOURCE CHAT 05/01/12 23:37:16 5004 C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-B,D-H,O-Z) IMPLICIT COMPLEX*16(C) C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C RESOLUTION D'UN SYSTEME LINEAIRE COMPLEXE CA1 * CX = CV C C PAR LA METHODE DE GAUSS AVEC CALCUL DE LA TRIANGULARISATION C C ET STOCKAGE DE CELLE CI DANS LES VECTEURS IPIVO, JPIVO ET IAUX C C C PARAMETRES : C C CA1(N*N) : MATRICE (N*N) REPRESENTANT LE SYSTEME LINEAIRE C CV(N) : SECOND MEMBRE C IAUX(N) : TABLEAU DE TRAVAIL QUI DONNE L'ORDRE DES INCONNUES C C SORTIE : C C CX : SOLUTION C C AUTEUR : DE LANGRE C DATE : 08 DEC 1989 C C ==================================================================== C COMPLEX*16 CA1(N,*),CV(*),CX(*) INTEGER IAUX(*),IPIVO(*),JPIVO(*) EPS = 1.D-12 C DO 10 I=1,N IAUX(I) = I 10 CONTINUE C 1. TRIANGULARISATION C BOUCLE SUR LES MATRICES EMBOITEES C DO 100 ILIG =1,N C C 1.1 RECHERCHE DU PIVOT C XPIV =0.D0 IPIV =0 JPIV =0 DO 110 I = ILIG,N DO 111 J = ILIG,N IF( ABS ( CA1(I,J)) .GT.XPIV ) THEN IPIV= I JPIV= J XPIV =ABS ( CA1(I,J)) ENDIF 111 CONTINUE 110 CONTINUE C IPIVO(ILIG) = IPIV JPIVO(ILIG) = JPIV C IF(XPIV .LE.EPS) THEN WRITE(6,*)'RETURN DANS ELPDR1',XPIV,ILIG RETURN ENDIF C C 1.2 ON MET LA LIGNE NUMERO IPIV EN ILIG C ET MEME CHOSE AU SECOND MEMBRE C DO 120 J=ILIG,N CAUX = CA1(IPIV,J) CA1(IPIV,J)= CA1(ILIG,J) CA1(ILIG,J)= CAUX 120 CONTINUE C CAUX = CV(IPIV) CV(IPIV)= CV(ILIG) CV(ILIG)= CAUX C C 1.3 ON MET LA COLONNE NUMERO JPIV EN JLIG= ILIG C ET ON NOTE CELA DANS LE TABLEAU IAUX C * ERREUR SUR BORNES 130 CORRIGEE C JLIG=ILIG DO 130 I=1 ,N CAUX = CA1(I,JPIV) CA1(I,JPIV)= CA1(I,JLIG) CA1(I,JLIG)= CAUX 130 CONTINUE I0 = IAUX (JPIV) IAUX(JPIV) = IAUX (JLIG) IAUX(JLIG) = I0 C C 1.4 REDUCTION PAR SOUSTRACTION DES LIGNES ENTRE-ELLES C ET MEME CHOSE AU SECOND MEMBRE C DO 140 I= ILIG + 1 ,N CAUX = CA1(I,ILIG) / CA1(ILIG,ILIG) DO 141 J=ILIG ,N CA1(I,J)= CA1(I,J)- CAUX * CA1 (ILIG,J) 141 CONTINUE CV(I) = CV(I)- CAUX * CV(ILIG) 140 CONTINUE C C FIN BOUCLE SUR LES MATRICES EMBOITEES 100 CONTINUE C C 2. SUBSTITUTION EN REMONTANT C CV(N) = CV(N) / CA1 (N,N) DO 200 I= 2,N IN = N + 1 - I DO 210 K= 1,I-1 KN = N + 1 - K CV(IN) = CV(IN) - CA1 (IN,KN)* CV(KN) 210 CONTINUE CV(IN) = CV(IN) / CA1 (IN,IN) 200 CONTINUE C C 3. ON REMET LES INCONNUES A LA BONNE PLACE C DO 300 I= 1,N CX(IAUX(I)) = CV(I) 300 CONTINUE C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales