Outils sur les matrices

0/5 (19 avis)

Vue 10 588 fois - Téléchargée 1 119 fois

Description

C'est une classe qui permet de faire différentes opérations sur des matrices de doubles. Elle est commenté pour le javadoc (fourni avec). Elle permet de faire les opérations courantes comme la multiplication, l'addition et la soustraction avec 1 autre matrice ou 1 double. Il y a également l'inversion et la transposition. Les 2 méthodes privées coff (qui calcule la matrice coffactrice) et determinant ont été faites pour la méthode inversed. Les noms sont en anglais parce que j'ai l'habitude, mais les commentaires sont en français.

Conclusion :


Ce code a été fait pour un TP de 1ième année cycle ingénieur, alors tout commentaire est le bien venu, et je pense mettre bientot un package d'outils qui vont bien (images, String de String, ...). il n'y a pas de bug connu à ce jour, mais faut faire attention au calcul du déterminant (c'est pour çà que c'est en private)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
thekwint Messages postés 21 Date d'inscription mercredi 17 mars 2004 Statut Membre Dernière intervention 29 avril 2005
14 mai 2004 à 14:31
Dommage.

Si ca intéresse qqn, je peut tjs mettre mon code ici.
Mais je crois que celui réalisé par stb doit être plus ou moins semblable et tout aussi bon. Voila tjs mon code :
(Un jour, j'essaierai de mettre un petit code avec tout ce que j'ai sur les matrices. Mais bon en attendant...)

/**
* Calcule le déterminant d'une matrice.
*
* @pre : matrice est une mattrice carrée de "double" qui n'est pas vide.
* @post : Renvoie le déterminant de la matrice matrice.
*/

public static double detMatrice(double[][] matrice) {
double result = 0;
if (matrice.length == matrice[0].length) {
if (matrice.length == 1) {
result = matrice[0][0];
}
else {if (matrice.length == 2) {
result = ((matrice[0][0] * matrice[1][1]) - (matrice[0][1] * matrice[1][0]));}
else {
for (int i = 0; i < matrice.length; i++) {
result += (((-1)^(i+1)) * matrice[i][0] * detMatrice(subMatrice(matrice, i, 0)));
}
}}
}
else {
new Exception("Le déterminant ne va pas pouvoir être calculé sur cette matrice.").printStackTrace();
System.exit(-1);
}
return result;
}

/**
* Renvoie une matrice qui correspond à la matrice matrice moins la ligne a et la colonne b
*
* @pre : matrice est une mattrice de "double" qui n'est pas vide.
* @post : Renvoie une matrice qui correspond à la matrice matrice moins la ligne a et la colonne b
*/

public static double[][] subMatrice(double[][] matrice, int a, int b) {
///// tenir compte de fait que i et j sois bons et que la taille de matrice > 1
double[][] result = new double[matrice.length - 1][matrice[0].length - 1];
for (int i = 0; i < (matrice.length - 1); i++) {
for (int j = 0; j < (matrice[0].length - 1); j++) {
if (i < a && j < b)
result[i][j] = matrice[i][j];
else if (i < a && j >= b)
result[i][j] = matrice[i][j + 1];
else if (i >= a && j < b)
result[i][j] = matrice [i + 1][j];
else
result [i][j] = matrice[i + 1][j + 1];
}
}
return result;
}



Bonne prog,
cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
14 mai 2004 à 14:17
une piqûre de rappel tout de même
(c plus fort que moi, et puis je viens de passer qques concours...)

en notant P le polynome caractèristique d'un endo u ;-p
si P est scindé dans K[X]
alors det(u) est le produit des racines de P

P n'est pas necessairement scindé dans R mais il l'est dans C
(tout polynome est scinde dans C)

ensuite,
u est trigonalisable ssi P est scindé

en gros, toute matrice est trigonalisable dans C, et on a alors le determinant egal au produit des elemets diagonaux

mais dans R, c'est plus delicat

il est envisageable d'obtenir des valeurs approchees des racines réelles de P, mais pour les racines complexes, ca tombe à l'eau
;-p

donc pour obtenir le determinant en trigonalisant la matrice, c'est foutu {;o(

je ne pense pas qu'il y ai beaucoup mieux que le developpement ligne-colone du determinant pour le caluler
dommage ;-p

A+
cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
14 mai 2004 à 13:48
Je pense que la seule chose que l'on peut obtenir avec le pivot, c'est le rang de la matrice et donc, si le determinant est nul ;-)

sinon, il faut tout de même trigonaliser la matrice -> sans calcul formel avec Maple, bon courage


A+
thekwint Messages postés 21 Date d'inscription mercredi 17 mars 2004 Statut Membre Dernière intervention 29 avril 2005
14 mai 2004 à 13:07
Définition 1.5.3 Le déterminant d'une matrice carré est défini par le déterminant de ses vecteurs colonnes.

C'est mon cas, mais je ne comprend pas ce qu'ils veulent dire.


Sinon, j'ai ceci qui va m'aider :

Corollaire Soit M une matrice triangulaire ( supérieure ou inférieure ) à coefficients dans un corps k. Alors le déterminant de M est égal au produit des éléments diagonaux de M.

A+
thekwint Messages postés 21 Date d'inscription mercredi 17 mars 2004 Statut Membre Dernière intervention 29 avril 2005
14 mai 2004 à 12:31
En fait, tu te souvient ptet s'il n'y a pas moyen de trouver le determinant d'une matrice par la methode de pivot. J'ai un algorithme qui a mon avis a une sale complexité temporelle et spatiale (j'ai une méthode récursive qui me recoupe chaque fois la matrice ne plus petite matrices) Mais j'ai cru entendre que la méthode du pivot pouvait aider a trouver le determinant. Maintenant, je me suis ptet trompé.

Ne fais pas de recherches pour moi. Mais si t'en souvient, je me ferai une joie d'implementer ca!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.