[Algorithme] déterminant de matrice
Résolu/Fermé
Omega_55
-
Misheru tin -
Misheru tin -
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
- Vous ne pouvez pas modifier une partie de matrice ✓ - Forum Excel
- Algorithme euromillion excel gratuit ✓ - Forum VB / VBA
- Algorithme ajout rapide snapchat ✓ - Forum Snapchat
- Ecrire un algorithme qui permet de resoudre ax²+bx+c=0 pdf - Forum Algorithmes / Méthodes
7 réponses
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.
Hsissen3
C'est quoi: Inc(...)
Misheru tin
>
Hsissen3
inc() sa veux dire incrementé de
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+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.