IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

Cosinus rapide pour petites variations autour d'un angle


Sujet :

Mathématiques

  1. #1
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut Cosinus rapide pour petites variations autour d'un angle
    Bonsoir.

    Je cherche un moyen de calculer le plus rapidement possible un cosinus pour de petites variations autour d'un angle dont le cosinus aura été pré calculée.

    Je cherche donc une suite dont la convergence est d'autant plus grande que le résultat est proche de la valeur souhaitée et dont les temps de calculs sont évidement les plus faibles possibles (car je tourne sur un µprocesseur 24 Mhz).

    Le sujet à commencé sur e forum C. Voici le lien.On y a notamment parlé de la série de taylor, mais il me semblais qu'il y avait peut être plus performent.

    Merci d'avance.

    Cordialement
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Bref tu veux calculer cos(theta + epsilon), connaissant theta. En appliquant la formule de trigo usuelle :

    cos(theta+epsilon) = cos(theta).cos(epsilon) - sin(theta).sin(epsilon)

    Theta etant connu, cos(theta) et sin(theta) seront précalculés.

    Pour cos(epsilon) et sin(epsilon) on peut utiliser l'expansion de Taylor autour de 0. Un truc du genre :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    double THETA = Math.PI/4;
    double COSTHETA = Math.cos(THETA);
    double SINTHETA = Math.sin(THETA);
     
    double cosTheta(double epsilon) {
    	double e1=epsilon, e2=e1*e1, e3=e2*e1, e4=e2*e2;
    	return COSTHETA*(1-e2/2+e4/24) - SINTHETA*(e1-e3/6);
    }

    Ce qui nous donne des résultats pas trop mauvais
    cos(THETA-0,50)=0,959550 / cosTheta(-0,50)=0,959382
    cos(THETA-0,45)=0,944279 / cosTheta(-0,45)=0,944179
    cos(THETA-0,40)=0,926649 / cosTheta(-0,40)=0,926593
    cos(THETA-0,35)=0,906702 / cosTheta(-0,35)=0,906673
    cos(THETA-0,30)=0,884489 / cosTheta(-0,30)=0,884476
    cos(THETA-0,25)=0,860066 / cosTheta(-0,25)=0,860060
    cos(THETA-0,20)=0,833492 / cosTheta(-0,20)=0,833490
    cos(THETA-0,15)=0,804835 / cosTheta(-0,15)=0,804835
    cos(THETA-0,10)=0,774167 / cosTheta(-0,10)=0,774167
    cos(THETA-0,05)=0,741564 / cosTheta(-0,05)=0,741564
    cos(THETA-0,00)=0,707107 / cosTheta(-0,00)=0,707107
    cos(THETA+0,05)=0,670882 / cosTheta(+0,05)=0,670882
    cos(THETA+0,10)=0,632981 / cosTheta(+0,10)=0,632981
    cos(THETA+0,15)=0,593498 / cosTheta(+0,15)=0,593498
    cos(THETA+0,20)=0,552531 / cosTheta(+0,20)=0,552533
    cos(THETA+0,25)=0,510184 / cosTheta(+0,25)=0,510190
    cos(THETA+0,30)=0,466561 / cosTheta(+0,30)=0,466576
    cos(THETA+0,35)=0,421771 / cosTheta(+0,35)=0,421804
    cos(THETA+0,40)=0,375928 / cosTheta(+0,40)=0,375992
    cos(THETA+0,45)=0,329145 / cosTheta(+0,45)=0,329262
    cos(THETA+0,50)=0,281540 / cosTheta(+0,50)=0,281738
    NB : Au lieu de l'expansion de Taylor, on peut précalculer une table des valeurs de cos(x) et sin(x) autour de 0, et faire une interpolation.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Bref tu veux calculer cos(theta + epsilon), connaissant theta. En appliquant la formule de trigo usuelle :
    oui, en effet.
    Citation Envoyé par pseudocode Voir le message
    NB : Au lieu de l'expansion de Taylor, on peut précalculer une table des valeurs de cos(x) et sin(x) autour de 0, et faire une interpolation.
    cette méthode me semble bonne étant donné que je ne dois pas avoir plus de 16 valeurs autour d'un angle.

    Je vais faire des tests pour vérifier cette hypothèse.


    Merci beaucoup
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  4. #4
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Pour cos(epsilon) et sin(epsilon) on peut utiliser l'expansion de Taylor autour de 0.
    Si epsilon reste très petit, tu peux te limiter à
    cos(epsilon)~1-epsilon^2/2
    sin(epsilon)~epsilon
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

Discussions similaires

  1. coup de main pour petite fonction.
    Par Fabouney dans le forum Langage
    Réponses: 1
    Dernier message: 01/08/2005, 14h27
  2. Algo le plus rapide pour trouver une répétition ?
    Par AsmCode dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 28/07/2005, 00h26
  3. Réponses: 16
    Dernier message: 19/05/2005, 16h20
  4. quel sgbd et langage pour petite base
    Par bolos dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 31/12/2004, 13h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo