Tutoriel SAGE
Une introduction éclair.
Si vous lisez ceci c'est parce que vous avez ouvert une session du notebook de SAGE, ou encore que vous l'exécutez dans un des serveurs dédiés. Comme bien de logiciels, SAGE peut aussi être utilisé via le terminal, mais laissons de côté cette approche pour l'instant. Vous verrez plusieurs "cellules" où; on doit entrer le code SAGE.
Déplacez le curseur dans l'espace entre deux cellules, vous verrez une ligne bleue apparaître. Si on clique dessus, une nouvelle cellule apparaît, tandis que si on fait Ctrl + click
, c'est une petite section pour entrer du texte, comme celui-ci qui apparaît. Dans ces sections, on peut aussi entrer du texte , ce qui est très bien si on veut écrire des équations. Par ailleurs, en faisant un double click sur une de ces sections, vous accédez au texte, et pouvez l'éditer. Corrigez ceci : .
Bien entendu, le résultat est . SAGE sait faire ceci, et bien d'autre choses. Pour exécuter les commandes / calculs d'une cellule, il faut faire Shift + Entrée
. Faites-le après la cellule ci-bas, une fois directement, puis une autre après avoir coché la case
Si on veut une valeur numérique on doit faire:
ou encore
Vous le devinez, SAGE sait reconnaître le type d'objets... pour les rationnels, il opère de façon exacte, on doit court-circuiter un peu ceci pour avoir une valeur décimale.
Deux astuces importantes:
Tab
si vous commencez à écrire une commande, puis appuyez sur la toucheTAB
, les commandes commençant comme celle que vous avez commencé à entrer s'afficheront. Vous pouvez alors en choisir une, puis? le point d'interrogation après une commande, suivi de
Shift + Entrée
ramène à la documentation de la commande en question, ce qui comporte des exemples.
Faites Tab
dans la cellule ci-bas.
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-9-13d3e83b7087> in <module>()
----> 1 numerical_
NameError: name 'numerical_' is not defined
Variables et quelques calculs symboliques
Faisons quelques calculs symboliques. Il faut déclarer les variables, toutes sauf .
Pour résoudre des équations, on entre la liste des équations (avec deux signes d'égalité), puis la liste des variables:
Bien entendu on a intérêt à faire solve?
puis Entrée.
Listes et repétition
Faire des listes ou des ensembles est très facile, la syntaxe est presque celle qu'on utilise en maths: s'obtient au moyen de:
Le ème élément de la liste est le premier... eu... un exemple!
Quelques graphiques
Quelques graphiques maintenant. En 2d, pour commencer.
On peut créer les objets graphiques séparément, puis les montrer ensemble. Plus haut nous avons crée le graphique de la fonction pour , en rouge. Traçons maintant la courbe de la fonction pour , en bleu et pointillés.
Disons que je veux calculer une approximation d'une intégrale, naïvement. Pensons à entre et . On va commencer par définir la fonction, puis faire une somme de Riemann avec les points milieux.
va être le nonbre de divisions, le pas ici est donc
Pour chaque entre et , on construira
Le point mileu de chaque intervale se construit facilement, c'est
On doit après évaluer en ces points, multiplier par puis additionner.
On fera les choses avec des listes, mais bien sur, ça se fait avec des boucles.
On crée la liste des points milieux:
On évalue en chacun de ces points puis on multiplie par , ce qui fait une autre liste, qui s'appelle F.
On calcule la somme, en mettant .n()
à la fin, pour forcer un résultat numérique exprimé en notation décimale.
Mais bien entendu SAGE peut faire le calcul exact de cette intégrale (et plusieurs autres).
COURBES ORTHOGONALES
Un autre exemple : dessiner les courbes orthogonales aux courbes . Pour chaque valeur de on considère la courbe d'équation .
Ci bas on a dessiné les courbes corerspondant aux valeurs de qui varient entre -4 et 4 par pas de .5 (la dernière valeur est exclue, il s'agit d'une liste) elles sont en bleu dans la figure plus bas.
On cherche une famille de coubes (rouges) qui coupent chacune des courbes bleues, et en chaque point d'intersection les tangentes aux courbes bleues sont orthogonales aux tangentes aux courbes rouges (voir le résultat plus bas).
De l'équation on tire directement , de sorte qu'en chaque point d'une courbe bleue , la pente de la tangente est précisément . La pente d'une droite orthogonale est le négatif de l'inverse, c'est à dire . On cherche donc . De l'équation originale on peut éliminer , de sorte que, en remplaçant on trouve l'équation différentielle
Ceci peut se résoudre sans trop de peine, car c'est une équation à variables séparables, au pire une table d'intégrales donne l'intégrale de . Mais essayons plutôt de le faire avec SAGE.
Quelques remarques:
L'option
show_method = True
demande à SAGE de nous dire comment il a fait pour résoudre l'équation différentielle. Comme nous, il s'est rendu compte qu'il s'agissait d'une équation aux variables séparables.Dans la solution présentée par SAGE il y a une constante d'intégration , nous obtenons donc pour chaque valeur de une nouvelle courbe. Ce n'est pas le même que nous avions déjà.
Le terme vient d'intégrer . Or en réalité , il manque la valeur absolue, et le que nous avons ici est la constante ci-haut.
Les courbes de la famille orthogonale sont des courbes données implicitement (c'est ce qu'on obtient quand on résoud l'équation différentielle). On peut les tracer comme telles, il s'agit des courbes . Trouvez comment ceci est fait avec la commande
implicit_plot
.
Notez que les listes F1 et F2 sont les listes de courbes, donc d'objets graphiques. Ainsi, afficher la somme des listes, affiche toutes les courbes des listes. Probablemen ce n'est pas la chose la plus efficace à faire...
Que se passe-t-il si on laisse tomber les valeurs absolues?
Voyons maintenant quelques courbes en coordonnées polaires. Habituellement, on écrit , si on donne l'équation explicitement.
Par exemple, est un cercle, car en multipliant les deux côtés par on obtient , ou encore ce qui équivaut à
Voyons maintenant quelques courbes en coordonnées polaires. Habituellement, on écrit , si on donne l'équation explicitement.
Par exemple, est un cercle, car en multipliant les deux ccôtés par on obtient , ou encore ce qui équivaut à .
Finalement, les courbes paramétriques pour
Un peu d'algèbre linéaire
Voyons maintenant comment faire les manipulations usuelles en algèbre linéaire : déclarer des vecteurs, faire le produit vectoriel (pour les vecteurs dans ), produit scalaire, norme... et il en va de même pour les matrices.
Polynomes de Taylor
Pour finir, un peu de polynômes de Taylor, en une ou deux variables.
On peut, bien sur calculer plusieurs polynômes d'un seul coup, et faire les dessins sur une même figure. Ci-bas le graphique de la fonction sur (c'est ce que le paramètre contrôle), et les plynômes de Taylor de degrés inférieurs à 20. On remarquera comment on fait changer les couleurs des courbes.
Par ailleurs, on a intérêt à faire Taylor?
.
Voici comment calculer le polynôme de Taylor autour de , on obtient une somme de puissances de .
Finalement, en deux variables: Calculons le polynôme de Taylor de degré de la fonction autour du point .
Bien entendu, ceci pourrait se faire (dans ce cas) comme le produit de deux polynomes de Taylor (attention aux degrés)
Quelques graphiques en 3D
On peut dessiner les surfaces de plusieurs façons différentes, dépendament de comment la surface est spécifiée:
Paramétriquement, c'est à dire donnée par est une paramétrisation d'une surace . Ici on suppose que .
Explicitement, c'est à dire si est l'ensemble des points tels que , pour .
Implicitement, c'est à dire si est l'ensemble des points tels que .
Voyons quelques exemples.
Exemple : dessiner la région de l'espace comprise entre les surfaces et
Dessinons les deux surfaces explicitement:
Le graphique n'est pas tellement beau, essentiellement parce que décrivent un rectangle. L'idéal serait que seulement les valeurs de qui se trouvent sous la région commune soient considérées.
Pour ceci, on paramétrise les surfaces (on verra en détail comment faire dans le cours, on peut simplement ignorer les calculs qui suivent)
Calculons d'abord l'intersection des deux surfaces, c'est à dire
C'est l'équation d'une ellipse, à savoir .
Une paramétrisation de celle-ci est pour .
La courbe d'intersection entre les deux surfaces est où .
On va utiliser la paramétrisation des surfaces, pour que les dessins soient plus beaux... Les paramètres seront en quelque sorte les coordonnées polaires, mais avec les noms . Ainsi , et pour et est une description de l'ellipse et tout ce qu'il y a dans son intérieur: en effet on "multiplie" l'ellipse par le paramètre qui varie entre et , ca remplit la région enfermée par l'ellipse. Pour ce qui est de l'ellipse il suffit de faire .
Les surfaces sont ainsi , ou, paramétriquement . Pour c'est pareil.
Flot d'un champ et lignes de courant : étant donné uin champs de vecteurs , une ligne de courant du champ est une courbe donnée par une paramétrisation telle qu'en tout point le vecteur vitesse est égal au champ. En d'autres termes
Trouver des lignes de courant revient à résoudre certaines équations différentielles. Par chaque point il y a une unique ligne de courant, on peut penser à la ligne de courant comme la trajectoire qu'un objet mobile suivrait, étant donné que sa vitesse doit coïncider avec le champ .
L'ensemble de toutes les lignes de courant s'appelle le flot du champ de vecteurs.
Ci-bas, trois lignes de courant, calculées "manuellement" pour le champ . L'équation différentielle associée est simplement . En effet, si on a une courbe donnée explicitement , la pente de la tangente en et , de sorte qu'un vecteur directeur de la tangente est . La recherche d'une ligne de courant pour le champ c'est précisément la recherche d'une courbe dont un vecteur tangent au point et .