Trigonométrie inversé avec une fonction polynomiale arithmét

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
PKSpark
Membre Naturel
Messages: 12
Enregistré le: 25 Fév 2014, 02:05

Trigonométrie inversé avec une fonction polynomiale arithmét

par PKSpark » 25 Fév 2014, 02:23

Voici une fonction qui imite la fonction de trigonométrie inversé de sinus:
Image
Pour convertir cette fonction en cosinus inversé:
arccos(x) = -arcsin(x)+1
En arctan: on remplace x par (x/sqrt(x^2+1)) (pas totalement testé)

Pour convertir le résultat en radians , on multiplie par pi/2,
en degres, on multiplie par 90

Pour tester ma fonction sur le traceur de courbe mafa (http://www.mathe-fa.de/fr)
Changer l'intervalle à (-1;1) sur x et y
Copier - coller cette ligne:

x + ((sqrt(x^2)*(90-(8*x^2)-(45*(sqrt(1-x)+sqrt(1+x)))))/((100*x)+10^-10))+((45*(sqrt(1+x)-sqrt(1-x))-82*x)/100)
dans f(x)

A comparer avec cette fonction
(asin(x)/pi)*2
dans g(x)

Cette fonction est une approximation, et montre un décalage à la seconde décimale si converti en degrées



PKSpark
Membre Naturel
Messages: 12
Enregistré le: 25 Fév 2014, 02:05

par PKSpark » 25 Fév 2014, 03:15

Comparaison avec la fonction sinus inversé:
en rouge ma fonction et en bleu (les pixels qui dépassent les pixels rouges) la fonction arcsin
Image

PKSpark
Membre Naturel
Messages: 12
Enregistré le: 25 Fév 2014, 02:05

par PKSpark » 25 Fév 2014, 16:09

J'ai mis à jour l'entête avec la fonction

Mathusalem
Membre Irrationnel
Messages: 1837
Enregistré le: 14 Sep 2008, 03:41

par Mathusalem » 25 Fév 2014, 16:53

Salut,

Ça sert à quoi ?

A+
Math

PKSpark
Membre Naturel
Messages: 12
Enregistré le: 25 Fév 2014, 02:05

par PKSpark » 25 Fév 2014, 17:02

ça te permet de calculer pontuellement l'angle sans passer par les fonctions arccos, arcsin et arctan actuels, qui utilisent des fonctions type suite, logarithmes, séries...

PKSpark
Membre Naturel
Messages: 12
Enregistré le: 25 Fév 2014, 02:05

par PKSpark » 25 Fév 2014, 18:31

Un exemple de résolution
On veut trouver les angles , , :
Image
On relève les coordonnés A, B, C
A[1;2] B[8;5] C[5;1]

***Calcul de l'angle ***

On considère le triangle ABE, et le théorème de Pythagore pour obtenir la longueur de l'hypoténus:
AB=
Ce qui permet d'obtenir la longueur AE= à l'échelle 1.
En utilisant AE dans ma fonction cosinus inversé l'angle donne 23,22°

On considère ensuite le triangle ACD, on emploie la même méthode pour l'hypoténus (AC=)
puis la longueur AD à l'échelle 1 (AD= )
ce qui donne l'angle = 14,06°

En additionnant et on obtient
= 37,28°



***Calcul de l'angle ***

On applique la même méthode cette fois pour les triangles ACD et BCF.
Le résultat donne = 75,99°
et = 36,87°
d'où = 112,86°



***Calcul de l'angle ***

On utilise la loi des triangles:
= 180-(112,86+37,28) = 29,86°

PKSpark
Membre Naturel
Messages: 12
Enregistré le: 25 Fév 2014, 02:05

par PKSpark » 25 Fév 2014, 19:08

Une image pour montrer la comparaison entre le triangle originel en noir
et celle dont les angles sont calculés par la méthode ci dessus, entrés manuellement via illustrator:
Image

Mathusalem
Membre Irrationnel
Messages: 1837
Enregistré le: 14 Sep 2008, 03:41

par Mathusalem » 25 Fév 2014, 23:36

Code matlab :

Code: Tout sélectionner
function f = fspark(x)
  f = pi/2.*(x + ( sqrt(x.^2).*(90-8*x.^2-45*(sqrt(1-x)+sqrt(1+x)))...
./(100.*x+10^(-10)))+ (45.*(sqrt(1+x)-sqrt(1-x))-82.*x)./100); 

end



Code: Tout sélectionner

ntest = 5000;
x = -1+2*rand(ntest);   %Genere 5000 nombres entre -1 et 1

tic;
acos(x);
toc; %Chronomètre le temps pour calculer acos des 5000 nombres

tic;
fspark(x);
toc; %Chronomètre le temps que ta fonction met pour calculer acos des 5000 nombres.


>> Elapsed time is 0.125813 seconds.
>> Elapsed time is 0.264865 seconds

Ta méthode est 2 fois plus lente, ce qui me renvoie à ma question ci-dessus.

PKSpark
Membre Naturel
Messages: 12
Enregistré le: 25 Fév 2014, 02:05

par PKSpark » 25 Fév 2014, 23:57

Mathusalem a écrit:Code matlab :

Ta méthode est 2 fois plus lente, ce qui me renvoie à ma question ci-dessus.


Matlab utilise une fonction logarithmique à deux arguments pour calculer l'angle,
ce que je présente ici c'est une fonction arithmétique pour calculer l'angle.

Ceci dit hors du contexte, pour ce qui est de la vitesse, c'est noté

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 26 Fév 2014, 09:32

PKSpark a écrit:ça te permet de calculer pontuellement l'angle sans passer par les fonctions arccos, arcsin et arctan actuels, qui utilisent des fonctions type suite, logarithmes, séries...

Salut,
Je pense que ç'est interessant du fait que ta fonction est, comme tu le dit, sans doute plus simple à calculer (ordinateur) qu'en utilisant arctan, mais tu utilise quand même la fonction racine carrée qui n'est pas non plus complètement triviale à évaluer pour un ordinateur...
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21709
Enregistré le: 11 Nov 2009, 21:53

par Ben314 » 26 Fév 2014, 09:35

PKSpark a écrit:Matlab utilise une fonction logarithmique à deux arguments pour calculer l'angle,
ce que je présente ici c'est une fonction arithmétique et linéaire pour calculer l'angle.

Ceci dit hors du contexte, pour ce qui est de la vitesse, c'est noté

Concernant la vitesse, sauf erreur, certaine fonctions transcendantes (dont l'arctangente) sont directement implémantées dans le coprocesseur de calcul des machines actuelles ce qui explique que dans un language de programation un peu évolué ça aille plus vite de faire directement du arcos.
Pour faire un test un peu plus pertinent, à mon avis, il faudrait sortir d'un tiroir un vieux compilateur datant de l'époque où il n'y avait pas de coprocesseurs de calculs sur les machines pour voir ce que ça donne...

Aprés, d'un autre coté, ne sachant pas comment est implémentés la fonction arctan dans le copro., ni même comment elle était évalué par le processeur et ces 4 (voire 2) opérations, avant qu'il n'y ait des copro., je suis bien incapable de dire si c'est mieux ou moins bien que ce qu'on fait usuellement...
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

mathafou
Membre Relatif
Messages: 325
Enregistré le: 12 Fév 2013, 09:48

par mathafou » 26 Fév 2014, 19:03

PKSpark a écrit:et linéaire

bonjour,
j'adore le "linéaire" avec des racines carrées en pagaille ....
(j'adore aussi le du premier post)
ça donne la "couleur" de ce sujet...

PKSpark
Membre Naturel
Messages: 12
Enregistré le: 25 Fév 2014, 02:05

par PKSpark » 26 Fév 2014, 23:40

mathafou a écrit:bonjour,
j'adore le "linéaire" avec des racines carrées en pagaille ....
(j'adore aussi le du premier post)
ça donne la "couleur" de ce sujet...


Aux temps pour moi c'est corrigé (sur le moment j'avais les jetons hum)
Pour la racine du carré de x, tu peux remplacer ça par la valeur absolue si tu veux;
moi je garde ça pour snipper plus facilement entre les sites de traçage

PKSpark
Membre Naturel
Messages: 12
Enregistré le: 25 Fév 2014, 02:05

par PKSpark » 27 Fév 2014, 02:30

Ben314 a écrit:Concernant la vitesse, sauf erreur, certaine fonctions transcendantes (dont l'arctangente) sont directement implémantées dans le coprocesseur de calcul des machines actuelles ce qui explique que dans un language de programation un peu évolué ça aille plus vite de faire directement du arcos.
Pour faire un test un peu plus pertinent, à mon avis, il faudrait sortir d'un tiroir un vieux compilateur datant de l'époque où il n'y avait pas de coprocesseurs de calculs sur les machines pour voir ce que ça donne...

Aprés, d'un autre coté, ne sachant pas comment est implémentés la fonction arctan dans le copro., ni même comment elle était évalué par le processeur et ces 4 (voire 2) opérations, avant qu'il n'y ait des copro., je suis bien incapable de dire si c'est mieux ou moins bien que ce qu'on fait usuellement...


Tester sur un terrain plus neutre est une bonne idée, du coup j'ai codé un run sur c++ entre la fonction logarithmique de arcsin (celle utilisant le nombre imaginaire i comme sur mathlab),
sachant que j'ai du inclure la librairie pour accéder à la valeur i; et ma fonction.
Les résultats divergent beaucoup entre chaques run, alors j'ai lancé un run avec 10 tests consécutifs, en alternant la fonction log et f(x) ce qui donne:
*log*****f(x)*
249ms - 203ms
249ms - 203ms
250ms - 218ms
250ms - 218ms
249ms - 203ms
Donc ma fonction comparé avec log( est plus rapide;
Par contre, f(x) converti à la syntaxe de
(chaque constantes nécessitant d'être déclaré en variables) c'est plus lent:
*log*****f(x)*
249ms - 453ms
249ms - 453ms
249ms - 468ms
250ms - 468ms
250ms - 468ms
Apparement c'est bien l'emploi des 5 occurences de racines carrés qui ralenti le plus la fonction. Dommage!

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 6 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite