Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1457 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [RESOLU] Calcul d'une série

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Calcul d'une série

n°2165194
JPP78750
Posté le 22-11-2012 à 20:36:48  profilanswer
 

Bnjour a tous !
 
J'ai à trouver les résultats de cette série et les résultats que j'obtiennent ne sont pas bons ...
 
http://www.jppanaget.com/lib/exe/fetch.php/serie.jpg
 
Mon code :  
 

Code :
  1. for (int k=0; k<25; k++){
  2.         for (int n=1;n<100; n++){   
  3.              num=4*sin((double)(n*PI*P_controle[k][0]))*((-1)^(n)-1)*sinh((double)(n*PI*(1-P_controle[k][1])));
  4.              den=(sinh((double)(n*PI))*(n^3)*(PI*PI*PI));
  5.              if(den!=0){
  6.              SolutionExacte[k]=SolutionExacte[k]-num/den;
  7.              }     
  8.     }


 
avec P_controle[k][0] et P_controle[k][1], les coord en x et y du point k
 
Alors je ne comprend pas pourquoi mes results ne sont pas bon .. Voyez vous quelque chose qui cloche ?


Message édité par JPP78750 le 22-11-2012 à 21:55:13

---------------
http://www.jppanaget.com
mood
Publicité
Posté le 22-11-2012 à 20:36:48  profilanswer
 

n°2165197
Farian
Posté le 22-11-2012 à 21:18:12  profilanswer
 

Bonsoir !
 
Tout d'abord, quelques questions idiotes, mais je préfère être sûr :)
 
 * Les variables num et den sont-elles bien déclarées en double ?
 * Comment est défini PI ? (vous n'indiquez pas quelle plateforme vous utilisez)
 * Les éléments du tableau "SolutionExacte" sont-ils bien initialisés à 0 ?
 * Avez-vous noté des différences importantes dans vos résultats si vous augmentez le nombre de valeurs de la série ?
 
Ensuite, quelques remarques sur le code :  
 * Cela ne change rien aux résultats, mais le test "if (den != 0)" est inutile, car il ne peut être nul que si n vaut 0, ce qui n'est jamais le cas,
 * Pour gagner en précision, sortez les invariants de boucle du "for" : ne divisez par "PI*PI*PI" qu'une fois que vous avez terminé le calcul de votre série,
 * Pourquoi faire les calculs sur les nombres pairs ? Sauf erreur de ma part, le numérateur vaut 0 pour ces nombres.
 
C'est tout ce que je vois en première lecture ... De quel ordre sont les écarts que vous constatez ?
 

n°2165199
JPP78750
Posté le 22-11-2012 à 21:27:31  profilanswer
 

Bonsoir Farian et merci pour ta réponse:
*num et den sont bien déclarés en double et initialises à 0 tout comme les éléments de SolutionExacte;
Pi est déclaré comme ça : double PI = 3.141592;
Oui il y a des diff importants.
 
Par contre, si je n'ai pas le "if (den != 0)", les results ne sont plus du tout bon : les résultats deviennent inf ou nan ...  
Je ne me l'explique pas ...  
 

Code :
  1. double SolutionExacte[25];
  2.     double PI = 3.141592;
  3.     double num=0;
  4.     double den=0;
  5.     for (int k=0; k<25; k++){
  6.         SolutionExacte[k]=0;
  7.     }
  8.     for (int k=0; k<25; k++){
  9.         for (int n=1;n<100; n++){
  10.            
  11.            
  12.     num=4*sin((double)(n*PI*P_controle[k][0]))*((-1)^(n)-1)*sinh((double)(n*PI*(1-P_controle[k][1])));
  13.     den=(sinh((double)(n*PI))*(n^3));
  14.    // if(den!=0){
  15.     SolutionExacte[k]=SolutionExacte[k]-num/den;
  16.     //}
  17.            
  18.     }
  19.         SolutionExacte[k]=SolutionExacte[k]/PI/PI/PI;
  20.         printf("    solution en %i :  %2.4f \n",k,SolutionExacte[k]);
  21.      }


 
Merci pour les conseils


Message édité par JPP78750 le 22-11-2012 à 21:29:44

---------------
http://www.jppanaget.com
n°2165201
antiseptiq​ueincolore
Posté le 22-11-2012 à 21:34:27  profilanswer
 

trop puissant ^^
t'as pas de pow [:moundir]


Message édité par antiseptiqueincolore le 22-11-2012 à 21:35:26
n°2165202
Farian
Posté le 22-11-2012 à 21:37:28  profilanswer
 

Ha ! C'est clairement du coté du calcul de den qu'il faut creuser ... Car ce n'est vraiment pas normal ...
 
Je vous conseillerais cette approche :  
 
Vérifiez déjà que vous arrivez parfois à des valeurs nulles (en mettant un else), puis décomposez son calcul ...
 
Par ailleurs, j'aurais tendance à vous conseiller d'augmenter la précision de votre déclaration de PI ou, encore mieux, de déclarer :  
 
double PI = 2*acos(0);
 
Comme ça, vous aurez toute la précision possible ! Vu la rapidité de croissance des fonctions hyperboliques, on peut vite arriver à un écart important.
 
Et après, je reste sec ... Je vais tenter de faire des tests sur une VM :)
 

n°2165204
JPP78750
Posté le 22-11-2012 à 21:50:15  profilanswer
 

Bon bin c'était bien le coup des pow ... Ca marche nickel maintenant. Merci pour votre aide !


---------------
http://www.jppanaget.com
n°2165205
antiseptiq​ueincolore
Posté le 22-11-2012 à 21:52:41  profilanswer
 

:jap:

n°2165206
Farian
Posté le 22-11-2012 à 21:54:44  profilanswer
 

En effet ...
 
En revanche, je suis surpris que vous n'ayez pas de problème ...
Quelles sont vos valeurs dans le tableau P_controle ? Car on arrive vite aux limites de la fonction sinh, dont le résultat dépasse la valeur maximale d'un flottant dès que son paramètre dépasse un peu trop +/- 700 ...  
 
Note : Se flageller plus tard, pour ne pas avoir vu que l'opérateur "OU exclusif" était utilisé au lieu de la puissance ... :) :) :)

n°2165207
JPP78750
Posté le 22-11-2012 à 21:58:08  profilanswer
 

Je me suis déjà flagellé ^^  
Dans P_controle, ce sont les coordonnées d'une grille régulière genre [0.25;0.25] ... [0.25][0.75]...


---------------
http://www.jppanaget.com
n°2165208
Farian
Posté le 22-11-2012 à 22:00:24  profilanswer
 

Effectivement, cela peut passer avec 100 éléments dans la série. Dans mon exemple, j'avais pris des valeurs de l'ordre de 5 pour les y, et je voyais apparaître nos amis "inf" et "nan"


Message édité par Farian le 22-11-2012 à 22:01:23

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [RESOLU] Calcul d'une série

 

Sujets relatifs
Calcul[VBA]Calcul du nombre de lignes avec 3 conditions non numériques
calcul de la convergence d'un RdNalgo calcul de volume objet 3d
Calcul de la norme d'un vecteur généré de façon aléatoire en langage CLire port série C# et convertir en texte
PHP : Calcul de moyenne par modalitéproblème réception port série.
Calcul de la valeur actuelle avec VBACalcul des extrémas d'une série de N nombres
Plus de sujets relatifs à : [RESOLU] Calcul d'une série


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR