Matrice diagonale [Résolu]

cs_badsha 64 Messages postés vendredi 6 mai 2011Date d'inscription 8 mai 2013 Dernière intervention - 6 mai 2011 à 02:29 - Dernière réponse : cs_badsha 64 Messages postés vendredi 6 mai 2011Date d'inscription 8 mai 2013 Dernière intervention
- 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
cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscription 6 octobre 2018 Dernière intervention - 6 mai 2011 à 10:20
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cptpingu
Meilleure réponse
raikko21 33 Messages postés jeudi 30 septembre 2010Date d'inscription 24 novembre 2011 Dernière intervention - 8 mai 2011 à 17:34
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de raikko21
cs_badsha 64 Messages postés vendredi 6 mai 2011Date d'inscription 8 mai 2013 Dernière intervention - 11 mai 2011 à 03:20
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
raikko21 33 Messages postés jeudi 30 septembre 2010Date d'inscription 24 novembre 2011 Dernière intervention - 13 mai 2011 à 13:07
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
cs_badsha 64 Messages postés vendredi 6 mai 2011Date d'inscription 8 mai 2013 Dernière intervention - 15 mai 2011 à 00:06
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.