Puissance d'une matrice en C

Fermé
tudjo Messages postés 1 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 27 janvier 2008 - 27 janv. 2008 à 23:11
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 - 28 janv. 2008 à 08:50
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.

3 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
28 janv. 2008 à 02:06
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, ...)
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
28 janv. 2008 à 08:49
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
0
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 121
28 janv. 2008 à 08:50
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.
0