Affectations et calculs élémentaires
Procédures
Tests et boucles
Algèbre linéaire (Vecteurs, Matrices, Systèmes linéaires)
Tracés et graphiques
Pour plus de détails on pourra consulter les liens présents dans ce tutoriel, consulter le tutoriel officiel (https://doc.sagemath.org/html/fr/tutorial/index.html) ou le livre très complet de Calculs mathématiques avec Sage(http://dl.lateralis.org/public/sagebook/sagebook-web-20130530.pdf). Pour accéder à la documentation d'une fonction spécifique on peut directement utiliser la commande $\mathtt{help}$
help(max)
a = 2
a+1
show(a+1)
La commande $\mathtt{show}$ peut être utilisé pour des éléments de types différents.
show('a+1 = ', a+1)
2^10
A = [0,1,2]
show('Le deuxième élément est : ', A[1])
On peut utiliser le symbole $\mathtt{..}$ pour définir une liste.
B = [1..4]
B
Pour créer une liste ne contenant que des 0 on peut utiliser la commande suivante
[0 for j in [1..5]]
Pour concaténer deux listes on en fait la somme.
B+[5]
C = [1..6]
C
len(C)
Le dernier élément de la liste $\mathtt{C}$ est donc $\mathtt{C[len(C)-1]}$ (car le premier est celui d'indice 0). Pour plus de commodité on peut accéder au dernier élément d'une liste en utilisant l'indice $\mathtt{-1}$
print C[len(C)-1]
print C[-1]
Pour plus d'informations sur la création, la manipulation et les opérations possibles pour une liste on pourra consulter la page http://sagemath.wikispaces.com/Lists
x=2534/4518
show(x)
x.n()
ou celle-ci si l'on veut préciser le nombre de chiffres à afficher
pi.n(digits=3)
Le constructeur pour définir une procédure est $\mathtt{def}$ suivi du nom de la procédure puis des arguments entre parenthèses (si la procédure ne prend pas d'argument en entrée on indique $\mathtt{(}$ $\mathtt{)}$). On n'oubliera pas non plus de terminer l'instruction par $\mathtt{:}$.
def f(x):
return 2*x+1
f(0)
Pour appliquer une fonction à une liste on peut utiliser l'une des deux écritures ci-dessous
A = [0,1,2,3]
def carre(x):
return x^2
B = [carre(w) for w in A] # Le fonctionnement de l'instruction for est détaillé au paragraphe suivant
show('B=',B)
C = map(carre,A)
show('C=',C)
Un exemple plus complet de procédure est donné dans le paragraphe 'Tests et boucles'.
True and False
True or False
if True:
print('le test est verifie')
a = 2
a != 3
On peut tester des doubles inégalités sans utiliser directement le constructeur $\mathtt{and}$.
i = 4
1 < i < 10
def Booleen (b):
if b==0:
return False
elif b==1:
return True
else:
print('argument non admissible')
Booleen(0) or Booleen(1)
i=0
while i<= 2:
i=i+1
i
n = 3
show(range(n))
for i in range(n):
print(i)
Pour l'instruction $\mathtt{range}$ on peut spécifier un autre indice de départ, un autre indice de fin ainsi que le pas. De même, pour l'instruction $\mathtt{..}$.
show(range(0,11,2))
show(range(5,1,-1))
show([0..11,step=2])
show([5..1,step=-1])
Cependant on peut faire parcourir à l'indice n'importe quelle liste donnée dans l'instruction (sans que cette liste soit spécifiquement à valeurs entières ni même tous du même type).
TableauTest = ['t','e','s','t', 2+2]
for i in TableauTest:
print(i)
L'utilisation de boucles $\mathtt{for}$ est très utile pour travailler avec les listes.
# Création d'une liste de 0 de taille 5
L = [0 for j in range(5)]
show(L)
# Parcours d'une liste de couples et récupération de la liste des premières composantes de chaque couple
L2 = [(0,1),(2,3),(4,5),(6,7)]
show('Liste complète ' , L2)
L2extrait = [l[0] for l in L2]
show('Liste des premières composantes ', L2extrait)
A = vector([0,1,2])
A[1]=3
A
On notera qu'un vecteur est affiché avec des parenthèses et non des crochets comme pour une liste. Ce ne sont donc pas les mêmes objets.
B= [0,3,2]
show(A)
show(B)
A == B
Pour créer un vecteur composé uniquement de 0 on peut utiliser la commande suivante
vector([0 for j in [1..5]])
Lorsqu'un vecteur est principalement composé de zéros on peut utiliser par exemple la commande $\mathtt{vector({3:1,5:10})}$ qui crée un vecteur composé uniquement de zéros sauf un $3$ dans la case numéro $1$ et un $5$ dans la case numéro $10$. La taille du vecteur est donnée par la position du dernier élément non nul spécifié.
vector({1:3,10:5})
v = vector([1..6])
len(v)
A = vector([0,1,2])
A[1] = 3
show(A)
A[1] = 1/4
On peut par contre spécifier au départ le type. La commande $\mathtt{vector(ZZ,[0,1,2])}$ permet d'indiquer que ce vecteur pourra contenir des entiers (non nécessairement positifs). La commande $\mathtt{vector(QQ,[0,1,2])}$ permet d'indiquer que ce vecteur pourra contenir des rationnels. La commande $\mathtt{vector(RR,[0,1,2])}$ permet d'indiquer que ce vecteur pourra contenir des réels.
show(vector([0,1,2]))
show(vector(RR,[0,1,2]))
A = vector(QQ,[0,1,2])
A[1] = 1/4
A
A = matrix([[1,0],[0,1]])
A
B = matrix(2,2,[1,0,0,1]) # les deux premiers arguments sont le nombre de lignes et le nombre de colonnes
B
M = matrix([[1,2],[3,4]])
b = vector([2,1])
M*b
show(M^(-1))
show(M*M^(-1))
M = Matrix([[0, 1 , 2],[3,4,5]])
print M.nrows()
print M.ncols()
show(M[0])
show(M[0][1])
M = Matrix([[1..5],[6..10]])
show(M)
show('Troisieme colonne : ', M[:,2])
show('Trois derniers elements de la premiere ligne : ', M[0,2:])
show(matrix(QQ,[[1/2,1/4],[2,1/10]]))
show(matrix(RR,[[1/2,1/4],[2,1/10]]))
Un certain nombre de fonctions sont implémentées dans $\mathtt{Sage}$ pour calculer les valeurs propres, vecteurs propres, déterminant etc... On pourra par exemple se reporter au document https://perso.univ-rennes1.fr/gwezheneg.robert/sage-long.pdf
Pour résoudre un système linéaire on peut utiliser deux méthodes : implémenter directement le système linéaire ou utiliser la matrice associée. On présente ici les deux méthodes de résolution sur le système \begin{equation} \left{ \begin{aligned} & 2x + y = 0 \ & x - y = 1 \end{aligned} \right. \end{equation}
x = var('x') # ainsi la variable x est connue et l'on peut donc l'utiliser dans la suite
y = var('y')
eq1 = 2*x + y == 0
eq2 = x - y == 1
solve([eq1, eq2],x,y) # on spécifie d'abord les équations puis les variables
M = matrix([[2,1],[1,-1]])
b = vector([0,1])
M\b # M\b est la solution x de M*x=b soit x = M^(-1)*b
x = var('x')
f(x) = x^2
plot(f,-3,3)
Pour connaitre les différences entre les différentes définitions possibles des fonctions on pourra consulter http://doc.sagemath.org/html/fr/tutorial/tour_functions.html
pc = plot(cos,0,pi,rgbcolor=(1,0,0),legend_label='un morceau de la courbe de $\cos$')
pc += plot(cos,pi,2*pi,linestyle='--',rgbcolor=(1,0,1))
ps = plot(sin, 0,2*pi, rgbcolor='blue',legend_label='La fonction $x \mapsto \sin(x)$')
pc+ps
line([(0,0),(1,2),(2,0)])
Si l'on souhaite afficher uniquement les points sans les relier, on préférera la commande $\mathtt{point}$.
point([(0,0),(1,2),(2,0)])
Si l'on connait d'une part la liste des abscisses et d'autre part la liste des ordonnées alors la fonction $\mathtt{zip}$ permet de créer la liste des couples adéquate.
x = [0,1,2]
y = [0,2,0]
show(zip(x,y))
line(zip(x,y))+point(zip(x,y),rgbcolor= 'red')