Déterminant d'une matrice
Bonjour,
j'essaie de faire un programme de simulation des réseaux ouverts avec Turbo Pascal (TP7); j'ai besoin de faire des procédures et fonctions pour calculer les déterminants d'une matrice.
Voici le code que j'ai réalisé mais le problème est que lorsque j'exécute le programme, il ne trouve pas la valeur du déterminant exacte (il trouve une valeur différente de celle que j'ai calculé manuellement).
Si vous pouvez m'aider pour trouver l'erreur au niveau des procédures.
Code:
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
| procedure det_aux( ma:matrice;var mb:matrice;l,c:integer);
var i,j,d,e:integer;
begin
e:=1;
for i:=1 to l do
begin
d:=1;
if (i<>1) then
begin
for j:=1 to N do
if(j<>c) then
begin
mb[e,d]:=ma[i,j];
d:=d+1;
end;
e:=e+1;
end;
end;
end;
function expo(n:integer):integer;
begin
if (n mod 2=0) then expo:=1
else
expo:=-1 ;
end;
function determinant(m:matrice;l:integer):real;
var i:integer;
var m2:matrice;
var x:real;
begin
x:=0;
if(l=1) then determinant:=m[1,1]
else
begin
for i:=1 to l do
begin
det_aux(m,m2,i,1);
x:=x+(expo(i)*m[i,1]*determinant(m2,(l-1)));
end;
determinant:=x;
end;
end; |
Merci
Calcul du déterminant d'une matrice
Bonjour,
Un programme est en soi difficile à lire; il devient incompréhensible si le texte est incomplet, notamment en l'absence des déclarations préliminaires des constantes , types et variables.
Le point essentiel est l'ordre des matrices: s'agit-il d'une variable ou d'une constante ? Quelle est sa valeur ?
Il convient aussi de noter par un bref commentaire la finalité des procédures et des fonctions: la lecture s'en trouve grandement facilitée, et vous-même dans six mois aurez totalement oublié ce que vous vouliez faire par ce programme.
Enfin la vérification serait rendue plus aisée par une tabulation rigoureuse du texte, plaçant les délimitateurs de blocs < BEGIN ... END > à la même distance de la marge (et de même pour < THEN ... ELSE >; c'est contraignant et fastidieux au début, mais l'habitude est vite prise.
A titre d'exemple, une partie du texte:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
function determinant(m:matrice;l:integer):real;
var i:integer;
var m2:matrice;
var x:real;
begin
x:=0;
if(l=1) then determinant:=m[1,1]
else begin
for i:=1 to l do
begin
det_aux(m,m2,i,1);
x:=x+(expo(i)*m[i,1]*determinant(m2,(l-1)));
end;
determinant:=x;
end;
end; |