c[i][j] = somme_k( a[i][k] x b[k][j] ) ????? ça vous dit

c[i][j] = somme_k( a[i][k] x b[k][j] ) ????? ça vous dit - Programmation

Marsh Posté le 28-02-2001 à 20:17:56    

Y a t_il une âme avertie et généreuse pour m'éclairer sur un sujet délicat.
 
Voila, on doit faire une fonction(sans déclarations globales) réalisant l'opération suivante :  
 
        c[i][j] = somme_k( a[i][k] x b[k][j] ) ?????
 
Le pb est que je ne comprends déja pas cete opération donc je suis loin d'en faire une fonction.
Je crois que notre prof est débile !!
 
Help !
 
Merci

Reply

Marsh Posté le 28-02-2001 à 20:17:56   

Reply

Marsh Posté le 28-02-2001 à 20:20:49    

ca yen a etre le produit de matrice C=A*B
 
tu dois le faire dans quel language?

Reply

Marsh Posté le 28-02-2001 à 20:21:09    

Ben c'est une multiplication de matrices.
Tu fais 2 boucles sur les i,j avec à l'intérieur une boucle sur l'indice k.

Reply

Marsh Posté le 28-02-2001 à 21:22:20    

Vous croyer que c'est uniquement le produit de 2 mat. rangé dans une 3ème.
L'expression me paraît pluôt compliqué pour décrire cette "simple" opération.
 
Sinon c'est du C, tous en local pour compliquer l'exercice  
 
Merci de vos attentions

Reply

Marsh Posté le 28-02-2001 à 21:38:58    

non ca a l'air d'une matrice ... ik * kj = ij donc la multiplication est possible.
 
 
en C, il doit surement y avoir des librairies pour faire des calculs de matrices sinon avec la methode de base tu vas faire mouliner ton pc !!!.

Reply

Marsh Posté le 28-02-2001 à 21:48:12    

Je me demande si le k ne veux pas dire, de façon détournée, un appel à la fonction ligne de matrice par ligne de matrice ??
 
Mais Somme_k je ne comprends pas (Attention Ici k est 1 indice de somme)

Reply

Marsh Posté le 28-02-2001 à 23:00:55    

typedef double[][] Matrice;
 
/* N est la taille des 3 matrices, supposées carrées. */
void produit(Matrice a, Matrice b, Matrice resultat, int N)
{
    int i, j, k;
 
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            double  somme = 0;
 
            for (k = 0; k < N; k++) {
                somme += a[ i][k] * b[k][j];
            }
 
            resultat[ i][j] = somme;
        }
    }
}
 
Pas sorcier, pourtant...

 

--Message édité par BifaceMcLeOD--

Reply

Marsh Posté le 28-02-2001 à 23:49:27    

T'en suis trés reconaissant BifaceMcLeOD même si j'en demandais pas autant ça fait toujours plaisir.
Dis moi le code ne ta pas l'air étranger ?
 
J'avais finalement prévu de le faire autrement :
 
som_vect(mat_a,mat_b,mat_c,nb_lig,nb_col)
 
 int * mat_a;  
 int * mat_b;
 int * mat_c;
 int nb_lig,nb_col;
 
{int i,j;
 
 for(i=0;i<=nb_lig;i++)
 
       for(j=0;j<=nb_col;j++)
 
               *(mat_c+i*nb_col+j)=*(mat_a+i*nb_col+j)+*(mat_b+i*nb_col+j);
}
 
Je pense que le résultat doit être identique
 
Encore Merci

Reply

Marsh Posté le 01-03-2001 à 01:06:01    

Ben je programme depuis quelques années maintenant, alors... j'ai acquis un peu d'expérience...
 
Sinon, pour info, nos 2 codes sont radicalement différents. Je fais 3 boucles imbriquées, alors que tu n'en fais que 2...
 
En pratique, tu as calculé la somme de 2 matrices, alors que j'en ai fait le produit. Et puis les tableaux à 2 dimensions, ça existe... et c'est plus clair. J'ai réécrit ta fonction pour te montrer :
 
void somme(Matrice a, Matrice b, Matrice resultat, int nb_lig, int nb_col)
{
    int i, j;
 
    for (i = 0; i < nb_lig; i++) {
        for (j = 0; j < nb_col; j++) {
            resultat[ i][j] = a[ i][j] + b[ i][j];
        }
    }
}
 
N'est-ce point un tantinet plus clair ? :D
Et puis attention, tu as 2 bugs dans ta fonction. Les 2 tests de fin de boucle vont provoquer une erreur mémoire, car tu vas faire une itération de trop à chaque fois et déborder de ton tableau. Il faut remplacer tes '<=' par des '<'.
 
Voilà.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed