resoudre numeriquement erf(x), et alternative a scan f

resoudre numeriquement erf(x), et alternative a scan f - Algo - Programmation

Marsh Posté le 23-10-2009 à 10:46:41    

Bonjour !
 
Je cherche a resoudre numeriquement la fonction erf(x). J'ai cherche sur internet, j'ai trouve des resolutions, comme celle propose par wikipedia
http://fr.wikipedia.org/wiki/Fonction_d%27erreur
 
Mais ce qui me faudrait vraimment c'est un moyen d'effectuer une resolution sans utiliser ces solutions, a priori on peut utiliser l'algorithme de Horner, mais je ne voit pas comment. une idee ?
En gros je cherche un algorithme pour resoudre cette integrale, sans passe par des solutions deja existantes.
 
Sinon je cherche aussi une alternative a scanf pour lire la valeur que l'utilisateur rentre. Je veux pouvoir detecter par exemple si il rentre un caractere a la place d'une valeur afin de quitter le programme.
Pour donner quelque chose comme ca,
 

Code :
  1. #include <stdio.h >
  2. int main()
  3. {
  4. float erf;
  5. float x;
  6. do
  7. {
  8. printf("enter a value for x, or q if you want to quit\n" );
  9. scanf ("%f",&x);                             //scanf ne semble pas tres aproprier pour ce que je veux faire (detecter "q" pour quitter)  
  10. erf=x;                                          //a remplacer par un algorithme me permetant d obtenir erf, je cherche encore
  11. printf("erf=%f\n",erf);
  12. }
  13. while ()  ; //une condition dans while... si j'arrive a detecter quand l'utilisateur rentre q...
  14. return 0;
  15. }


 
 
Merci pour votre aide.
le code ici n'a pas une grande importance, c'est juste pour donner une idee generale. Ce qui me faut c'est une alternative a scanf, et un moyen de resoudre erf (algorithme de horner, methode des trapezes...)


Message édité par nakor le 23-10-2009 à 12:26:04
Reply

Marsh Posté le 23-10-2009 à 10:46:41   

Reply

Marsh Posté le 23-10-2009 à 10:49:31    

Pour l'alternative à scanf() : fgets() + une fonction de conversion quelconque (strtod(), strtol(), etc)
 
Pour l'algo, je déplace ton topic dans la catégorie "Algorithme" dans laquelle il trouvera plus de réponses.

Reply

Marsh Posté le 23-10-2009 à 11:35:00    

Il y a une fonction erf() dans C99 (mais pas C90), declaree dans <math.h>.  De memoire, elle correspond a un usage plus ancien au moins sous Unix.

 

Au pire, tu peux chercher dans l'implementation de la libc d'un BSD, la license devrait ne pas te poser de probleme.


Message édité par Un Programmeur le 23-10-2009 à 11:35:52

---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 23-10-2009 à 13:14:03    

le problème c'est que je ne peux pas utiliser une fonction existante de erf(), il faut que je programme un algorithme pour déterminer les valeurs de erf ainsi que l'erreur associé... Mais je peux utiliser un algorithme déjà existant, si je connais la source.

Reply

Marsh Posté le 23-10-2009 à 14:28:52    

qu'est-ce qui te dérange à utiliser l'une des approximations données dans wikipedia :??: En plus, c'est fait exprès pour ceux qui codent en C ou fortran (c'est précisé dedans)...
Sinon, ben tu cherches un algo de calcul d'intégrale (méthode des rectangles, des trapèzes...) : http://fr.wikipedia.org/wiki/Calcu [...] C3%A9grale


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 23-10-2009 à 14:46:34    

ce qui me dérange ce que c'est un exercice. le plus important c'est de programmer le calcul d'une intégrale, pas vraiment le résultat.
 
EDIT : je viens de regarder le lien pour le calcul d'intégral par la méthode des trapèzes, le problème, c'est que je n'aurai pas d'estimation de l'erreur. Cette méthode est plus adapte au polynôme.
Peut être avec la methode de laplace mais la je ne connais pas, donc je bloque un peu.


Message édité par nakor le 23-10-2009 à 14:52:11
Reply

Marsh Posté le 23-10-2009 à 16:51:27    

bhen utilise le développement en série, c'est le plus simple ( et surement ce qu'on te demande d'appliquer), la méthode des trapèzes je vois pas trop comment tu peux l'appliquer et si tu cherches une solution d'approche numérique nouvelle et originale, bon courage :) (tu auras ta page dans wikipedia)

Reply

Marsh Posté le 23-10-2009 à 16:59:27    

je laisse la page libre dans wikipedia au courageux/
je vais m'attaquer aux séries c'est plus sympa, je vous tiendrai au courant de mon résultat

Reply

Marsh Posté le 23-10-2009 à 19:32:05    

regarde dans cephes ou crlibm si elle est dedans.

Reply

Sujets relatifs:

Leave a Replay

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