Prise en main
Premier pas vers le caclul formel !
Découvrons les fonctionnalités de base de SageMath à travers des exemples de calculs élémentaires.
Pour se familiariser avec l'environnement de SageMath, nous traitons des opérations élémentaires telles que l'addition "+", la soustraction "-", la multiplication "*", la division "/", et le calcul de puissance avec "**" ou "^" sur des nombres. Progressivement, nous introduisons l'aspect calcul formel de SageMath.
Allons-y !
Lancez SageMath.
Vous pouvez le faire en utilisant `sage-notebook` (Jupyter Notebook).
Lorsque la session Sage est lancée, elle s'ouvre dans un navigateur web affichant une page appelée "bloc-notes" (ou "worksheet" en anglais). Cette page est composée de cellules (sous forme de cadres rectangulaires) où vous pouvez saisir des commandes et des formules.
N.B. Lors du premier démarrage, Sage peut demander une identification.
Exploration de l'environnement de Calcul avec SageMath:
La plateforme SageMath adopte une approche de question-réponse à travers ces cellules.
Saisir vos code --> Exécuter (tapez [Shift+Entrée] ou cliquez sur "Run") --> Une réponse, dite Sortie, sera affichée dans une nouvelle cellule.
Notez:
Lorsque vous tapez sur [Entrée], rien ne passera, juste vous fait passer à la ligne suivante.
Pour effacer une cellule, effacez d'abord son contenu, puis appuyez sur la touche (retour arrière).
Pour effacer toutes les variables, choisissez "Restart worksheet" dans le menu Action en haut de la page.
Instructions générales du ce cours:
Tout au long de ce guide, nous préfixerons les codes source par "Sage :" et les sorties de ces codes après exécution par "Sortie:".
Un commentaire pour SageMath est placé après le symbole dièse (#). Tout ce qui est après ce symbole sur la ligne n’est pas interprété par le moteur de SageMath.
Votre premier calcul avec Sage !
Calculons 2*3+7^3:
Sage : 2*3+7^3 # N'oubliez pas d'Exécuter ( tapez sur [Shift+Entrée] ou sur "Run")
Sortie : 349
Notions de 'variable' et 'affectation' dans SageMath.
Le symbole "=" joue le rôle d'affectation. Veut dire quand on écrit, par exemple 'v=3', on comprend qu'on a affecter à la variable v la valeur 3. Si on saisi juste après cela, par exemple v=v+4, cela se comprend qu'on affecte à la variable v la dernière valeur de la variable v et 4.Attention : Sage fait la distinction entre majuscules et minuscules.
Exemple:
Sage : v=2*3+7^3 # Rien ne se passera après l'exécution, mais Sagemath a compris que 2*3+7^3 est affecté à v.
Sage : v # Après exécution, on peut demander la valeur de v
Sortie : 349
Sage : v - 49
Sortie : 300
Sage : v # Après exécution, on peut demander la valeur de v
Sortie : 349
Sage : v= v - 49 # la valeur de v est modifiée
Sage : v
Sortie : 300
N.B. Pour utiliser dans la suite de votre session de travaille les résultats des calculs effectués, il est recommandé d'affecter ces résultats à des variables (stockage d'une valeur).
Le symbole "==" pour vérifier l'égalité!
Tapez le code suivant (on peut mettre plusieurs commandes dans une même ligne en les séparant avec un point-virgule ou une virgule.)
Sage : v; v==7; v>7
Sortie : 349; False ; True
La commande v==7 s'interprète: est-ce que 7 et v représente le même objet (ont la même valeur). De même v>7 s'interprète: est-ce que v est supérieur à v (on parle de variable booléenne qui renvoie True ou False).
On peut aussi évaluer plusieurs expressions à la fois en les mettant dans le même cadre. On passe à la ligne avec la touche Entrée. Mais, seuls les résultats de calculs dans la dernière ligne sont affichés.
Sage : b=a%13 # % renvoie le reste de la division euclidienne de a par 13
A=13*(a//13)+b # // renvoie le quotient de la division euclidienne de a par 13
A==a
Sortie : True
Pour réinitialiser les variables, on peut utiliser la méthode reset() :
Sage : d=7^2; d; d==7^2
Sortie : 49; True
Sage : reset(); d==7^2
Après reset(), sagemath ne connaît plus la variable d. Ainsi, un message d'erreur s'affichera.
Si votre code est très long et que vous souhaitez le diviser en deux lignes (ou plus), utilisez le caractère "\" entre vos lignes comme suit :
Sage : 1+2+3+4+5+ \
6+7
Sortie : 28
Essayez sans le caractère "\" :
Sage : 1+2+3+4+5+
6+7
Priorité des opérateurs arithmétiques binaires :
SageMath suit l'ordre habituel des opérations. Voir : https://doc.sagemath.org/html/fr/tutorial/appendix.html
Vous pouvez modifier l'ordre dans lequel les expressions sont évaluées en utilisant des parenthèses ( ).
Plus d'exemples de calcul :
https://doc.sagemath.org/html/fr/tutorial/tour_assignment.html
Calcul des Nombres Rationnels, des Racines Carrées et des Réels
SageMath renvoie la forme réduite d'une fraction :
Testez, par exemple :
Sage: 20/10; 10/20.
En général, SageMath renvoie une forme simplifiée d'une image de ces fonctions prédéfinies comme la racine carrée (voir le glossaire de quelques fonctions mathématiques prédéfinies par SageMath).
Testez, par exemple :
Sage: sqrt(9); sqrt(20)
Sortie: 3
2*sqrt(5)
Pour obtenir une approximation d'un nombre, on peut utiliser l'une des commandes suivantes :
Sage: n(sqrt(20)); N(sqrt(20)); numerical_approx(sqrt(20))
Elles fournissent les mêmes résultats. Pour comprendre la différence, testez l'exemple :
Sage: N(sqrt(20), digits=6); n(sqrt(20), digits=6); numerical_approx(sqrt(20), prec=6)
Alors, n, N, et numerical_approx sont des fonctions de SageMath qui renvoient une approximation du nombre sous forme décimale avec, par défaut, 53 bits de précision. Cependant, la fonction numerical_approx accepte en argument optionnel `prec`, qui indique le nombre de bits de précision requis, et la fonction n ou N accepte en argument optionnel, `digits`, qui indique le nombre de décimales demandées.
Notez que "n" et "numerical_approx" agissent aussi comme des méthodes contrairement à N. Ainsi, on peut écrire :
Sage: sqrt(20).n(); sqrt(20).n(digits=6); sqrt(20).numerical_approx(); sqrt(20).numerical_approx(prec=6)
Ne vous inquiétez pas ! "fonction", "méthode" et même "procédure" sont des termes utilisés en programmation que vous allez découvrir au bon moment. Mais, si vous êtes curieux, vous pouvez demander à ChatGPT une explication simple :
"Quelle est la différence entre une fonction, une méthode et une procédure en programmation ?"
N.B. Comme vous l'avez remarqué, n et N sont utilisées comme des fonctions, ainsi il est recommandé de les éviter pour définir une variable, tout comme pour tout autre nom d'une fonction prédéfinie par Sagemath : sin(), cos(), ...
On peut avoir une représentation décimale d'une fraction en écrivant l'un des termes de la fraction sous sa forme décimale. Par exemple :
Sage : 10./20
La sortie sera : 0.500000000000000
En fait, par "10." on a converti le type entier (implicitement déclaré) de 10 au type de virgule flottante. On peut le faire aussi via la fonction RR().
Exemple :
Sage : a = RR(10); type(a); a/20
Vous avez bien compris que la fonction `type()` renvoie le type de l'élément. Une autre fonction similaire qui nous informe de la nature de l'objet mathématique est `parent()`. Sauf cette dernière renvoie à la structure algébrique où l'objet appartient. Nous en parlons de cela dans la suite.
Pour l'instant, il faut noter que SageMath est fortement typé et chaque type est caractérisé par ses propres opérations, fonctions et méthodes. Les ensembles numériques courants sont :
- Entiers positifs : `N = NN` par ex. 5, 5*9,
- Entiers : `Z = ZZ` par ex. -2, -1000, 10^23
- Rationnels : `Q = QQ` par ex. 1/33, 1/1, -42/1
- Décimaux : `R ≈ RR` par ex. 03.33, sqrt(3), sin(8)
- Complexes : `C ≈ CC` par ex. 3+2*i, 1/5-3*i
Il y a d'autres types également utiles comme une chaîne de caractères "str" ou élément booléen de type "bool" (False ou True). Voir la section ci-dessous pour découvrir quelques exemples d'utilisation de ces derniers types :