Projet pluridisciplinaire TP3 : Les fonctions en Sage et en python
Dans ce TP, le but est d'approfondir l'utilisation des fonctions en python et en sage. Ce sera l'occasion de voir l'utilisation de quelques commandes spécifique à Sage qui permettent de résoudre de nombreuses équations.
Les fonctions mathématiques Sages
Comme nous l'avons vu au 1er TP, Sage permet de définir simplement des fonctions mathématiques à l'aide d'expressions symboliques comme suit :
Ces fonctions possède un certain nombre de méthodes (comme integrate
, derivative
, etc...) listées en utilisant la tapant f. et tabulation
En particulier, il est possible d'obtenir le développement de Taylor à l'ordre N d'une fonction à l'aide de la commande taylor
.
Définissez une fonction non polynomial continue et dérivable en 0 (par exemple sin(x)). Affichez cette fonction ainsi que son développement limité à l'ordre 1,2 et 3 au voisinage de 0 (avec des couleurs différentes).
Résolution des équations
Sage permet notamment de résoudre de manière exacte de nombreuses équations. Dans l'exemple ci-après, on considère une fonction polynomial dont on cherche les racines. Executez cet exemple.
La fonction solve renvoie la liste des solutions de notre équation. Il est également possible de résoudre des systèmes d'équations (même non linéaires) comme suit :
Remarque : L'instruction initiale permet de définir symboliquement 'x1', 'x2' et 'x3' comme des inconnues. Elle est indispensable pour définir le système qu'on souhaite résoudre.
Donner et résoudre un système permettant de trouver le (ou les) points d'intersections de 2 cercles définis par :
Tracez ces deux cercles.
Mêmes questions dans le cas où le 2ème cercle a pour centre (3,5) et le même rayon. Commentez la réponse donnée par Sage.
Mêmes questions dans le cas où le 2ème cercle devient une ellipse (trouvez l'équation sur internet). Tracez les deux courbes (le cercle et l'ellipse)
Par ailleurs, lorsque l'on cherche les solutions d'une équation de type , on peut utiliser implicit_plot
et voir sa solution de façon graphique.
Utilisez implicit_plot
pour afficher un cercle de rayon 1.
Le logiciel sage permet également de résoudre des équations différentielles. Executez l'exemple ci-dessous.
Expliquons un peu cet exemple. Ici, on commence par déclarer une variable 't' et une fonction x dépendant de t. La fonction x(t) est ainsi définie symboliquement et on peut l'utiliser pour écrire notre équation différentielle. La fonction diff(x,t) permet de dériver x par rapport à t. Pour obtenir une dérivée d'ordre supérieur, il suffit d'écrire diff(x,t,2) pour l'ordre 2 par exemple. De plus, le terme ics
correspond à la définition des conditions initiales (Initial ConditionS). La première valeur de la liste est la valeur initiale de et la seconde celle de .
Résoudre l'équation différentielle avec comme condition initial et .
Nous propopns dans ce petit exercice de résoudre le problème suivant : une masse est accrochée à un ressort selon le schéma suivant
|Mur|--/\/\/\/\/\--()
On note x(t) la possition de la masse à l'instant t. Le ressort a les caractéristiques suivantes :
- il est au repos lorsque la masse est à une distance du bord
- et il possède une raideur
Résoudre cette équation et afficher la solution. À l'aide de la commande animate
, affichez une animation simple permettant de voir la masse (dessiner par exemple par un cercle) bouger au cours du temps. Pour les paramètres, prendre et .
Fonctions pythons
Nous venons de (re)voir les fonctions mathématiques en Sage. Dans le TP précédent, nous avons abordé les fonctions pythons. Nous allons revoir un peu ce concept pour voir les différences avec les fonctions Sage (fonctions mathématiques). Commençons par un exemple simple : Ecrivez un appel de la fonction suivante pour qu'elle retourne 13.
Définissez une fonction prenant en argument 2 nombres, et qui retourne
Indication : On pourra utiliser le symbole % pour connaître la parité d'un nombre
Les fonctions définies comme dans l'exemple précédent sont fondamentalement différentes des fonctions mathématiques que nous avons vues précédemment. Pour vous en convaincre executez le code suivant :
L'une des conséquences importante de cette différence est que les fonctions python ne possèdent pas les mêmes méthodes que les expressions symboliques définissant les fonctions Sage. Par conséquent, on ne peut pas utiliser des instructions du type integrate
ou diff
sur les fonctions python.
Écrire une fonction python qui prend en argument une fonction mathématique et un entier , et qui renvoie le 'plot' du développement de taylor à l'ordre de . On définira comme une fonction mathématique. Tester votre code en affichant sur un même graphique son développement de Taylor.
On considère une suite d'instructions données par une liste du type ['h','b','g','d'] indiquant une succesion de déplacement 'haut', 'bas', 'gauche' et 'droite'. Une boule placée en se déplace selon cette suite d'instructions. On suppose qu'à chaque déplacement, elle bouge d'une distance .
Écrire une fonction prenant en paramètre une liste d'instructions et renvoyant la liste de 'plot' présentant les déplacements de la boule. Créer une animation de cette boule à l'aide de la commande animate
.
Simulation d'un système de masses oscillantes.
Revenons à notre système Masse - Ressort et essayons d'aller plus loin. On se propose maintenant d'étudier le cas de 2 masses liées entres elles par deux ressorts comme représentée ci-dessous :
|Mur|--/\/\/\/\/\--(M_1)--/\/\/\/\/\--(M_2)
On note cette fois et les positions des masses et . Les deux ressorts ont les caractéristiques suivantes :
- le premier ressort à une raideur et est au repos lorsque sa longueur est égale à ,
- le second ressort à une raideur et est au repos lorsque sa longueur est égale à .
Pour résoudre ce système d'équations, nous allons procéder en plusieurs étapes :
- Nous allons le réécrire sous la forme d'un système différentiel d'ordre en introduisant deux variables et
- Ensuite, on va définir une fonction F(X), où tel que . Cette fonction F renvoie un vecteur de éléments.
Dans le modèle à une seule masse, nous avions effectué une résolution exacte de l'équation différentielle. C'est-à-dire que nous avions obtenu une formule pour . Pour ce nouveau modèle, nous allons faire une résolution numérique : nous allons calucler des valeurs de et à différents temps mais nous n'aurons pas de formule.
Pour cela, on utilise la fonction desolve_system_rk4
qui prend en paramètre un système d'équation différentielle de type :
(Dans notre cas, le système porte sur quatre équations sur )
La fonction desolve_system_rk4
prend en premier paramètre une liste contenant la du sytème d'équation et en second paramètre la liste des variables . Il faudra aussi lui spécifier ivar
la variable de dérivation ainsi que les conditions initiales (la première valeur est la condition initiale en ).
Avec la commande desolve_system_rk4
, résoudre l'équation différentielle en prenant comme condition initiale .
La fonction desolve_system_rk4
renvoie la solution de notre équation calculée numériquement en une série de temps . On obtient ainsi une liste dont chaque élément est un tableau composé de .
Affichez les solutions et obtenues (utilisez pour cela la commande line2d
avec comme argument la liste des points ). Comme précemment, créez une animation pour montrer le mouvement des deux masses au cours du temps.