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