Puissance d'une matrice en C
tudjo
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
tatou_38 Messages postés 1937 Date d'inscription Statut Membre Dernière intervention -
tatou_38 Messages postés 1937 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je dois coder une fonction, A->A^k, mon code est celui ci :
void puissancek (mat A, mat &Z, int k, int n)
{identite(Z,n);
for (int s=1; s<=k; s++)
{
double ak;
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
{ak=0;
for (int t=1; t<=n; t++)
{
ak=ak+A[i][t]*Z[t][j];
Z[i][j]=ak;
}
}
}
}
J'ai beau tourné le problène dans plusieurs sens ca ne fonctionne pas. Ce qui est tres bête c'est que mon opérateur "fois" fonctionne :
void fois (mat A, mat C, mat &X, int n)
{ double acij=0;
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
{acij=0;
for (int k=1; k<=n; k++)
acij=acij+A[i][k]*C[k][j];
X[i][j]=acij;
}
}
Mais je ne sais pas l'incorporer à "puissancek".
J'utilise seulement les bibliothèque iostream.h et math.h.
En vous remerciant d'avance.
Je dois coder une fonction, A->A^k, mon code est celui ci :
void puissancek (mat A, mat &Z, int k, int n)
{identite(Z,n);
for (int s=1; s<=k; s++)
{
double ak;
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
{ak=0;
for (int t=1; t<=n; t++)
{
ak=ak+A[i][t]*Z[t][j];
Z[i][j]=ak;
}
}
}
}
J'ai beau tourné le problène dans plusieurs sens ca ne fonctionne pas. Ce qui est tres bête c'est que mon opérateur "fois" fonctionne :
void fois (mat A, mat C, mat &X, int n)
{ double acij=0;
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
{acij=0;
for (int k=1; k<=n; k++)
acij=acij+A[i][k]*C[k][j];
X[i][j]=acij;
}
}
Mais je ne sais pas l'incorporer à "puissancek".
J'utilise seulement les bibliothèque iostream.h et math.h.
En vous remerciant d'avance.
A voir également:
- Puissance d'une matrice en C
- Test puissance pc - Guide
- Puissance en c - Forum C
- Vous ne pouvez pas modifier une partie de matrice - Forum Excel
- Puissance en c++ - Forum C++
- Pas modifier une partie de matrice - Forum Excel
3 réponses
Bonjour,
Concernant ton problème : Je n'ai pas particulièrement bien lu ton code. Mais ce que j'ai compris : tu calcules simplement une puissance de matrice en la multipliant plusieurs fois avec elle-même (il est posssible de beaucoup simplifier ce calcul, mais ça demande un peu de maths ;) ).
Donc ma suggestion est celle-ci : réutilises ta fonction "fois" ! (puisqu'elle marche bien).
(Vérifier que k est une valeur correcte !)
Z = identité( ... );
Pour i = 1 jusqu'a k
faire Z = fois ( Z, A, Z, ...)
Concernant ton problème : Je n'ai pas particulièrement bien lu ton code. Mais ce que j'ai compris : tu calcules simplement une puissance de matrice en la multipliant plusieurs fois avec elle-même (il est posssible de beaucoup simplifier ce calcul, mais ça demande un peu de maths ;) ).
Donc ma suggestion est celle-ci : réutilises ta fonction "fois" ! (puisqu'elle marche bien).
(Vérifier que k est une valeur correcte !)
Z = identité( ... );
Pour i = 1 jusqu'a k
faire Z = fois ( Z, A, Z, ...)
salut, m'étonne pas que ça fonctionne pas, tu altèe Z trop tôt et tu le réutilise.
Du coup tu peux pas avoir le bon résultat.
Si tu veux utiliser fois(), il suffit de le déclarer avant puissance.
Sinon, regarde là, un fichier permettant la plupart des opérations avec les matrices :
http://mapage.noos.fr/julien.lamome/prog/matriceV5.h
Du coup tu peux pas avoir le bon résultat.
Si tu veux utiliser fois(), il suffit de le déclarer avant puissance.
Sinon, regarde là, un fichier permettant la plupart des opérations avec les matrices :
http://mapage.noos.fr/julien.lamome/prog/matriceV5.h
Juste une remarque, en C les tableaux commencent à l'indice 0, aussi tu devrais plutôt faire tes boucles de la façon suivante :
for ( i = 0 ; i < n ; i++ ) { .... }
Car le risque est de déborder de ton tableau au dernier élément, en effet si tu as déclaré un tableau, par ex : int tableau[10] , le dernier élément sera tableau[9] et tu risque fort un crash si tu touches à tanleau[10] !
Sinon je ne me rapelle pas trop le calcul matriciel, mais ton code me parait bizarre.
for ( i = 0 ; i < n ; i++ ) { .... }
Car le risque est de déborder de ton tableau au dernier élément, en effet si tu as déclaré un tableau, par ex : int tableau[10] , le dernier élément sera tableau[9] et tu risque fort un crash si tu touches à tanleau[10] !
Sinon je ne me rapelle pas trop le calcul matriciel, mais ton code me parait bizarre.