Matrice diagonale [Résolu]

Messages postés
64
Date d'inscription
vendredi 6 mai 2011
Dernière intervention
8 mai 2013
- - Dernière réponse : cs_badsha
Messages postés
64
Date d'inscription
vendredi 6 mai 2011
Dernière intervention
8 mai 2013
- 15 mai 2011 à 00:06
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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
19 novembre 2018
3
Merci
- 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

Merci cptpingu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cptpingu
Messages postés
33
Date d'inscription
jeudi 30 septembre 2010
Dernière intervention
24 novembre 2011
3
Merci
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];

Merci raikko21 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de raikko21
Messages postés
64
Date d'inscription
vendredi 6 mai 2011
Dernière intervention
8 mai 2013
0
Merci
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
Commenter la réponse de cs_badsha
Messages postés
33
Date d'inscription
jeudi 30 septembre 2010
Dernière intervention
24 novembre 2011
0
Merci
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!
Commenter la réponse de raikko21
Messages postés
64
Date d'inscription
vendredi 6 mai 2011
Dernière intervention
8 mai 2013
0
Merci
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;

}
Commenter la réponse de cs_badsha

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.