Comment fonctionnent les fonctions sortinggonomésortingques?

Donc, au secondaire, et probablement au collège, on nous enseigne comment utiliser les fonctions sortinggonomésortingques, ce qu’elles font et quels types de problèmes elles résolvent. Mais ils m’ont toujours été présentés comme une boîte noire. Si vous avez besoin du sinus ou du cosinus de quelque chose, vous appuyez sur le bouton sin ou cos de votre calculasortingce et vous êtes prêt. Ce qui est bien

Ce que je me demande, c’est comment les fonctions sortinggonomésortingques sont généralement implémentées.

    Tout d’abord, vous devez faire une sorte de réduction de la scope. Les fonctions de déclenchement sont périodiques, vous devez donc réduire les arguments à un intervalle standard. Pour commencer, vous pouvez réduire les angles entre 0 et 360 degrés. Mais en utilisant quelques identités, vous réalisez que vous pourriez vous en tirer avec moins. Si vous calculez des sinus et des cosinus pour des angles compris entre 0 et 45 degrés, vous pouvez commencer à calculer toutes les fonctions sortinggonomésortingques pour tous les angles.

    Une fois que vous avez réduit votre argument, la plupart des puces utilisent un algorithme CORDIC pour calculer les sinus et les cosinus. Vous pouvez entendre des gens dire que les ordinateurs utilisent les séries de Taylor. Cela semble raisonnable, mais ce n’est pas vrai. Les algorithmes CORDIC sont bien mieux adaptés à une implémentation matérielle efficace. ( Les bibliothèques de logiciels peuvent utiliser des séries de Taylor, disons sur du matériel qui ne prend pas en charge les fonctions sortinggonomésortingques.) Il peut y avoir un traitement supplémentaire, utilisant l’algorithme CORDIC pour obtenir des réponses correctes,

    Il y a quelques améliorations à ce qui précède. Par exemple, pour les très petits angles theta (en radians), sin (theta) = theta à toute la précision que vous avez, il est donc plus efficace de renvoyer simplement theta que d’utiliser un autre algorithme. Donc, dans la pratique, il y a beaucoup de logique de cas particulier pour obtenir toutes les performances et la précision possibles. Les puces avec des marchés plus petits peuvent ne pas être aussi efficaces.

    edit: Jack Ganssle a une bonne discussion dans son livre sur les systèmes embarqués, “The Firmware Handbook” .

    FYI: Si vous avez des contraintes de précision et de performance, les séries de Taylor ne doivent pas être utilisées pour évaluer les fonctions à des fins numériques. (Sauvegardez-les pour vos cours de calcul.) Ils utilisent l’ analytique d’une fonction en un seul point , par exemple le fait que tous ses dérivés existent à ce stade. Ils ne convergent pas nécessairement dans l’intervalle d’intérêt. Souvent, ils font un travail médiocre de dissortingbution de la précision de l’approximation de la fonction afin d’être “parfait” juste à côté du point d’évaluation; L’erreur fait généralement un zoom vers le haut lorsque vous vous en éloignez. Et si vous avez une fonction avec un dérivé non continu (par exemple, les ondes carrées, les ondes sortingangulars et leurs intégrales), une série de Taylor vous donnera une mauvaise réponse.

    La meilleure solution “facile”, lorsque l’on utilise un polynôme de degré maximum N pour approcher une fonction donnée f (x) sur un intervalle x0

    edit: Wikipedia a un article semi-décent sur la théorie de l’approximation . L’une des sources citées (Hart, “Computer Approximations”) est épuisée (& les copies utilisées ont tendance à être coûteuses), mais elle contient beaucoup de détails sur ce genre de choses. (Jack Ganssle mentionne ceci dans le numéro 39 de son bulletin The Embedded Muse .)

    edit 2: Voici quelques mesures d’erreur tangibles (voir ci-dessous) pour Taylor vs Chebyshev pour sin (x). Quelques points importants à noter:

    1. que l’erreur maximale d’une approximation de la série de Taylor sur une plage donnée est beaucoup plus grande que l’erreur maximale d’une approximation de Chebyshev du même degré. (Pour environ la même erreur, vous pouvez vous en tirer avec un terme de moins avec Chebyshev, ce qui signifie des performances plus rapides)
    2. La réduction de la scope est une énorme victoire. En effet, la consortingbution des polynômes d’ordre supérieur diminue lorsque l’intervalle de l’approximation est plus petit.
    3. Si vous ne parvenez pas à réduire la scope, vos coefficients doivent être stockés avec plus de précision.

    Ne vous méprenez pas: les séries de Taylor fonctionneront correctement pour le sinus / cosinus (avec une précision raisonnable pour la plage -pi / 2 à + pi / 2; techniquement, avec suffisamment de termes, vous pouvez atteindre toute précision souhaitée pour toutes les entrées réelles, mais essayez de calculer cos (100) en utilisant des séries de Taylor et vous ne pouvez pas le faire à moins d’utiliser une arithmétique de précision arbitraire. Si j’étais coincé sur une île déserte avec une calculasortingce non scientifique, et que je devais calculer le sinus et le cosinus, j’utiliserais probablement des séries de Taylor car les coefficients sont faciles à retenir. Mais les applications du monde réel pour avoir à écrire vos propres fonctions sin () ou cos () sont suffisamment rares pour que vous puissiez utiliser une implémentation efficace pour atteindre la précision souhaitée – ce qui n’est pas le cas de la série Taylor.

    Plage = -pi / 2 à + pi / 2, degré 5 (3 termes)

    • Taylor: erreur maximale autour de 4,5e-3, f (x) = xx 3/6 + x 5/120
    • Chebyshev: erreur maximale autour de 7e-5, f (x) = 0.9996949x-0.1656700x 3 + 0.0075134x 5

    Plage = -pi / 2 à + pi / 2, degré 7 (4 termes)

    • Taylor: erreur maximale autour de 1,5e-4, f (x) = xx 3/6 + x 5 /120-x 7/5040
    • Chebyshev: erreur maximale autour de 6e-7, f (x) = 0.99999660x-0.16664824x 3 + 0.00830629x 5 -0.00018363x 7

    Plage = -pi / 4 à + pi / 4, degré 3 (2 termes)

    • Taylor: erreur maximale autour de 2,5e-3, f (x) = xx 3/6
    • Chebyshev: erreur max autour de 1.5e-4, f (x) = 0.999x-0.1603x 3

    Plage = -pi / 4 à + pi / 4, degré 5 (3 termes)

    • Taylor: erreur maximale autour de 3,5e-5, f (x) = xx 3/6 + x 5
    • Chebyshev: erreur maximale autour de 6e-7, f (x) = 0.999995x-0.1666016x 3 + 0.0081215x 5

    Plage = -pi / 4 à + pi / 4, degré 7 (4 termes)

    • Taylor: erreur maximale autour de 3e-7, f (x) = xx 3/6 + x 5 /120-x 7/5040
    • Chebyshev: erreur max autour de 1.2e-9, f (x) = 0.999999986x-0.166666367x 3 + 0.008331584x 5 -0.000194621x 7

    Je crois qu’ils sont calculés en utilisant Taylor Series ou CORDIC . Certaines applications qui utilisent beaucoup les fonctions sortinggonomésortingques (jeux, graphiques) construisent des tables sortinggonomésortingques au démarrage afin qu’elles puissent simplement rechercher des valeurs plutôt que de les recalculer encore et encore.

    Consultez l’article de Wikipedia sur les fonctions sortinggonomésortingques. Les recettes numériques sont un bon endroit pour apprendre à les implémenter dans le code.

    Je ne suis pas beaucoup un mathématicien, mais ma compréhension de la provenance du péché, du cos et du bronzage est en quelque sorte observée lorsque vous travaillez avec des sortingangles à angle droit. Si vous prenez des mesures des longueurs de côtés d’un groupe de sortingangles différents à angle droit et tracez les points sur un graphique, vous pouvez extraire sin, cos et tan. Comme le souligne Harper Shelby, les fonctions sont simplement définies comme les propriétés des sortingangles à angle droit.

    Une compréhension plus sophistiquée est obtenue en comprenant comment ces rapports se rapportent à la géomésortinge du cercle, ce qui conduit à des radians et à toute cette qualité. Tout est là dans l’entrée de Wikipedia.

    Le plus souvent pour les ordinateurs, la représentation en série est utilisée pour calculer les sinus et les cosinus et ceux-ci sont utilisés pour d’autres fonctions sortinggonomésortingques. L’extension de ces séries à environ 8 termes calcule les valeurs nécessaires à une précision proche de la machine epsilon (le plus petit nombre à virgule flottante non nulle pouvant être conservé).

    La méthode CORDIC est plus rapide car elle est implémentée sur le matériel, mais elle est principalement utilisée pour les systèmes embarqués et non pour les ordinateurs standard.

    Si vous demandez une explication plus physique du péché, du cos et du bronzage, considérez comment ils se rapportent aux sortingangles à angle droit. La valeur numérique réelle de cos (lambda) peut être trouvée en formant un sortingangle à angle droit avec l’un des angles étant lambda et en divisant la longueur du côté des sortingangles adjacents à lambda par la longueur de l’hypoténuse. De même pour le péché, utilisez le côté opposé divisé par l’hypoténuse. Pour la tangente, utilisez le côté opposé divisé par le côté adjacent. Le classique souvenir à retenir est SOHCAHTOA (prononcé socatoa).