Inverse d'une matrice

Soyez le premier à donner votre avis sur cette source.

Snippet vu 2 945 fois - Téléchargée 7 fois

Contenu du snippet

bonjour, mon projet permet a utilisateur de calculer la matrice inverse si s'est possible

PROGRAM matrice (input,output);
{ on se limite à 10x10, }
uses crt;
TYPE
  tmat= array [1..10,1..10] of real;{le tableau insertion}
VAR
  dim : integer; { dimension matrice et calculer }
  det : real;    { résultat d‚sir‚ }
  mat : tmat;    { matrice et calculer }
  appel : real;  { nb d'appels }

  procedure entree;{enregistrement des valeur du tableau}

  var lig, col : integer;
  begin
   writeln('Dimension de la matrice ?');
   readln(dim); { dim variable globale }
   while ((dim<2) and (dim<10)) do
    begin
     writeln('Dimension de la matrice ?');
     writeln('elle doit etre conprise entre 2 et 10');
     readln(dim); { verication de dim }
    end;

   writeln('Entrez les composantes :');
   for lig := 1 to dim do
    begin
     for col := 1 to dim do
      begin
       writeln('entrer la valeur de la ligne ',lig,' et la colonne  ',col,':');
       readln(mat[lig,col]);
      end;
    end;
  end;

  procedure sous_mat (mdeb : tmat; var mfin : tmat; ind, dim : integer);
  { on supprime la colonne 1 et la ligne ind pour avoir la s/mat de dim-1 }
  var col, lig, l : integer;
  begin
   l := 0;
   for lig := 1 to dim do
   begin
    if lig <> ind then
     begin
      l := l + 1;
      for col := 2 to dim do
       mfin[l,col - 1] := mdeb[lig,col];
     end;
   end;
  end;

  function detn (m : tmat; d : integer) : real;
  { det ordre d en fonction ordre d-1 }
  var result : real;
      mprim : tmat; { matrice intermédiaire }
      lig, signe : integer;
  begin
   appel := appel + 1;
   if d = 1 then detn := m[1,1]{ fin de recuteration de det par n-1 }
   else
    begin
     result := 0;
     signe := -1;
     for lig := 1 to d do
      begin
       sous_mat(m,mprim,lig,d);
       signe := -signe;{ changer de signe à chaque ligne }
       result := result + (signe * m[lig,1] * detn(mprim,d - 1))
      end;
     detn := result
    end;
  end;
  procedure inverse;
  VAR ta,mdet,mresp:tmat;
      i,j,a,b,k,m,verifk,verifm:integer;
  begin
   for i:=1 to dim do
    begin
     for j:=1 to dim do
      ta[j,i]:=mat[i,j];
    end;
    {la trans poser de la matrice}
   writeln('la transposer de la matrice est:');
   for i:=1 to dim do
    begin
     for j:=1 to dim do
       begin
        write(ta[i,j]:5:0);
       end;
     writeln;
    end;
    a:=1;
    b:=1;
    for k:=1 to dim do
     begin
      for m:=1 to dim do
       begin
        for i:=1 to dim do
         begin
          if i=k then
          else
           begin{recuperation de la matrice d'ordre dim-1}
            for j:=1 to dim do
             begin
              if j=m then
              else
               begin
                mdet[a,b]:=ta[i,j];
                a:=a+1;
               end;
             end;
            a:=1;
            b:=b+1;
           end;
         end;
         verifk:=k+m;
         verifm:=1;
         for i:=1 to verifk do
          begin
           verifm:=verifm*(-1);
          end;
        mresp[k,m]:=verifm*detn(mdet,dim-1);{recuperation de la comatrice }
        b:=1;
       end;
     end;
    writeln(' la comatrice est:');{affichage de la transposer de la comatrice}
    for i:=1 to dim do
     begin
      for j:=1 to dim do
       write(mresp[i,j]:5:0);
      writeln;
     end;
     writeln(' l''inverse de la matrice est:');{affichage de l'inverse de la comatrice}
    for i:=1 to dim do
     begin
      for j:=1 to dim do
       write(mresp[i,j]:5:0,'/',det:5:0);
      writeln;
     end;
  end;

  procedure verif(r:real);
  begin
   if r=0 then
    writeln('la matrice n''est pas inversible')
   else
    inverse;
  end;

  BEGIN { programme principal }
  clrscr;
  entree;
  det := detn(mat,dim);
  writeln('det = ',det:5:0);
  verif(det);
  readln;
END.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.