begin process at 2008 07 06 16:54:34
1 205 660 membres
227 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

INVERSION DE MATRICE


Information sur la source



Description

Ce code permet d'inverser une matrice carrée (la modification du code pour une matrice non carrée est pas très difficile) qui doit au moins être diagonale (pas de zéro sur la diagonale).

La fonction reçoit en paramètre la matrice (Mat) et la taille de celle-ci (NbElement). Le résultat est remis dans la matrice fournie en paramètre.

Source

  • void InvdiagMat(int NbElement, float **Mat)
  • {
  • float ** temp;
  • int i;
  • temp=new float*[NbElement];
  • for(i=0;i<NbElement;i++)
  • {
  • temp[i]=new float [NbElement];
  • for(int j=0;j<NbElement;j++)
  • {
  • temp[i][j]=0;
  • }
  • }
  • for(i=0;i<NbElement;i++)
  • {
  • for(int j=0;j<NbElement;j++)
  • {
  • temp[i][i]=1/Mat[i][i];
  • if(j!=i)
  • {
  • temp[i][j]=-Mat[i][j]/Mat[i][i];
  • }
  • for(int k=0;k<NbElement;k++)
  • {
  • if(k!=i)
  • {
  • temp[k][i]=Mat[k][i]/Mat[i][i];
  • }
  • if(j!=i &&k!=i)
  • {
  • temp[k][j]=Mat[k][j]-Mat[i][j]*Mat[k][i]/Mat[i][i];
  • }
  • }
  • }
  • for(int i=0;i<NbElement;i++)
  • {
  • for(int j=0;j<NbElement;j++)
  • {
  • Mat[i][j]=temp[i][j];
  • }
  • }
  • }
  • }
void InvdiagMat(int NbElement, float **Mat)
{
	float ** temp;
	int i;
	temp=new float*[NbElement];
	for(i=0;i<NbElement;i++)
	{
		temp[i]=new float [NbElement];
		for(int j=0;j<NbElement;j++)
		{
			temp[i][j]=0;
		}
	}

	for(i=0;i<NbElement;i++)
    {
	 	
	 	for(int j=0;j<NbElement;j++)
		{
		 		temp[i][i]=1/Mat[i][i];
		 		if(j!=i)
	    		{
					temp[i][j]=-Mat[i][j]/Mat[i][i];
				}
		 		for(int k=0;k<NbElement;k++)
		 		{
		 		    
					if(k!=i)
					{
		 			 		temp[k][i]=Mat[k][i]/Mat[i][i];
					}
					if(j!=i &&k!=i)
					{
					 		temp[k][j]=Mat[k][j]-Mat[i][j]*Mat[k][i]/Mat[i][i];
                    }		
				}
			 		
		}
		for(int i=0;i<NbElement;i++)
    	{
            for(int j=0;j<NbElement;j++)
            {
                Mat[i][j]=temp[i][j];
            }
        
       }
	}
}
  • signaler à un administrateur
    Commentaire de grogan_17 le 15/04/2007 22:17:57

    Juste comme ça, très théoriquement... je crois pas que tu sois capable de modifier ton code pour inverser les matrices non-carrées car elle ne s'inverse pas vraiment. En effet, une matrice est inversible si et seulement si son déterminant est non-nulle. Donc, elle doit avoir un déterminant. Cette notion n'est cependant pas définie pour les matrices non-carrées.

  • signaler à un administrateur
    Commentaire de vinc1008881 le 15/07/2007 20:23:43

    "Ce code permet d'inverser une matrice carrée (la modification du code pour une matrice non carrée est pas très difficile) qui doit au moins être diagonale (pas de zéro sur la diagonale)."

    Je n'ai jamais vu de matrice rectangle (non carré) diagonales....

Ajouter un commentaire

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Boutique

Boutique de goodies CodeS-SourceS