Inscription / Connexion Nouveau Sujet
Niveau Master
Partager :

Algorithme Pascal - déterminant matrice

Posté par
Elody
25-01-15 à 15:04

Salut,
J'ai pour mission de créer un algorithme sous pascal -avec lazarus- permettant de trouver le déterminant d'une matrice d'ordre n et je sais pas du tout comment m'y prendre !


Je sais que
        if N=1 then
                Det:=A[N,N];     //our function is transferred to the number of array
        if N=2 then
                Det:=A[1,1]*A[2,2]-A[2,1]*A[1,2];    //our function is transferred to the number of array
        if N=3 then
               Det:=A[1,1]*A[2,2]*A[3,3]+A[2,1]*A[3,2]*A[1,3]+A[1,2]*A[2,3]*A[3,1]
                    -A[3,1]*A[2,2]*A[1,3]-A[3,2]*A[2,3]*A[1,1]-A[2,1]*A[1,2]*A[3,3];  

Du coup je me demandais quelle méthode serait la mieux pour N>3 pour la transcrire en Pascal ^^ j'ai trouvé des programmes tout faits sur internet mais de un ils ne marchent pas j'ai toujours des erreurs, et de deux je comprends pas ce qu'ils ont fait et c'est pas le but que je recherche !

Sinon j'ai

Program determinant;        
type matrix=array[1..10,1..10] of real;
var                      
        A:matrix;         //matrice de base
        I,J,N:integer;    // I : lignes J : colonnes N:rang de la matrice
        D:real;           //determinant    

begin
        Write('Put the order matrix ');

        readln(N);                    
    
        for I:=1 to N do
        begin
                writeln('line ',I:2);
                for J:=1 to N do                
                        readln(A[I,J]);
        end;

        D:=Det(A,N);
        Writeln('Determinant = ',D:2:1);
        readln;

end.

Je sais pas si c'est correct ou si j'ai des trucs a rajouter ou quoi... bref je voudrais bien un coup de pouce =) merci

Posté par
carpediem
re : Algorithme Pascal - déterminant matrice 25-01-15 à 15:50

salut

il semble évident qu'il faille faire un programme récursif en développant suivant une ligne ou une colonne ....

Posté par
carpediem
re : Algorithme Pascal - déterminant matrice 25-01-15 à 15:51

mais bon ça va bouffer de la mémoire !!!! de façon quasi factorielle ...

Posté par
Elody
re : Algorithme Pascal - déterminant matrice 25-01-15 à 16:50

arf... Bon en fait j'ai un programme :


PROGRAM determ (input,output);


TYPE
  tmat = array [1..10,1..10] of real;

VAR
  N : integer; { dimension de la matrice }
  det : real;    { déterminant }
  mat : tmat;    { matrice à calculer }
   I,J : integer ;

procedure sous_mat (A : tmat; var B : tmat; ind, N : integer);
{ on supprime la colonne 1 et la ligne ind pour avoir la s/mat de N-1 }
//A matrice de debut B matrice de fin
var J, I, L : integer;

begin
  L := 0;
  for I := 1 to N do
  begin
    if I <> ind then
  begin
       L := L + 1;
       for J := 2 to N do
         B[L,J - 1] := A[I,J]
  end
  end
end;                    // On a mtn la sous matrice

function detn (M : tmat; Nm : integer) : real; // M : matrice Nmrdre de la matrice
{ On chercher l'ordre Nm de la sous matrice en fonction de l'ordre Nm-1 & determinant detn}

var Res : real;   // determinant
    mprim : tmat; { matrice intermédiaire }
    I, S: integer;  // I lignes J colonnes S signe des lignes
begin
  if Nm = 1
  then detn := M[1,1];
  if Nm = 2
  then detn:=M[1,1]*M[2,2]-M[2,1]*M[1,2];
  if Nm=3
  then detn:=M[1,1]*M[2,2]*M[3,3]+M[2,1]*M[3,2]*M[1,3]+M[1,2]*M[2,3]*M[3,1]
  -M[3,1]*M[2,2]*M[1,3]-M[3,2]*M[2,3]*M[1,1]-M[2,1]*M[1,2]*M[3,3]
  else
  begin
    Res := 0;
    S := -1;
    for I := 1 to Nm do
    begin
      sous_mat(M,mprim,I,Nm);
    S:= -S;    //change sign every lines

      Res := Res + (S * M[I,1] * detn(mprim,Nm - 1))
    end;
    detn := Res
  end
end;

BEGIN //principal program

        Write('Matrix order ');
        readln(N);
        for I:=1 to N do
        begin
                writeln('line ',I:2);
                for J:=1 to N do
                        readln(mat[I,J]);
        end;

        det:=detn(mat,N);   //find the determinant
        Writeln('Determinant: ',det:2:1);
        readln;
END.                                        

JE me suis basée sur un programme truové sur un autre site sauf qu'il se lance 2 fois et qu'il me trouve jamais le bon déterminant c'est désespérant ... quelqu'un saurait pourquoi ?

Posté par
Elody
re : Algorithme Pascal - déterminant matrice 25-01-15 à 17:39

J'ai trouvé l'erreur mais je sais pas si mon programme est juste toujours ^^

En fait apres if Nm=3 au lieu de mettre else j'ai mis
if Nm>3 then
begin

Res:=0
S=-1

Posté par
carpediem
re : Algorithme Pascal - déterminant matrice 25-01-15 à 17:57

bon sans rentrer dans les détails

si A = (aij) est une matrice d'ordre n alors \det a = \sum_1^n (-1)^{1 + i}a_{1i} \det A_{1i}

si je le développe suivant la première colonne et où A_1i est la matrice A dans laquelle on a retiré la première colonne et la ligne i ....

je crée donc la fonction (récursive) demandant les arguments mat et n (ordre de la matrice mat)

fonction det (mat, n)

fonction mat(1, i) (mat, n)  (sous-fonction)
  mat (1, i) = "la matrice obtenue à partir de mat en supprimant la colonne 1 et la ligne i"
  (à toi de la créer)

si n = 1 alors det = a

sinon
   s = 0
   pour i = 1 à n
      s = s + (-1)1 + i mat(1, i)1i det (mat(1, i), n - 1)
   det = s
end.


en gros ....

Posté par
Robot
re : Algorithme Pascal - déterminant matrice 25-01-15 à 18:10

@carpediem : d'habitude, le premier indice est le numéro de ligne.

Posté par
Elody
re : Algorithme Pascal - déterminant matrice 25-01-15 à 18:13

Je vais faire ça, cependant une grande question me tourmente :p

Comment on fait les puissances en pascal ! ?

Posté par
carpediem
re : Algorithme Pascal - déterminant matrice 25-01-15 à 19:22

@Robot :: oui bien sur ... je mets mélangé les pinceaux ....


pour la puissance me rappelle plus si ça existe ... mais une procédure prend deux lignes à peine ....

puissance (a, n)
  si n = 0 alors puissance = 1
  sinon puissance = a * puissance (a, n - 1)
end.

...

rem :: vu que c'est les puissances de -1 on peut faire autrement .... vu qu'on commence toujours par 1 quand on développe suivant la première ligne ou colonne ....



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1742 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !