Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1434 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Mathématiques : calcul de détérminant de matrice

n°825816
lunarnet76
Posté le 18-08-2004 à 14:11:11  profilanswer
 

Reprise du message précédent :
Ben en fait l avantage c'est que j'ai appris Gauss en cour donc le but c'était de l'utiliser, sinon mon algo marche pour NxN mais la c sure que aprés 10x10 le pc est totalement dépassé par les valeurs qu'il a, mais il suffit d avoire un determinant 4x4 et hop c foutu pour peu que les nombres soit premier genre 4665*4651*5999*4566*9 et c fini, en fait faudrai juste que je limite les nombres a 3 chifres comme ca plus de problémes!!!!
 
ps: ces nombres ne sont pas premiers mais g pas que ca a faire d'en trouver lol, et en fait le probleme c'est que vu qu'ils sont premiers ils sont irreductibles (mes matrices sont composés de fraction)


Message édité par lunarnet76 le 18-08-2004 à 14:13:45
mood
Publicité
Posté le 18-08-2004 à 14:11:11  profilanswer
 

n°825841
Ace17
Posté le 18-08-2004 à 14:43:49  profilanswer
 

lunarnet76 a écrit :

sinon mon algo marche pour NxN mais la c sure que aprés 10x10 le pc est totalement dépassé par les valeurs qu'il a


Tu veux dire que le déterminant est erroné, ou bien alors il trouve carrément pas?

n°825844
Ace17
Posté le 18-08-2004 à 14:46:31  profilanswer
 

moktar1er a écrit :

certes, mais vu qu'on peut calculer facilement le determinant comme ça?
on s'arrête à cette phase là non?


Quand t'as A = L * U, ok pour dire que det A = det L * det U et que ces deux determinants sont faciles a calculer. Mais le probleme c'est que toute la décomposition est basée sur le fait que A est inversible, et si c'est pas le cas tu peux meme pas trouver L et U de maniere systématique :-/
 
edit : d'ailleurs, c'est meme pas suffisant que la matrice soit inversible, la condition nécessaire et suffisante, c'est que tous les mineurs principaux soient non nuls


Message édité par Ace17 le 18-08-2004 à 14:48:25
n°825851
Moktar1er
No one replies...
Posté le 18-08-2004 à 14:51:13  profilanswer
 

argh, faudrait que je recherche la partie là dessus dans les numrecipes, il me manque un truc là...

n°825860
lunarnet76
Posté le 18-08-2004 à 14:56:35  profilanswer
 

Ace17 a écrit :

Tu veux dire que le déterminant est erroné, ou bien alors il trouve carrément pas?


le determinant est erroné car l'un des nombres est tronqué a la valeur maximum des int ... parce que logiquement il devrait trouver 2 nombre différents (pr pas prendre des nombres grand on va dire 22/2) ce qui devrai donner 11/1 mais comme l ordi a arrété la valeur de 22 a par exemple -6254616165 et bien le pc a beau continué a reduire la fraction il trouve n'importe quoi

n°825865
Moktar1er
No one replies...
Posté le 18-08-2004 à 15:01:45  profilanswer
 

http://www.library.cornell.edu/nr/bookcpdf/c2-3.pdf
bon... rien de précisé quant à la gueule de la matrice avant la décomposition
sinon au pire, tout le chapitre 2
http://www.library.cornell.edu/nr/cbookcpdf.html
devrait faire l'affaire :D

n°825882
lunarnet76
Posté le 18-08-2004 à 15:20:58  profilanswer
 
n°825999
Osama
Posté le 18-08-2004 à 18:05:47  profilanswer
 

Si tu veux pas te faire chier tu utilises LAPACK [:sweet purple]

n°826075
Ace17
Posté le 18-08-2004 à 19:51:11  profilanswer
 

moktar1er >> http://perso.wanadoo.fr/mathprepa/classpad/LU/LU1.html
Avec les démos, pour si t'es pas convaincu :D
rectification : la décomposition L.U de A n'existe pas toujours mais moyennant une permutation des lignes de A on peut se débrouiller pour retrouver une matrice LU décomposable; Donc faudra juste penser a multiplier le déterminant cherché par (-1)^epsilon(P) ...


Message édité par Ace17 le 18-08-2004 à 22:16:20
n°826151
Ace17
Posté le 18-08-2004 à 22:22:42  profilanswer
 

Exemple :  
Décomposer A :
[0, 4, 2, 3]
[1, 1, 3, 4]
[2, 1, 2, 5]
[3, 1, 2, 6]
 
L'algo de décomposition donne U valant :  (det(L) vaut 1 donc on s'en occupe pas)
[1, 1, 3, 4]
[0, 4, 2, 3]
[0, 0, -7/2, -9/4]
[0, 0, 0, -9/14]
 
Donc si on fait 1 * 4* (-7/2) * (-9/14) on trouve 9.
 
Or det(A) vaut -9. C'est parce que le déterminant de la matrice de permutation utilisée vaut -1.

mood
Publicité
Posté le 18-08-2004 à 22:22:42  profilanswer
 

n°826254
PtitKiki
Le Vrai
Posté le 18-08-2004 à 23:27:59  profilanswer
 

Si vous voulez jpeux poster mon code de facto LU que j'ai fait y'a qques temps, lunarnet si ca t'interesse, pr ensuite calculer ton determinant super facilement.
Les nombres sont codés sur des doubles, t'auras plus le probleme de place que tu as eu avec les entiers.


Message édité par PtitKiki le 18-08-2004 à 23:28:29
n°826263
Moktar1er
No one replies...
Posté le 18-08-2004 à 23:31:49  profilanswer
 

Ace17> :jap:
il faudra que je décortique à fond le numrecipes, mais je ne me rappelle vraiment pas avoir vu ça dedans
mais j'ai compris :D

n°826402
el muchach​o
Comfortably Numb
Posté le 19-08-2004 à 01:04:05  profilanswer
 

lunarnet76 a écrit :

le determinant est erroné car l'un des nombres est tronqué a la valeur maximum des int ... parce que logiquement il devrait trouver 2 nombre différents (pr pas prendre des nombres grand on va dire 22/2) ce qui devrai donner 11/1 mais comme l ordi a arrété la valeur de 22 a par exemple -6254616165 et bien le pc a beau continué a reduire la fraction il trouve n'importe quoi


 
Tu utilises des long int, des double (voire long double) au lieu d'int et tu as un résultat numérique presque exact. Si tu veux le résultat exact fractionnel, il te faut développer une classe de calcul sur grands entiers (ça existe déjà, mais c'est certainement un bon exercice).


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°827372
lunarnet76
Posté le 20-08-2004 à 00:51:19  profilanswer
 

en fait j avé penser a tout rechanger mes int en double mais ca me fais chier car ca changer bcp de chose, sinon je veux bien surtt qu'on me donne un lien sur la décomposition LU mais juste la partie mathématique, a la limite si quelqû'un a un cour deja fait !!!!
Mais euh apparement (vu l'exemple de Ace17) la décomposition LU ca a pas l'air bien plus rapide que gauss... donc en quoi c'est meilleur??

n°827374
lunarnet76
Posté le 20-08-2004 à 00:53:40  profilanswer
 

el muchacho a écrit :

Tu utilises des long int, des double (voire long double) au lieu d'int et tu as un résultat numérique presque exact. Si tu veux le résultat exact fractionnel, il te faut développer une classe de calcul sur grands entiers (ça existe déjà, mais c'est certainement un bon exercice).


 
lol c vrai que ce serait pas mal si on pouvait utiliser des grands entiers mais ca me parait plus sympa de faire un truc qui empeche les gens d'utiliser des nombres trop grand, vous etes sure que y a pas une fonction qui permet de savoir quand un int est overflowed????  
sinon je peut toujours juste interdire les nombres supérieurs a 4 chiffres et puis voila plus de problemes!

n°827417
Ace17
Posté le 20-08-2004 à 08:26:24  profilanswer
 

lunarnet76 a écrit :

en fait j avé penser a tout rechanger mes int en double mais ca me fais chier car ca changer bcp de chose


La prochaine fois tu feras un typedef... :p  
 

lunarnet76 a écrit :

sinon je veux bien surtt qu'on me donne un lien sur la décomposition LU mais juste la partie mathématique, a la limite si quelqû'un a un cour deja fait !!!!


http://perso.wanadoo.fr/mathprepa/classpad/LU/LU1.html

n°827420
Moktar1er
No one replies...
Posté le 20-08-2004 à 08:38:35  profilanswer
 

lunarnet76 a écrit :

en fait j avé penser a tout rechanger mes int en double mais ca me fais chier car ca changer bcp de chose, sinon je veux bien surtt qu'on me donne un lien sur la décomposition LU mais juste la partie mathématique, a la limite si quelqû'un a un cour deja fait !!!!
Mais euh apparement (vu l'exemple de Ace17) la décomposition LU ca a pas l'air bien plus rapide que gauss... donc en quoi c'est meilleur??


tu as été voir les liens que je t'ai filé?  :heink:

n°828209
lunarnet76
Posté le 21-08-2004 à 00:58:33  profilanswer
 

hug ... Moi avoir besoin repos car moi plus lire bien lol
j avais pas vu ton lien,merci!!!


---------------
!jb!
n°828239
lunarnet76
Posté le 21-08-2004 à 03:46:42  profilanswer
 

Ca y est g lu le lien, et ben c ... méchant, c'est sure que c'est beaucoup plus rapide pr des grosses matrices! aprés le rang 5 quoi!
Mais je doit dire que c'est loin d'etre a mon niveau en maths, j'ai vraiment pas tout compris et je m'emmele pas mal donc je crois que j'essaierais si je trouve une explication plus lucide sinon j'essaierai pas lol  :pt1cable:  
 :D  
 :bounce:  :bounce:  :bounce:
ps: je suis qu'en terminale S moi ! lol


Message édité par lunarnet76 le 21-08-2004 à 03:47:10

---------------
!jb!
n°828255
Ace17
Posté le 21-08-2004 à 09:38:27  profilanswer
 

Tu sais lire du Maple? J'ai un code source de décomposition LU que j'ai rédigé il y a longtemps

n°828361
lunarnet76
Posté le 21-08-2004 à 14:11:35  profilanswer
 

ben pas trop lol, mais g deja utilisé maple donc ca devrai aller kan mem!!!


---------------
!jb!
n°828362
lunarnet76
Posté le 21-08-2004 à 14:12:37  profilanswer
 

ps: y a un moyen de changer la taille de la console??? car sinon je ne peut pas afficher les matrices aprés 6x6 sans que ca change de ligne au milieu des lignes de la matrice !Lol


---------------
!jb!
n°828364
Ace17
Posté le 21-08-2004 à 14:15:25  profilanswer
 

Pour permuter ta matrice avant de décomposer :


Permute := proc(A)
>  
>    local n, An, Bn, P, Qn, R, Q;
>    
>    n := rowdim(A) - 1;
>  
>    if n = 0 then
>       return diag(1);
>    else
>       An := submatrix(A, 1..n, 1..n);
>  
>       if det(An) = 0 then
>          R := swaprow(diag(1$(n+1)), n+1, 1);
>       else
>          R := diag(1$(n+1));
>       end if;
>  
>       Bn := submatrix(R &* A, 1..n, 1..n);
>  
>       Qn := Permute(Bn);
>       Q := stackmatrix(augment(Qn, matrix(n, 1, [0$n])), matrix(1, n+1, [0$n, 1]));
>       return evalm(Q &* R);
>    end if;
> end proc:


 
Pour décomposer :


Decomp := proc(A)
>    local n, L, U, i, j, k;
>  
>    n := rowdim(A);
>    L := matrix(n, n, [0$(n*n)]);
>    U := matrix(n, n, [0$(n*n)]);
>  
>    for i from 1 to n do
>       for j from 1 to n do
>          if i <= j then
>             U[i, j] := A[i, j];
>             for k from 1 to i-1 do
>                U[i, j] := U[i, j] - L[i,k] * U[k,j];
>             end do;
>          else
>             L[i, j] := A[i, j];
>             for k from 1 to j-1 do
>                L[i, j] := L[i, j] - L[i,k] * U[k,j];
>             end do;
>             L[i, j] := L[i, j] / U[j, j];
>          end if;
>       end do;
>    end do;
>  
>    for i from 1 to n do
>       L[i, i] := 1;
>    end do;
>  
>    return L, U;
> end proc:

n°828366
lunarnet76
Posté le 21-08-2004 à 14:19:18  profilanswer
 

euh ... je vais devenir fou lol,les maths d avant me parraissait plus simple!!!
Si quelqu'un a surtt un lien vers un site de maths ou c bien expliqué je suis preneur, sinon laissez tomber merci lol :bounce:


---------------
!jb!
n°828376
Ace17
Posté le 21-08-2004 à 14:58:03  profilanswer
 

T'as qu'a traduire betement le code Maple en C...
Quant a la théorie sur la décomposition LU, c'est le meilleur lien francais que j'ai trouvé

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
librairires mathématiquesCalcul de l'âge en sql sous access
Bases d'IA, mathématiques et statistiquescalcul le temps de l installation
matrice binaire[Sybase] calcul de date
PB avec une valeur NULL dans un calcul sous SQLalgo du calcul formel du determinant matrice symetrique pas positive
Plus de sujets relatifs à : Mathématiques : calcul de détérminant de matrice


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR