Matrice diagonale [Résolu]

Signaler
Messages postés
64
Date d'inscription
vendredi 6 mai 2011
Statut
Membre
Dernière intervention
8 mai 2013
-
Messages postés
64
Date d'inscription
vendredi 6 mai 2011
Statut
Membre
Dernière intervention
8 mai 2013
-
bonjour,

je dois transformer un vecteur en matrice diagonale, en langage c, quelqu'un a une idée,
exp:
a[3]={1,2,3}
resultat:
matrice diagonale= 1 0 0
0 2 0
0 0 3

merci par avance
A voir également:

5 réponses

Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
- Tu prends ton vecteur, et tu récupères sa taille.
- Tu crées un tableau de la taille de ton vecteur qui contient dans chaque case un tableau de la taille de ton vecteur.
(Tu as donc une matrice carré).
- Tu affectes chacun des éléments de ton vecteur à ta diagonale (à la positon [i][j], avec i et j qui s'incrémente à chaque tour).

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
33
Date d'inscription
jeudi 30 septembre 2010
Statut
Membre
Dernière intervention
24 novembre 2011

Salut tlm!!!
Pour ton exemple:
a[3]={1,2,3}
Ben il te suffit de déclarer une matrice 3x3 initialement nulle, par exemple Mat[3][3], ensuite tu fais:
for (int i=0; i<3; i++)
Mat[i][i]=a[i];
Messages postés
64
Date d'inscription
vendredi 6 mai 2011
Statut
Membre
Dernière intervention
8 mai 2013

je vous remercie tous
mon code étais juste je me suis trompé lors de l'affichage, j'ai oublié de faire une boucle pour cela.


j'ai une question
j'ai trouvé un code, sur le net, de matrice inverse, es que c possible d'utiliser ce code(matrice inverse) dans un autre code pour calculer la matrice inverse de deux matrices ?

je ne sais pas si je suis claire
sinon poser moi des question pr eclaircir plus

merci par avance
Messages postés
33
Date d'inscription
jeudi 30 septembre 2010
Statut
Membre
Dernière intervention
24 novembre 2011

Salut a tous,
T'as un code qui calcule une matrice inverse que tu veux utiliser pour calculer l'inverse de deux matrice??
Tu peux faire une fonction que tu appelles par exemple Inv qui contient le code que tu as trouve, ensuite si t'as deux matrices A et B, tu appelles juste la fonction: Inv(A) et Inv(B), et tu auras l,inverse de tes matrices.
Ciao


Maths, Physique, Astrophysique, Astronomie, Électronique.... Si je peux aider!
Messages postés
64
Date d'inscription
vendredi 6 mai 2011
Statut
Membre
Dernière intervention
8 mai 2013

je n'arrive pas à mettre à l'entrée de la fonction des matrices, je ne sais pas si il faut mettre des pointeurs doubles que je ne maitrise pas, si vous pouvez me faire un exemple avec la fonction : int MethodeGauss() et le probleme c'est que je dois récupérer la matrice de sortie de cette fonction
je vous remercie bcp pour votre aide


#include <stdio.h>
#include <stdlib.h>

#define t 3

float matId[t][t];
float mat1[t][t] = {{-3,5,6},{-1,2,2},{1,-1,-1}};
float NewMat[t][2*t];


void afficherMatrice()
{
int i,j;
for (i=0;i<t;i++)
{
for (j=0;j<t;j++)
{
printf("%f ",mat1[i][j]);
}
printf("\n" );
}
}

void afficherMatriceIdentite()
{
int i,j;
for (i=0;i<t;i++)
{
for (j=0;j<t;j++)
{
printf("%f ",matId[i][j]);
}
printf("\n" );
}
}


void afficherMatriceInverse()
{
int i,j;
float elem;
for (i=0;i<t;i++)
{
for (j=t;j<2*t;j++)
{
printf("%f ",NewMat[i][j]);
}
printf("\n" );
}
}





void creerMatriceId()
{
int i,j;
for (i=0;i<t;i++)
{
for (j=0;j<t;j++)
{
if (i==j)
{
matId[i][j] = 1;
}
else
{
matId[i][j] = 0;
}
}
}
}


void definirNouvelleMatrice()
{
int i,j;
i=j=0;
for (i=0;i<t;i++)
{
for (j=0;j<2*t;j++)
{
if (j<t)
{
NewMat[i][j] = mat1[i][j];
}
else
{
NewMat[i][j] = matId[i][j-t];
}
}
}
}

int MethodeGauss()
{
int inversible = 1;
int k,i,colonne,colonnebis;
float var,var1;
k=0;
while((inversible == 1)&&(k<t))
{
if (NewMat[k][k] != 0)
{
var = NewMat[k][k];
for (colonne=0;colonne<2*t;colonne++)
{
NewMat[k][colonne] = NewMat[k][colonne]/var; //Normalisation de la ligne contenant l'élément diagonal
}
for (i=0;i<t;i++)
{
if (i != k)
{
var1=NewMat[i][k];
for (colonnebis=0;colonnebis<2*t;colonnebis++)
{
NewMat[i][colonnebis] = NewMat[i][colonnebis] - NewMat[k][colonnebis]*var1;
}
}
}
k++;
}
else
{
inversible = 0;
}
}
return inversible;
}

void modifierMatrice()
{
creerMatriceId();
definirNouvelleMatrice();




}

int main ()
{
printf("debut\n" );
afficherMatrice();
modifierMatrice();
if (MethodeGauss() == 1)
{
printf("Matrice inverse\n" );
afficherMatriceInverse();
}
else
{
printf("La matrice n'est pas inversible\n" );
}

printf("tout c'est bien termine\n" );
system("PAUSE");
return 0;

}