Outils sur les matrices

Soyez le premier à donner votre avis sur cette source.

Vue 10 083 fois - Téléchargée 1 103 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
Messages postés
21
Date d'inscription
mercredi 17 mars 2004
Statut
Membre
Dernière intervention
29 avril 2005

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,
Messages postés
333
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
23 novembre 2009
1
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+
Messages postés
333
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
23 novembre 2009
1
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+
Messages postés
21
Date d'inscription
mercredi 17 mars 2004
Statut
Membre
Dernière intervention
29 avril 2005

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+
Messages postés
21
Date d'inscription
mercredi 17 mars 2004
Statut
Membre
Dernière intervention
29 avril 2005

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!
Afficher les 19 commentaires

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.