Archive

Articles taggués ‘sinus’

Comment calculer la dérivée de la fonction sinus?

31/07/2010 Valvino 4 commentaires

Le programme des classes scientifiques au lycée — en tout cas ce qu’il en reste — étudie la notion de dérivation d’une fonction f définie sur un intervalle ouvert I \subset \mathbb R. Le nombre dérivé f'(a) de f au point a\in I — s’il existe — est défini par

\displaystyle f'(a)=\lim_{h \to 0} \frac{f(a+h)-f(a)}{h}.

Par exemple, si f(x)=x^2 pour x \in \mathbb R, on a d’après une identité remarquable bien connue

\displaystyle \frac{f(a+h)-f(a)}{h}=\frac{(a+h)^2-a^2}{h}=\frac{a^2+h^2+2ah-a^2}{h}=h+2a

d’où

\displaystyle f'(a)=\lim_{h \to 0} \frac{f(a+h)-f(a)}{h}=\lim_{h \to 0}h+2a=2a.

On admet au lycée que la fonction sinus est dérivable sur \mathbb R tout entier et que \sin'(a)=\cos(a) pour tout a \in \mathbb R.  On le démontre ensuite dans les classes supérieures, bien souvent à l’aide des séries entières. Je propose ici de le montrer par des moyens géométriques. Certes le raisonnement suivant est loin d’être inattaquable sur le plan de la rigueur pure, mais je le trouve tout de même intéressant.

Tout d’abord en utilisant une formule trigonométrique, on a

\displaystyle \frac{\sin(a+h)-\sin(a)}{h}=\frac{\sin(a)\cos(h)+\sin(h)\cos(a)-\sin(a)}{h}

d’où

\displaystyle \frac{\sin(a+h)-\sin(a)}{h}=\sin(a)\frac{\cos(h)-1}{h}+\frac{\sin(h)}{h}\cos(a).

On trouvera une preuve géométrique de cette formule trigonométrique dans ce lien. Il nous reste donc montrer que

\displaystyle\lim_{h \to 0}\frac{\sin(h)}{h}=1\quad\text{et}\quad\lim_{h \to 0}\frac{\cos(h)-1}{h}=0.

Considérons la figure ci-dessous, où le cercle est de centre O et de rayon égal à 1 :

Figure

On a OA=\cos(h), OB=\sin(h) et IC=\tan(h). On observe alors que le triangle OIM d’aire \sin(h)/2 est strictement inclus dans le secteur angulaire délimité par O, I et M d’aire h/2, qui est lui-même strictement inclus dans le triangle OIT d’aire \tan(h)/2. On en déduit donc que pour tout h\in]0,\pi/2[

\displaystyle\sin(h)<h<\tan(h).

En passant à l’inverse et en divisant par \sin(h), on obtient

\displaystyle\cos(h)<\frac{\sin(h)}{h}<1

d’où par le théorème des gendarmes

\displaystyle\lim_{h \to 0^+}\frac{\sin(h)}{h}=1.

Comme la fonction h\in\mathbb{R}-\{0\}\mapsto\sin(h)/h est paire, on a bien

\displaystyle\lim_{h \to 0}\frac{\sin(h)}{h}=1.

On essaye pour la deuxième limite de se ramener à la première. Le théorème de Pythagore nous donne un lien entre le sinus et le cosinus : \sin^2(h)+\cos^2(h)=1. On a alors

\displaystyle\frac{\cos(h)-1}{h}=\frac{\cos(h)-1}{h}\frac{\cos(h)+1}{\cos(h)+1}=\frac{\cos^2(h)-1}{h(\cos(h)+1)}=\frac{-\sin^2(h)}{h(\cos(h)+1)}

d’où

\displaystyle\frac{\cos(h)-1}{h}=-\frac{\sin(h)}{h} \frac{\sin(h)}{\cos(h)+1}.

On fait alors tendre h vers 0 et on obtient bien

\displaystyle\lim_{h \to 0}\frac{\cos(h)-1}{h}=0.

Comment calcule une calculatrice ?

Naïvement, je pensais qu’une calculatrice (ou tout logiciel de calcul scientifique) utilisait les développements en série pour calculer les fonctions usuelles : trigonométriques (sinus, cosinus, tangente), exponentielle, logarithme, etc. En fait, il n’en est rien et on utilise des astuces bien précises qui diminuent fortement la complexité des calculs.

Par exemple, on utilise l’algorithme CORDIC (COordinate Rotation DIgital Computer) inventé en 1959 par Jack E. Volder. Détaillons-le sommairement.

On se donne un angle en radian \alpha (que l’on suppose compris entre 0 et \pi/2, on peut toujours s’y ramener par des formules trigonométriques du genre \sin(x+\pi/2)=\cos(x), etc…). On va calculer par itération un vecteur v_n qui représente un point sur le cercle unité. Pour cela, on lui fait subir des rotations d’angles \gamma_n choisis judicieusement, par exemple tels que \tan \gamma_n= 2^{-n}. L’avantage est qu’en binaire la multiplication par 2^{-n} revient à un simple décalage de virgule. Le vecteur v_n, d’angle correspondant \alpha_n, convergera alors vers la valeur exacte v, d’angle correspondant \alpha.

On a donc une relation de récurrence du type

\displaystyle v_{n+1}=\begin{pmatrix} \cos \gamma_{n} & -\sin \gamma_{n} \\ \sin \gamma_{n} & \cos \gamma _{n}\end{pmatrix}v_n

d’où en factorisant par \cos \gamma_n

\displaystyle v_{n+1}=\cos(\arctan(2^{-n}))\begin{pmatrix} 1 & -\sigma_{n} 2^{-n} \\ \sigma_{n} 2^{-n} & 1 \end{pmatrix}v_n

\sigma_n = \pm 1 (sens de la rotation). On le calcule en regardant le signe de l’angle actuel \alpha_{n+1}=\alpha_n-\sigma_n \arctan2^{-n}.

Il suffit alors d’avoir en mémoire les différentes valeurs de \arctan2^{-n} (on peut même utiliser l’approximation \arctan2^{-n} \sim 2^{-n} pour n un peu grand) pour se retrouver avec un algorithme qui n’utilise que des additions, des décalages de virgules et une seule multiplication finale par

\displaystyle\prod_{n=0}^{N-1} \cos(\arctan(2^{-n})) = \prod_{n=0}^{N-1} \frac{1}{\sqrt{1 + 2^{-2n}}},

valeurs que l’on peut aussi stocker à l’avance. Malin, non?

On peut généraliser ce genre de procédés. Pour plus d’informations : http://en.wikipedia.org/wiki/CORDIC