A voir également:
- Calcul de l'inverse d'une matrice
- Annuaire inversé - Guide
- Ecran inversé - Guide
- Clémence souhaite faire calculer automatiquement les prix de 30 produits dans trois devises. elle a déjà saisi une formule de calcul pour le tarif du premier produit dans la première devise. corrigez sa formule afin que recopiée vers le bas puis vers la droite, elle remplisse correctement tout le tableau. - Forum Excel
- Meilleur annuaire inversé portable gratuit ✓ - Forum Mobile
- Annuaire inversé suisse ✓ - Forum Mail
18 réponses
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
2 mars 2007 à 08:51
2 mars 2007 à 08:51
template <class T>MATRIX<T>& MATRIX<T>::inverse() { if (m!=n) { __ENVOI("inversion de matrices non carré non implémenter!\n"); return *this; } MATRIX<T> MM(n),M1(n),Mi1(n),Minv(n); MM=*this; M1=MM; Mi1.Id(); Minv=Mi1; for (int i=0;i<n;i++) { for (int j=0;j<n;j++) { if (MM(i,i)==0) { __ENVOI("inversion pivot GAUSS impossible : division par 0\n"); return *this; } M1(i,j)=MM(i,j)/MM(i,i); Mi1(i,j)=Minv(i,j)/(MM(i,i)); } MM=M1; Minv=Mi1; for (int k=0;k<n;k++)// mise zéros de la colonne if (k!=i) for (int j=0;j<n;j++) { M1(k,j)=MM(k,j)-MM(i,j)*MM(k,i); Mi1(k,j)=Minv(k,j)-Minv(i,j)*MM(k,i); } MM=M1; Minv=Mi1; /*for (int k=0;k<n;k++)//mise à zéro de la ligne. ap essai : pas la peine if (k!=i) for (int j=0;j<n;j++) { M1(j,k)=MM(j,k)-MM(i,j)*MM(i,k); Mi1(j,k)=Minv(j,k)-Minv(i,j)*MM(i,k); } MM=M1; Minv=Mi1;*/ } *this=Minv; return *this; }ça inverse n'importe quel matrice carré.
précision c'est un morceau d'une classe matrice dont un des membre est la fonction inverse(). n et m sont les dimensions lignes colonnes de la matrice, Id() est une méthode qui transfiorme la matrice en matrice identité. __ENVOI() est une macro qui permet de faire des sorties et de la gestion d'erreur. à par ça, je pense que le reste du code na pas besoin d'explications.
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
2 mars 2007 à 16:29
2 mars 2007 à 16:29
C'est du C++ en effet, mais c'est vraiment pas compliquer !
je te fait des simplifications :
je te fait des simplifications :
MATRIX& MATRIX::inverse() { if (m!=n) { perror("inversion de matrices non carré non implémenter!\n"); return *this; } MATRIX MM(n),M1(n),Mi1(n),Minv(n);// déclaration de matrices de taille identique à celle à inverser MM=*this;// copie de la matrice à inverser M1=MM; Mi1.Id();//Mi1 est maintenant une matrice identité Minv=Mi1; for (int i=0;i<n;i++) { for (int j=0;j<n;j++) { if (MM(i,i)==0) { perror("inversion pivot GAUSS impossible : division par 0\n"); return *this; } M1(i,j)=MM(i,j)/MM(i,i); Mi1(i,j)=Minv(i,j)/(MM(i,i)); } MM=M1; Minv=Mi1; for (int k=0;k<n;k++)// mise zéros de la colonne if (k!=i) for (int j=0;j<n;j++) { M1(k,j)=MM(k,j)-MM(i,j)*MM(k,i); Mi1(k,j)=Minv(k,j)-Minv(i,j)*MM(k,i); } MM=M1; Minv=Mi1; } *this=Minv; return *this; }Voilà. La il est difficile de faire plus simple. C'est vraiment du basique ! Dit ce que tu ne comprend pas, ça ira mieux
christiankamewe
Messages postés
14
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 novembre 2009
8 nov. 2009 à 11:56
8 nov. 2009 à 11:56
salut ; j'ai un problème , j'ai copié ce code et je l'ai testé car j'avais besoin d'une matrice inverse , mais il ne marche pas , l'as tu vérifié ? est il correct? surtout que j'ai copié aussi le code de la matrice identité et il n'était pas bon; as tu un code me permettant de calculer la matrice inverse et le déterminant.
Mish
>
christiankamewe
Messages postés
14
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 novembre 2009
9 nov. 2009 à 04:52
9 nov. 2009 à 04:52
J'ai une solution pour toi, mais il me faudrait ton adresse e-mail, parce que le fichier est une librairie javascript plutôt volumineuse pour être affichée sur le forum. Bref, c'est comme tu veux... C'est un fichier de 56Ko... Plus la documentation de 32Ko...
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
>
christiankamewe
Messages postés
14
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 novembre 2009
9 nov. 2009 à 09:51
9 nov. 2009 à 09:51
Je l'ai déjà utilisé, il fonctionne.
Je viens même de tester sur une matrice 2*2.
Mais une erreur n'est pas à exclure.
Donne ta matrice que je teste.
Je viens même de tester sur une matrice 2*2.
Mais une erreur n'est pas à exclure.
Donne ta matrice que je teste.
christiankamewe
Messages postés
14
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 novembre 2009
>
Mish
9 nov. 2009 à 10:13
9 nov. 2009 à 10:13
merci d'avance,mon adresse email est: christiankamewe@hotmail.com; cette solution est codée en C++?
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
>
christiankamewe
Messages postés
14
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 novembre 2009
9 nov. 2009 à 10:16
9 nov. 2009 à 10:16
Il viens de dire "javascript" je suppose donc que ce n'est pas du C++. Mais je m'avance peut être beaucoup ;-)
mounir234
Messages postés
174
Date d'inscription
mercredi 28 février 2007
Statut
Membre
Dernière intervention
1 mars 2016
12
1 mars 2007 à 23:15
1 mars 2007 à 23:15
je pourais t'aider si tu veut mais tu doit me dire le fonctionement que tu ve faire parceque je me souvien pas bcp des matrice.
exemple :
l'utilisateure saisi 3 nombre le prog fait la somme et afiche le resultat
exemple :
l'utilisateure saisi 3 nombre le prog fait la somme et afiche le resultat
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
>
s2m3ouia
22 mai 2008 à 11:57
22 mai 2008 à 11:57
Tu as l'algo message 4 écris en C++ sans template. Il ne doit pas être trop dur à traduire en pascal !
Bonjour
voila , un tres bon site pour les gens qui manipule les matrice
https://wims.unicaen.fr/wims/wims.cgi?session=9W44CA83EC.2&+lang=fr&+module=tool%2Flinear%2Fmatrix.fr
voila , un tres bon site pour les gens qui manipule les matrice
https://wims.unicaen.fr/wims/wims.cgi?session=9W44CA83EC.2&+lang=fr&+module=tool%2Flinear%2Fmatrix.fr
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
MATRIX& MATRIX::inverse()
{
if (m!=n)
{
perror("inversion de matrices non carré non implémenter!\n");
return *this;
}
MATRIX MM(n),M1(n),Mi1(n),Minv(n);// déclaration de matrices de taille identique à celle à inverser
MM=*this;// copie de la matrice à inverser
M1=MM;
Mi1.Id();//Mi1 est maintenant une matrice identité
Minv=Mi1;
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
if (MM(i,i)==0)
{
perror("inversion pivot GAUSS impossible : division par 0\n");
return *this;
}
M1(i,j)=MM(i,j)/MM(i,i);
Mi1(i,j)=Minv(i,j)/(MM(i,i));
}
MM=M1;
Minv=Mi1;
for (int k=0;k<n;k++)// mise zéros de la colonne
if (k!=i)
for (int j=0;j<n;j++)
{
M1(k,j)=MM(k,j)-MM(i,j)*MM(k,i);
Mi1(k,j)=Minv(k,j)-Minv(i,j)*MM(k,i);
}
MM=M1;
Minv=Mi1;
}
*this=Minv;
return *this;
}
{
if (m!=n)
{
perror("inversion de matrices non carré non implémenter!\n");
return *this;
}
MATRIX MM(n),M1(n),Mi1(n),Minv(n);// déclaration de matrices de taille identique à celle à inverser
MM=*this;// copie de la matrice à inverser
M1=MM;
Mi1.Id();//Mi1 est maintenant une matrice identité
Minv=Mi1;
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
if (MM(i,i)==0)
{
perror("inversion pivot GAUSS impossible : division par 0\n");
return *this;
}
M1(i,j)=MM(i,j)/MM(i,i);
Mi1(i,j)=Minv(i,j)/(MM(i,i));
}
MM=M1;
Minv=Mi1;
for (int k=0;k<n;k++)// mise zéros de la colonne
if (k!=i)
for (int j=0;j<n;j++)
{
M1(k,j)=MM(k,j)-MM(i,j)*MM(k,i);
Mi1(k,j)=Minv(k,j)-Minv(i,j)*MM(k,i);
}
MM=M1;
Minv=Mi1;
}
*this=Minv;
return *this;
}
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
30 avril 2008 à 08:39
30 avril 2008 à 08:39
pourquoi réécrire ça ?
slt S.V.P vus puvez m'aider pour le calcule ledeterminant d'une matricz carée c'est pourresudre un ystemed'equation avecla methode decramer .merci à tousle monde
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
26 nov. 2007 à 08:38
26 nov. 2007 à 08:38
la question était sur l'algorithme d'une inversion de matrice pas le code en entier. Pour afficher et exécuté, il faut faire le programme qui va autour, donc voir sur autre messages.
Précision sur l'algorithme présenté ici, il s'agit de l'inversion par pivot de Gauss. La méthode consiste à prendre deux matrice, celle à inverser MM et une matricve identité Mi1. Ensuite, on applique différentes opérations à la matrice à inverser afin de la faire devenir identité. En même temps, les mêmes opérations sont appliquées à la matrice identité. à la fin, la matrice initialement identité est l'inverse cherché.
Précision sur l'algorithme présenté ici, il s'agit de l'inversion par pivot de Gauss. La méthode consiste à prendre deux matrice, celle à inverser MM et une matricve identité Mi1. Ensuite, on applique différentes opérations à la matrice à inverser afin de la faire devenir identité. En même temps, les mêmes opérations sont appliquées à la matrice identité. à la fin, la matrice initialement identité est l'inverse cherché.
gsn-mao
Messages postés
1
Date d'inscription
mardi 4 décembre 2007
Statut
Membre
Dernière intervention
4 décembre 2007
1
4 déc. 2007 à 20:01
4 déc. 2007 à 20:01
qu'est-ce que vous voulez dire au début:
if (m!=n)?
vous utilisé plusieurs fois! "!" est-ce que c'est factoriel?
if (m!=n)?
vous utilisé plusieurs fois! "!" est-ce que c'est factoriel?
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
5 déc. 2007 à 09:11
5 déc. 2007 à 09:11
hum... une petite recherche sur le langage C/C++ te permettrai de répondre à cette question.
le ! est tout simplement le not logique. Et encore, là ce n'est pas '!', mais '!=', c'est à dire différent.
a!=b est équivalent à !(a==b)
le ! est tout simplement le not logique. Et encore, là ce n'est pas '!', mais '!=', c'est à dire différent.
a!=b est équivalent à !(a==b)
ninaaa
Messages postés
1
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
12 décembre 2007
1
12 déc. 2007 à 21:02
12 déc. 2007 à 21:02
svp j ai besoin d'aide je ss encore debutante g besoin de resoudre cet algo : ecrire un algo qui permet de calculer le produit C(n,n) de deux matrices carré A(n,n) et B(n,n) sachant que : Ci,j=la somme de k=1 jusqu'à n ai,k*bk,j svp c urgent!!!!!!!!!!!!!
Voilà comment calculer un produit matriciel de type Amn * Bnp. C'est en JavaScript, c'est-à-dire un language pour faire des pages web... Il n'y a rien de plus simple. Vous copiez-collez dans bloc-notes, et vous enregistrez... Testé sous IE7. Désolé pour l'indentation irrégulière.
<html><body><textarea cols="40" rows="20" id="test"></textarea><script language="javascript">
function MISHTeK_Maths_Matrix_MatrixProduct(a,b)
{
dataA=MISHTeK_Maths_Matrix_Props(a);
if(dataA==-1)
return -1;
dataB=MISHTeK_Maths_Matrix_Props(b);
if(dataB==-1)
return -1;
if(dataA[0]!=dataB[1]) //Matrix product requieres this to be false, since sizes would be mismatching.
return -1;
var buffer=MISHTeK_Maths_Matrix_Create(dataA[1],dataB[0]);
for(j=0;j<dataA[1];j++) //Matrix a's height (for row)
for(i=0;i<dataB[0];i++) //Matrix b's width (for column)
{
//i and j specifies the location in the new matrix, while k is acting as Sigma's (sum operator) iterator.
buffer[i][j]=0;
for(k=0;k<dataA[0];k++) //Matrix a's width or b's height (same by definition)
buffer[i][j]+=a[i][k]*b[k][j];
}
return buffer;
}
function MISHTeK_Maths_Matrix_Format(mtrx)
{
data=MISHTeK_Maths_Matrix_Props(mtrx);
if(data==-1)
return -1;
var space="";
for(i=0;i<data[2]-1;i++)
space+=" ";
var buffer="";
for(j=0;j<data[1];j++)
{
buffer+="[";
for(i=0;i<data[0];i++)
{
buffer+=space.substring(0,data[2]-String(mtrx[j][i]).length)+mtrx[j][i];
if(i+1<data[0])
buffer+=" ";
}
buffer+="]";
if(j+1<data[1])
buffer+="\r\n";
}
return buffer;
}
function MISHTeK_Maths_Matrix_Create(w,h,v)
{
var buffer=new Array(h);
for(i=0;i<h;i++)
{
buffer[i]=new Array(w);
for(j=0;j<w;j++)
buffer[i][j]=v;
}
return buffer;
}
function MISHTeK_Maths_Matrix_Props(mtrx)
{
if(!MISHTeK_Maths_Matrix_IsValidMatrix(mtrx))
return -1;
var buffer=new Array(mtrx[0].length,mtrx.length,0); //width, height, max column width
for(i=0;i<mtrx.length;i++)
for(j=0;j<mtrx[0].length;j++)
if(String(mtrx[i][j]).length>buffer[2])
buffer[2]=String(mtrx[i][j]).length;
return buffer;
}
function MISHTeK_Maths_Matrix_IsValidMatrix(mtrx)
{
if(mtrx.length==undefined)
return false;
for(i=0;i<mtrx.length;i++)
{
if(mtrx[i].length!=mtrx[0].length)
return false;
for(j=0;j<mtrx[0].length;j++)
if(mtrx[i][j]==undefined || String(mtrx[i][j])=="")
return false;
}
return true;
}
function Test()
{
var Mtrx1=new Array(new Array(1,2),new Array(3,4));
var Mtrx2=new Array(new Array(5,6),new Array(7,8));
var Mtrx3=MISHTeK_Maths_Matrix_MatrixProduct(Mtrx1,Mtrx2);
document.getElementById("test").value=MISHTeK_Maths_Matrix_Format(Mtrx3);
}
</script></body></html>
Et voilà.
Pour faire fonctionner, remplacer la section en gras par votre matrice. Le premier new Array est nécessaire, il consitue l'ensemble des lignes de la matrice. Pour trois lignes, il faut mettre trois new Array() dans le new Array principal. Puis, il faut mettre des chiffres dans chaque new Array secondaire. Par défaut, il a a une matrice de 2x2 qui s'afficherait comme ceci :
La réponse du calcul s'affiche dans le textarea. Désolé encore une fois pour le code bâtard, mais je l'ai copié d'une de mes librairies de calcul matriciel, et s'aurait été vraiment trop long...
<html><body><textarea cols="40" rows="20" id="test"></textarea><script language="javascript">
function MISHTeK_Maths_Matrix_MatrixProduct(a,b)
{
dataA=MISHTeK_Maths_Matrix_Props(a);
if(dataA==-1)
return -1;
dataB=MISHTeK_Maths_Matrix_Props(b);
if(dataB==-1)
return -1;
if(dataA[0]!=dataB[1]) //Matrix product requieres this to be false, since sizes would be mismatching.
return -1;
var buffer=MISHTeK_Maths_Matrix_Create(dataA[1],dataB[0]);
for(j=0;j<dataA[1];j++) //Matrix a's height (for row)
for(i=0;i<dataB[0];i++) //Matrix b's width (for column)
{
//i and j specifies the location in the new matrix, while k is acting as Sigma's (sum operator) iterator.
buffer[i][j]=0;
for(k=0;k<dataA[0];k++) //Matrix a's width or b's height (same by definition)
buffer[i][j]+=a[i][k]*b[k][j];
}
return buffer;
}
function MISHTeK_Maths_Matrix_Format(mtrx)
{
data=MISHTeK_Maths_Matrix_Props(mtrx);
if(data==-1)
return -1;
var space="";
for(i=0;i<data[2]-1;i++)
space+=" ";
var buffer="";
for(j=0;j<data[1];j++)
{
buffer+="[";
for(i=0;i<data[0];i++)
{
buffer+=space.substring(0,data[2]-String(mtrx[j][i]).length)+mtrx[j][i];
if(i+1<data[0])
buffer+=" ";
}
buffer+="]";
if(j+1<data[1])
buffer+="\r\n";
}
return buffer;
}
function MISHTeK_Maths_Matrix_Create(w,h,v)
{
var buffer=new Array(h);
for(i=0;i<h;i++)
{
buffer[i]=new Array(w);
for(j=0;j<w;j++)
buffer[i][j]=v;
}
return buffer;
}
function MISHTeK_Maths_Matrix_Props(mtrx)
{
if(!MISHTeK_Maths_Matrix_IsValidMatrix(mtrx))
return -1;
var buffer=new Array(mtrx[0].length,mtrx.length,0); //width, height, max column width
for(i=0;i<mtrx.length;i++)
for(j=0;j<mtrx[0].length;j++)
if(String(mtrx[i][j]).length>buffer[2])
buffer[2]=String(mtrx[i][j]).length;
return buffer;
}
function MISHTeK_Maths_Matrix_IsValidMatrix(mtrx)
{
if(mtrx.length==undefined)
return false;
for(i=0;i<mtrx.length;i++)
{
if(mtrx[i].length!=mtrx[0].length)
return false;
for(j=0;j<mtrx[0].length;j++)
if(mtrx[i][j]==undefined || String(mtrx[i][j])=="")
return false;
}
return true;
}
function Test()
{
var Mtrx1=new Array(new Array(1,2),new Array(3,4));
var Mtrx2=new Array(new Array(5,6),new Array(7,8));
var Mtrx3=MISHTeK_Maths_Matrix_MatrixProduct(Mtrx1,Mtrx2);
document.getElementById("test").value=MISHTeK_Maths_Matrix_Format(Mtrx3);
}
</script></body></html>
Et voilà.
Pour faire fonctionner, remplacer la section en gras par votre matrice. Le premier new Array est nécessaire, il consitue l'ensemble des lignes de la matrice. Pour trois lignes, il faut mettre trois new Array() dans le new Array principal. Puis, il faut mettre des chiffres dans chaque new Array secondaire. Par défaut, il a a une matrice de 2x2 qui s'afficherait comme ceci :
[1 2] [3 4]
La réponse du calcul s'affiche dans le textarea. Désolé encore une fois pour le code bâtard, mais je l'ai copié d'une de mes librairies de calcul matriciel, et s'aurait été vraiment trop long...
slt ,svp si vous pouver m'aider de me donner l'algorithme en pascal qui me permet de calculer le determinant d'une matrice n*n (je veut pas l'idee mais le programm complet svp)
merci à tous
merci à tous
svp g besoin de l'algo qui fais l'inverce d'une matrice mais l'algo non pa le programme car je ne metrise pa le c++ urgentttttttttt
svp je cherche un programme de calcul matricielle tel que le produit matricielle et le calcul de l'inverse d'une matrice qui soit adaptable avec ma calculatrice c'est une casio graph25 merci pour votre aide
salut les gens, j'avoue ne pas avoir tres bien compris le fonctionnement de cet algorithme car mes connaissances en C restent assez elementaire ,alors une solutino plus facile a comprendre serait la bienvenue, merci d'avance , et merci a sniper
robertmat
Messages postés
8
Date d'inscription
dimanche 5 février 2006
Statut
Membre
Dernière intervention
25 novembre 2007
1
25 nov. 2007 à 11:53
25 nov. 2007 à 11:53
Mais, ou et comment exécuter le programme (Si c'est sur C, comment y proceder) sinon ou voir les résultats.
svp g besoin pour m'aider à réaliser un programme en pascal qui affiche et calcul le determinant d'une matrice. je sais pas comment on peut afficher la matrice. merci d'avance
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
30 nov. 2007 à 12:11
30 nov. 2007 à 12:11
pour afficher en pascal, Writeln.
Toujours est il que ce genre de question doit être ouverte dans un nouveau message.
Merci
Toujours est il que ce genre de question doit être ouverte dans un nouveau message.
Merci