A quelques exceptions mineures près, Sage utilise le langage de programmation Python, si bien que la plupart des ouvrages d'introduction à Python vous aideront à apprendre Sage. Chaque feuille de travail du "notebook" de Sage est composée de cellules que l'on peut éditer. Pour exécuter le code contenu dans une cellule il faut la sélectionner puis soit cliquer sur evaluate en bas de la cellule ou presser "shift" et "entrée" simultanément.
Sage fournit toutes les opérations mathématiques de base:
{{{id=1| 1+2 /// 3 }}} {{{id=2| 34 * 72 - 18 * 531 /// -7110 }}} {{{id=3| 10/4 /// 5/2 }}} {{{id=4| /// }}}Dans une cellule, tout texte après le caractère # est considéré comme un commentaire.
{{{id=5| 2**3 # ** désigne l'exponentiation /// 8 }}} {{{id=6| 2.5^3 # ^ est un synonyme de ** /// 15.6250000000000 }}} {{{id=7| 10 % 3 # pour des arguments entiers, % signifie modulo, i.e., le reste dans la division euclidienne /// 1 }}} {{{id=8| 10//4 # pour des arguments entiers, // renvoie le quotient dans la division euclidienne /// 2 }}} {{{id=9| /// }}}Les varialbles (informatiques) permettent de stocker des données en leur donnant un nom. Pour affecter une valeur à une variable on utilise le signe =.
{{{id=10| a = 5 a /// 5 }}} {{{id=11| a+12 /// 17 }}} {{{id=12| a = a+3 a /// 8 }}}Certaines variables sont initialisées au démarrage de Sage
{{{id=13| ZZ /// Integer Ring }}} {{{id=14| QQ /// Rational Field }}} {{{id=15| RR /// Real Field with 53 bits of precision }}} {{{id=16| /// }}}Sage fournit également un grand nombre de fonctions mathématiques usuelles ; en voici quelques exemples choisis :
{{{id=17| sqrt(3.4) /// 1.84390889145858 }}} {{{id=18| sin(5.135) /// -0.912021158525540 }}} {{{id=20| sin(pi/3) /// 1/2*sqrt(3) }}} {{{id=21| euler_phi(38) /// 18 }}} {{{id=22| exp(2) /// e^2 }}} {{{id=23| /// }}}Comme le montre le dernier de ces exemples, certaines expressions mathématiques renvoient des valeurs ‘exactes‘ plutôt que des approximations numériques. Pour obtenir une approximation numérique, on utilise la méthode n. La notion de méthode est particulère à Python et plus généralement aux langages de programmation orientés objets. Plutôt que d'appliquer une fonction à une variable sous la forme f(x) la fonction est attachée à l'objet, ce qui correspondrait à la notation, x.f() et on parle alors de méthode.
{{{id=24| exp(2).n() /// 7.38905609893065 }}} {{{id=25| pi.n() /// 3.14159265358979 }}} {{{id=26| /// }}}La méthode n accepte, en argument optionnel, prec, qui indique le nombre de bits de précisions requis, et digits, qui indique le nombre de décimales demandées ; par défaut, il y a 53 bits de précision.
{{{id=27| sin(10).n(digits=5) /// -0.54402 }}} {{{id=28| phi = (1+sqrt(5))/2 phi.n(prec=200) /// 1.6180339887498948482045868343656381177203091798057628621354 }}} {{{id=29| /// }}}On peut faire du calcul symbolique dans Sage. Lorsqu'on parle de variables il faudra faire attention à ne pas confondre les variables informatiques (qui contiennent une donnée) et les variables mathématiques (qui sont des quantités inconnues généralement restreinte à rester dans un certain ensemble).
{{{id=30| f(x) = cos(x) + sin(x) f /// x |--> sin(x) + cos(x) }}} {{{id=31| P = plot(f,(x,-pi,pi)) P.show() ///Une autre façon d'accéder à la tangente au point 0 est d'utiliser le développement de Taylor en 0 à l'ordre 1.
{{{id=36| h = f.taylor(x, 0, 1) h /// x |--> x + 1 }}} {{{id=37| L2 = plot(h, (x,-pi,pi)) (P+L2).show() ///Nous avons vu dans l'exemple ci-dessus deux primitives graphiques à connaître: plot et line2d. Nous avons également vu que pour superposer deux graphiques on utilise l'opération +. Il y a d'autres primitives graphiques qui permettent de faire des dessins plus élaborés: point2d, plot_vector_field, circle, arc, ellipse, polygon2d, ... Toutes ces primitives graphiques utilisent la mêmes option color pour modifier la couleur.
Il est également possible de faire du calcul de plusieurs variables, et des dessins en 3-dimensions.
{{{id=39| f(x,y) = x*y /// }}} {{{id=40| plot3d(f, (x,-2,2), (y,-2,2), color='orange') /// }}} {{{id=41| f.diff(x) /// (x, y) |--> y }}} {{{id=42| f(1.4,3.2) /// 4.48000000000000 }}} {{{id=43| /// }}}Nous venons de voir rapidement les expressions symboliques. Il est possible de manipuler des objets avec plus de structures mathématiques et c'est tout l'intérêt de Sage. La notion d'éléments et de parent est pour cela essentielle. Un parent correspond à la notion d'ensemble mathématiques (avec éventuellement des structures additionnelles) tandis qu'un élément correspond à un élément de cet ensemble. La plupart des objets que vous manipulerez dans Sage seront soit des parents (ensemble des entiers, espace vectoriels, corps de nombres, ...) soit des éléments (un entier, un vecteur, le nombre I vu comme solution de x^2+1, ...).
Le parent détermine le type d'opérations que l'on va pouvoir appliquer à l'élément ainsi que le comportement des opérations.
{{{id=44| var('x') # création d'une variable symbolique x P_symb = 6*x^5 - 12*x + 6 P_symb /// 6*x^5 - 12*x + 6 }}} {{{id=45| P_symb.parent() /// Symbolic Ring }}} {{{id=46| P_symb.factor() /// 6*(x - 1)*(x^4 + x^3 + x^2 + x - 1) }}} {{{id=47| R. = PolynomialRing(ZZ, 'a') # anneau des polynome sur x a coeffecients entiers R /// Univariate Polynomial Ring in a over Integer Ring }}} {{{id=48| P_entier = 6*a^5 - 12*a + 6 P_entier /// 6*a^5 - 12*a + 6 }}} {{{id=49| P_entier.parent() /// Univariate Polynomial Ring in a over Integer Ring }}} {{{id=50| P_entier.factor() /// 2 * 3 * (a - 1) * (a^4 + a^3 + a^2 + a - 1) }}} {{{id=51| S. = PolynomialRing(CC, 'b') # anneau des polynomes a coefficients complexes S /// Univariate Polynomial Ring in b over Complex Field with 53 bits of precision }}} {{{id=52| P_complexe = 6*b^5 - 12*b + 6 P_complexe /// 6.00000000000000*b^5 - 12.0000000000000*b + 6.00000000000000 }}} {{{id=53| P_complexe.parent() /// Univariate Polynomial Ring in b over Complex Field with 53 bits of precision }}} {{{id=54| P_complexe.factor() /// (6.00000000000000) * (b - 1.00000000000000) * (b - 0.518790063675884) * (b + 0.114070631164587 - 1.21674600397435*I) * (b + 0.114070631164587 + 1.21674600397435*I) * (b + 1.29064880134671) }}} {{{id=55| /// }}} {{{id=65| /// }}}