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 !


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.


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:


Instructions générales du ce cours:



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


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).

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).


 

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



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.


Sage : 1+2+3+4+5+ \

               6+7

Sortie : 28


Essayez sans le caractère "\" :

Sage : 1+2+3+4+5+  

               6+7


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


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)


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 :