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
salut
il semble évident qu'il faille faire un programme récursif en développant suivant une ligne ou une colonne ....
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 ?
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
bon sans rentrer dans les détails
si A = (aij) est une matrice d'ordre n alors
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 ....
Je vais faire ça, cependant une grande question me tourmente :p
Comment on fait les puissances en pascal ! ?
@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 :