IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

[Fortran 77] Subroutine d'inverse de matrice


Sujet :

Fortran

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [Fortran 77] Subroutine d'inverse de matrice
    J'ai essayé de realiser une subroutine qui fait l'inversion d'une matrice mais, apparemment, elle ne marche pas et je n'arrive pas à trouver le problème.
    Si quelqu'un peu m'aider je serais très reconnaissant

    Voilà le code sur Fortran 77 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
    c C
    c CALCUL DE L'INVERSE D'UNE MATRICE C
    c C
    cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
            SUBROUTINE INVERSE(A,N)
            double precision A(*),c(100),ZZ,T
            integer i,j ,m ,n
    c
    c APPLICATION DE LA PROCEDURE DE GAUSS-JORDAN
     
            DO I=1,N
                 DO J=1,N
             C(i+(1-j)*n)=0.d0
              IF(I.EQ.J) C(i+(1-j)*n)=1.d0
                 ENDDO
            ENDDO
    c
    C
            DO I=1,N
              IF(A(i+(1-i)*n).EQ.0.d0) THEN ! PIVOT NUL
                  DO m=I+1,N ! RECHERCHE D'UN PIVOT NON NUL
                    IF(A(m+(1-i)*n).NE.0.d0) THEN ! PIVOT NON NUL TROUVE
                     ip = m          ! LOCALISATION DE LA LIGNE DU PIVOT
               GO TO 333
    333       DO L=I,N
                ZZ=A(i+(1-L)*n)
              A(i+(1-L)*n)=A(ip+(1-L)*n)
                A(IP+(1-L)*n)=ZZ
              ENDDO
    C
                DO KK=1,N
                ZZ=C(i+(1-KK)*n)
             C(i+(1-KK)*n)=C(IP+(1-KK)*n)
                C(IP+(1-KK)*n)=ZZ
                ENDDO
                    ENDIF
                  ENDDO
            gO TO 999
                ELSE
    C UN PIVOT NON NUL TROUVE. PERMUTATION DES LIGNES
            DO L=I,N
                ZZ=A(i+(1-L)*n)
              A(i+(1-L)*n)=A(i+(1-L)*n)
                A(I+(1-L)*n)=ZZ
              ENDDO
    C
                DO KK=1,N
                ZZ=C(i+(1-KK)*n)
             C(i+(1-KK)*n)=C(i+(1-KK)*n)
                C(I+(1-KK)*n)=ZZ
                ENDDO
              ENDIF
               DO J=1,N
              IF(J.NE.I) THEN ! LA LIGNE I RESTE INCHANGEE
                 T = A(J+(1-I)*n)/A(i+(1-I)*n)
               DO K=1,N
                 A(J+(1-K)*n)=A(J+(1-K)*n)-T*A(i+(1-K)*n)
                 C(J+(1-K)*n)=C(J+(1-K)*n)-T*C(i+(1-K)*n)
               ENDDO
             ENDIF
            ENDDO
            ENDDO
             DO I=1,N
             DO J=1,N
             C(i+(1-j)*n)=C(i+(1-j)*n)/A(i+(1-I)*n) ! LA MATRICE INVERSE
              ENDDO
              ENDDO
    999     CONTINUE
            do 800 i=1, n
                      print*,    ( C(i+(j-1)*n) , j=1, n)
    800     continue
           RETURN
           END

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 107
    Points
    107
    Par défaut
    Bonjour aussi,

    mais apparament elle marche pas
    c'est un problème algorithmique ou d'utilisation de fortran ?

    conseils (qui n'ont rien à voir avec ton problème :

Discussions similaires

  1. Inversion de matrice
    Par mhooreman dans le forum Mathématiques
    Réponses: 6
    Dernier message: 26/10/2006, 18h35
  2. Probleme d'inversion de matrice subtil
    Par babycrash dans le forum C
    Réponses: 2
    Dernier message: 02/08/2006, 17h41
  3. inversion de matrice?
    Par babycrash dans le forum C
    Réponses: 17
    Dernier message: 21/06/2006, 22h18
  4. Comment inverser une matrice H(2,2) ?
    Par fafa624 dans le forum Langage
    Réponses: 4
    Dernier message: 29/06/2005, 10h23
  5. Calculer un inverse de matrice avec boost?
    Par Clad3 dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 02/06/2005, 18h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo