Somme de vecteurs en langage C (correction)

Fermé
Valou - 23 mai 2012 à 16:39
 Valou - 23 mai 2012 à 17:41
Bonjour,

J'ai créé un programme qui permet de m'afficher de manière très classique deux vecteurs v et w de taille 10, on ne peut plus normaux. Je voulais afficher le vecteur u qui est la somme des vecteurs v et w, en utlisant la commande gsl_vector_add(v,W) : "int gsl_vector_add(gsl_vector * v, const gsl_vector * w)" qui ajoutent les éléments de v à ceux de w.

Le problème c'est qu'il m'affiche correctement v et w, mais pour u, il m'affiche le vecteur nulle de taille 10... Pas très logique. Quelqu'un pourrait-il m'aider à trouver mon erreur svp?

Un grand merci d'avance.
Voici mon code :

int main(void){


int i;

gsl_vector * v = gsl_vector_alloc(10);
gsl_vector * w = gsl_vector_alloc(10);
gsl_vector * u = gsl_vector_alloc(10);

for(i=0; i<10; i++){
gsl_vector_set(v, i, 1.23+i);
}

for(i=0; i<10; i++){
printf("v_%d = %g\n", i, gsl_vector_get(v,i));
}

for(i=0; i<10; i++){
gsl_vector_set(w, i, i+2.23);
}

for(i=0; i<10; i++){
printf("w_%d = %g\n", i, gsl_vector_get(w,i));
}

for(i=0; i<10; i++){
gsl_vector_set(u, i, gsl_vector_add(v,w));
}

for(i=0; i<10; i++){
printf("u_%d = %g\n", i, gsl_vector_get(u,i));
}

gsl_vector_free(v);
gsl_vector_free(w);
gsl_vector_free(u);
return 0;
}


A voir également:

1 réponse

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
23 mai 2012 à 16:48
ton erreur est là :
for(i=0; i<10; i++){
gsl_vector_set(u, i, gsl_vector_add(v,w));
} 
que retourne la fonction gsl_vector_add et quel est le prototype de gsl_vector_set ?
regarde aussi comment fonctionne la fonction add, souvent en C tu ajoutes le deuxième argument au premier : à vérifier.
0
Merci de ta réponse !

Cependant, je débute en C et je ne suis pas familier avec les notions...


Qu'entends-tu par "quel est le prototype de gsl_vector_set?"
=> cette fonction renvoie un void et prend en argument un vecteur, un entier et un réel, enfin il est dit :
void gsl_vecteor_set(gsl_vector * v, size_t i, double x) : this function sets the value of the i-th element of a vector v to x.

Concernant la fonction gsl_vector_add, je crois qu'elle retourne un entier?
=> int gsl_vector_add(gsl_vector * a, const gsl_vector * b) : this function adds the elemets of vector b to the elements of vector a, c_i = a_i + b_i.



Valentin.
0