[Algorithme] déterminant de matrice
Résolu/Fermé
Salut à tous,
Quelqu'un connaît il un algorithme de calcul de déterminant (pour une matrice carrée) autre que la règle des cofacteurs ?
J'ai essayé les cofacteurs en C++ avec un algorithme récursif, c'est une horreur. Il peut mettre plus de 10 secondes à calculer le déterminant d'une matrice 10x10 ... :-(
Merci pour vos idées.
A+
Quelqu'un connaît il un algorithme de calcul de déterminant (pour une matrice carrée) autre que la règle des cofacteurs ?
J'ai essayé les cofacteurs en C++ avec un algorithme récursif, c'est une horreur. Il peut mettre plus de 10 secondes à calculer le déterminant d'une matrice 10x10 ... :-(
Merci pour vos idées.
A+
A voir également:
- Algorithme determinant matrice
- Logiciel algorithme euromillion - Télécharger - Loisirs créatifs
- Logiciel algorithme gratuit - Télécharger - Édition & Programmation
- Ecrire un algorithme qui permet de resoudre ax²+bx+c=0 pdf - Forum Algorithmes / Méthodes
- Vous ne pouvez pas modifier une partie de matrice - Forum Excel
- Algorithme euromillion excel gratuit - Forum Algorithmes / Méthodes
7 réponses
bakarim
Messages postés
32
Date d'inscription
samedi 23 août 2008
Statut
Membre
Dernière intervention
15 juillet 2009
3
22 févr. 2009 à 13:06
22 févr. 2009 à 13:06
voila le programme on pascal qui vous permet de calculer det(*par kamal bakarim *)
program determinant;
uses crt;
var n, i, j: integer;
mat : array[0..20,0..20] of real;
procedure remplire;
begin
writeln('entrez les elements du matrice');
for i := 0 to n-1 do for j := 0 to n-1 do read(mat[i, j]);
end;
procedure subst(p:integer);
var t:integer;
mat0 : array[0..20, 0..20] of real;
begin
t := -1;
for i := p+1 to n-1 do
begin
if mat[i,p] <> 0 then
begin
for j := 0 to n-1 do
begin
mat0[p,j] := mat[i,j];
mat0[i,j] := mat[p,j];
end;
t := i;
i := n + 1;
end;
end;
if t <> -1 then
begin
for i := 0 to n-1 do
begin
for j := 0 to n-1 do if (i <> p)and(i <> t) then mat0[i,j] := mat[i,j];
end;
for i := 0 to n-1 do for j := 0 to n-1 do mat[i,j] := mat0[i,j];
end;
end;
function det(e :integer) : real;
begin
det := 1;
for i := 0 to n-1 do det := det * mat[i,i];
if (e mod 2 = 1) then det := det * (-1);
end;
var t, k, e : integer;
cont : boolean;
begin
writeln(' calcule du determinant ');
writeln('entrez l''ordre du matrice dont le determinant est a calculer: ');
readln(n);
remplire();
t := 0;
k := 1;
e := 0;
cont := true;
while (k < n)and(cont)do
begin
if mat[t,t] = 0 then
begin
subst(t);
inc(e);
end;
if mat[t,t] = 0 then
begin
writeln('le determinant de cette matrice est: 00');
cont := false;
end
else
begin
for j := n-1 downto t do mat[k, j] := mat[k,j] - ((mat[k, t]*mat[t, j])/mat[t, t]);
inc(k);
if (k = n)and(t < n - 1) then
begin
inc(t);
k := t + 1;
end;
end;
end;
if cont then
writeln('le determinant de cette matrice est: ', det(e):5:3);
readln;
readln;
readln;
end.
program determinant;
uses crt;
var n, i, j: integer;
mat : array[0..20,0..20] of real;
procedure remplire;
begin
writeln('entrez les elements du matrice');
for i := 0 to n-1 do for j := 0 to n-1 do read(mat[i, j]);
end;
procedure subst(p:integer);
var t:integer;
mat0 : array[0..20, 0..20] of real;
begin
t := -1;
for i := p+1 to n-1 do
begin
if mat[i,p] <> 0 then
begin
for j := 0 to n-1 do
begin
mat0[p,j] := mat[i,j];
mat0[i,j] := mat[p,j];
end;
t := i;
i := n + 1;
end;
end;
if t <> -1 then
begin
for i := 0 to n-1 do
begin
for j := 0 to n-1 do if (i <> p)and(i <> t) then mat0[i,j] := mat[i,j];
end;
for i := 0 to n-1 do for j := 0 to n-1 do mat[i,j] := mat0[i,j];
end;
end;
function det(e :integer) : real;
begin
det := 1;
for i := 0 to n-1 do det := det * mat[i,i];
if (e mod 2 = 1) then det := det * (-1);
end;
var t, k, e : integer;
cont : boolean;
begin
writeln(' calcule du determinant ');
writeln('entrez l''ordre du matrice dont le determinant est a calculer: ');
readln(n);
remplire();
t := 0;
k := 1;
e := 0;
cont := true;
while (k < n)and(cont)do
begin
if mat[t,t] = 0 then
begin
subst(t);
inc(e);
end;
if mat[t,t] = 0 then
begin
writeln('le determinant de cette matrice est: 00');
cont := false;
end
else
begin
for j := n-1 downto t do mat[k, j] := mat[k,j] - ((mat[k, t]*mat[t, j])/mat[t, t]);
inc(k);
if (k = n)and(t < n - 1) then
begin
inc(t);
k := t + 1;
end;
end;
end;
if cont then
writeln('le determinant de cette matrice est: ', det(e):5:3);
readln;
readln;
readln;
end.
Utilisateur anonyme
26 mars 2008 à 10:21
26 mars 2008 à 10:21
salut,
je trouve un probléme pour calculer l'inverse et le determinent d'un matrice en languaga java
merci à votre aide
je trouve un probléme pour calculer l'inverse et le determinent d'un matrice en languaga java
merci à votre aide
Re-salut tout le monde,
Si jamais, j'ai trouvé un début de réponse à mon problème: je fais une décomposition LU de la matrice, puis je calcule le déterminant avec les éléments diagonaux uniquement.
C'est bien plus rapide, mais encore bien plus lent que MATLAB. Je me demande comment ils font...
*L'algèbre linéaire, quand ça te tient... ;-) *
A+
Si jamais, j'ai trouvé un début de réponse à mon problème: je fais une décomposition LU de la matrice, puis je calcule le déterminant avec les éléments diagonaux uniquement.
C'est bien plus rapide, mais encore bien plus lent que MATLAB. Je me demande comment ils font...
*L'algèbre linéaire, quand ça te tient... ;-) *
A+
zanu
Messages postés
1175
Date d'inscription
samedi 16 août 2008
Statut
Membre
Dernière intervention
14 janvier 2020
38
4 sept. 2009 à 15:06
4 sept. 2009 à 15:06
quelqu'un aurait il le code en C (recursif ou iteratif) svp?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
zanu
Messages postés
1175
Date d'inscription
samedi 16 août 2008
Statut
Membre
Dernière intervention
14 janvier 2020
38
4 sept. 2009 à 15:37
4 sept. 2009 à 15:37
je suis pas informaticien, et ça me plait juste de voir comment tourne les algorithmes. je voudrais le tester dans un compilateur C.
merci de répondre plus gentiment et de cacher de temps en temps vos caractères bestiaux.
merci de répondre plus gentiment et de cacher de temps en temps vos caractères bestiaux.
7 janv. 2010 à 00:31
8 déc. 2014 à 04:39