A voir également:
- Inverse matrice excel
- Liste déroulante excel - Guide
- Annuaire inversé - Guide
- Word et excel gratuit - Guide
- Ecran inversé - Guide
- Déplacer colonne excel - Guide
18 réponses
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.
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
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.
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
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;
}
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
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é.
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?
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)
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
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