Installation de Sage

Bonjour,

Dans le cadre de mes recherches, je me suis rendu compte qu'il était temps que je me remette à l'informatique. Sur conseils de Champ-pot-Lion, j'aimerais commencer à utiliser Sage.

Tout d'abord j'ai téléchargé et imprimé un joli pdf sur Sage:
Calcul mathématiques avec sage

J'en suis à l'installation de Sage et je n'arrive pas à trouver l'executable!

Je vous remercie d'avance pour le temps consacré,

Al-Kashi90616

Réponses

  • Tu as téléchargé le code source me semble-t-il. Il ne te reste plus qu'à le compiler X:-(

    https://github.com/sagemath/sage-windows/releases/download/0.5.1-8.8/SageMath-8.8-Installer-v0.5.1.exe
  • Merci pour ce lien FDP.
    Mais du coup je ne comprends rien, j'ai téléchargé un gros dossier avec lequel je n'ai rien pu faire et là tu me donnes un lien direct sur l'executable que je cherchais depuis 30 minutes :-D

    Du coup je me demande ou tu as pu récupérer directement l'executable.

    Al-Kashi
  • Un chemin possible : direction le site de sage https://www.sagemath.org/ . La page "download" redirige vers https://github.com/sagemath/sage-windows/releases où on trouve le lien dans les "assets".
  • Merci j'ai compris ma bêtise. J'ai sélectionné un pays au lieu de prendre le 1er lien vers Github
    J'ai terminé l'installation et je viens de tester ma première ligne "1+1" X:-(

    Allez encore quelques pages à lireX:-(

    Al-kashi
  • Est-il possible de copier et coller du texte. Je n'arrive pas à le faire et dès qu'il y a une erreur je dois tout réécrire:-S

    Al-Kashi
  • En appuyant sur la flèche vers le haut ça devrait marcher. Comme je n'ai pas Windows c'est compliqué de répondre mais il devrait bien y avoir une fonctionnalité pour copier-coller dans la console. Sinon tu peux chercher comment interpréter un fichier avec sage.

    Tu peux aussi essayer d'installer jupyter aussi (j'ai découvert ça avec l'agrégation et c'est pas mal). Je ne sais pas comment faire pour installer ça sur Windows par contre (est-ce qu'il y a pip ?).
  • Youpi! merci pour tes conseils précieux CHAMP(potl)ION

    Al-Kashi
  • Voilà mes premiers essais et mes premières difficultés:

    D'un point de vue théorique on définit la suite des restes dans l'algorithme d'Euclide étendu à $\R$:
    $r_0=1$, $ r_1\in [0,1]$ et $r_k=r_{k-2}- r_{k-1}\Big\lfloor\dfrac{r_{k-2}}{r_{k-1}}\Big\rfloor$.

    Mon objectif est d'obtenir le graphique de la fonction $f$ sur $[0,1]$ définie par:

    $f(r_1)=\sum_{k=0}^{+\infty}
    \dfrac{(-1)^k}{r_k r_{k+1}}$ si $\sum_{k=0}^{+\infty}\dfrac{(-1)^k}{r_k r_{k+1}}\ge0$
    $f(r_1)=\sum_{k=0}^{+\infty}
    \dfrac{(-1)^k}{r_k r_{k+1}}+1$ si $\sum_{k=0}^{+\infty}\dfrac{(-1)^k}{r_k r_{k+1}}<0$

    Pour information cette fonction est en rapport avec l'inverse modulaire.
    Voici ma copie d'écran.

    En vous remerciant:

    Al-Kashi90626
  • Pour interpréter l'erreur, il faut lire la dernière ligne. Ici : « global name 'r_k_2' is not defined ».

    En effet, tu veux définir une variable r_k en faisant des opérations à partir de variables r_k_1 et r_k_2 : comment veux-tu que Sage comprenne que tu veux parler de $r_{k-1}$ et $r_{k-2}$, résultats de la fonction $x\mapsto r_x$ en $x=k-1$ et $x=k-2$ ?

    En pratique, je pense que tu veux utiliser seulement deux variables, a et b, qui au passage numéro k dans la boucle, contiennent $r_{k-1}$ et $r_{k-2}$. L'incrémentation sera alors quelque chose comme
    a, b = b-a*(b//a), a
    

    Attention, de temps en temps, il va se produire que $r_{k-1}=0$ : est-ce que tu veux alors définir $r_k=r_{k-2}$ ? Il faut donc faire deux cas selon que a est nul ou pas, quelque chose comme :
    if a==0:
        a, b = b, 0
    else:
        a, b = b-a*(b//a), a
    
    Mais là, il va être difficile de calculer $1/(r_kr_{k-1})$. D'où la question : comment est définie la fonction « pour de vrai » ?
  • Bonjour Math Coss,

    Tout d'abord merci pour le temps accordé.
    Je pensais que ce que j'avais écrit correspondait à une suite définie par récurrence :-S.

    Histoire de simplifier la chose et pour obtenir un 1er graphique voilà ce que je souhaite faire.
    On pose $r_0=1$ .Pour $r_1$ je me limite aux valeurs : $0,001;0,002;0,003;....;0,997;0,998;0,999;1$
    Pour une valeur de $r_1$ donnée on définit la suite des restes dans l'algorithme d'Euclide et on note $r_{m+1}=0$ et on note:
    $f(r_1)=\dfrac{1+(-1)^m}{2}+\sum_{k=0}^{m-1}
    \dfrac{(-1)^k}{r_k r_{k+1}}$

    Je souhaite donc avoir un graphique avec les valeurs de $r_1$ plus haut.

    Al-Kashi
  • Bonjour,

    Ce que te dit Math Coss est que l'ordinateur n'a aucun moyen d'interpréter ce que tu as écrit comme une définition par récurrence. Tout ce qu'il voit, c'est une variable nommée "r_0", une nommée "r_1", puis ensuite tu définis une variable "r_k" en fonction des variables "r_k_2" et "r_k_1" qui n'existent pas. Mais ces variables n'ont aucun lien entre elles, elles auraient très bien pu s'appeler "a", "b", "c", "d" et "e", l'ordinateur n'y aurait vu aucune différence. Donc il te répond qu'il ne sait pas ce que "r_k_2" veut dire.

    Regarde au chapitre 10.2 du livre que tu as imprimé (page 235). Il est expliqué comment définir des suites par récurrence à un terme et Math Coss te dit comment faire pour deux termes. Regarde aussi page 55, le paragraphe "Méthode itérative et méthode récursive.".

    D'après ce que je comprends, tu veux dire que $m$ est le plus petit entier vérifiant $r_{m+1} = 0$, et qu'on arrête la suite des $r_i$ à $i=m$ (donc pas de division par zéro).
  • Bonjour,

    Je viens aussi d'installer Sage pour la première fois (je suis sous Windows 10).
    J'ai trois icônes sur le bureau:
    Sage8.8, SageMath 8.8 Notebook, SageMath 8.8 Shell.
    1) Quelles sont les différences entre ces trois ?
    2) Quand je lance le NoteBook, d'abord il me dit Python 2.7, ce n'est pas un peu périmé, ça, on en est à 3.7 ou 3.8 ?
    Ensuite, j'ai le message " The port 8888 is already in use, trying another port.", qu'est ce que ça veut dire ?
    Ensuite, il ne se passe rien et je n'ai plus la main. Il me faut aller tuer le processus avec "Ctlr Alt Suppr"

    Cordialement,

    Rescassol

    PS: J'ai aussi le bouquin.
  • Bonsoir,

    Je n'ai pas beaucoup utilisé SageMath, je vais essayer de répondre à ce qui me paraît clair.

    Concernant tes icônes Sage8.8, SageMath 8.8 Notebook, SageMath 8.8 Shell, je ne peux pas vraiment répondre car j'ai (compilé et) installé SageMath sous Linux, je n'ai pas ces icônes. Mais avec un clic droit sur icelles, tu devrais pouvoir trouver les commandes correspondantes, ce qui nous éclairerait sans doute un peu sur leurs fonctions respectives. De ce que je sais, il y a au moins 4 façons de « lancer » Sage :
    • avec l'exécutable $SAGE_ROOT/sage (ici, un script Bash) ;
    • avec la commande '$SAGE_ROOT/local/bin/jupyter notebook' (voir ci-dessous) ;
    • avec la “legacy notebook interface” mentionnée ici (c'est-à-dire une interface obsolète) ;
    • en lançant un programme Python qui importe des modules Sage, comme indiqué à Standalone Python/Sage Scripts dans la doc officielle.
    La première méthode s'apparente à l'utilisation interactive d'un interpréteur Python :
    SageMath version 8.9, Release Date: 2019-09-29
    Using Python 2.7.15. Type "help()" for help.
    
    sage: factor(2006)
    2 * 17 * 59
    sage:
    
    La seconde me semble être ce qu'il y a de plus moderne pour une utilisation interactive ; elle est pratique en ce qu'elle permet de mêler texte, formules en syntaxe simili-LaTeX (c'est du MathJax), code SageMath et résultats produits par ce code (y compris graphiques). En gros, on a des carnets avec des blocs exécutables, on peut les enregistrer sous un nom et les recharger par la suite.

    Cette interface est en fait constituée de deux composants :
    • le noyau SageMath (qui reçoit le code entré par l'utilisateur, fait les calculs correspondants et renvoie les résultats sous forme sans doute textuelle—sauf peut-être pour les images ?) ;
    • l'interface graphique avec laquelle l'utilisateur interagit, fournie par Jupyter, brique logicielle non spécifique à SageMath.
    Cette dernière est une interface Web, elle fonctionne donc dans un navigateur Web (Firefox, Chrome, Opera, Edge, Safari... je ne sais pas si tous sont supportés). La communication entre le noyau SageMath et Jupyter se fait au moyen de sockets Internet. Ainsi, la commande
    jupyter notebook
    
    susmentionnée lance normalement un serveur HTTP sur le port dont tu as parlé, 8888 (par défaut, ce serveur écoute uniquement en local). Lorsque cette commande est lancée dans un terminal (invite de commandes), elle affiche quelque chose du genre :
    [I 22:18:27.473 NotebookApp] Using MathJax: nbextensions/mathjax/MathJax.js
    [I 22:18:27.709 NotebookApp] Serving notebooks from local directory: /home/tartampion/...
    [I 22:18:27.709 NotebookApp] The Jupyter Notebook is running at:
    [I 22:18:27.709 NotebookApp] http://localhost:8888/?token=a0da235fd3a44d953ab511cf3bf3620c4d73ca7908c3e5d0
    [I 22:18:27.709 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
    [C 22:18:27.717 NotebookApp] 
        
        To access the notebook, open this file in a browser:
            file:///run/user/xxxx/jupyter/nbserver-14491-open.html
        Or copy and paste one of these URLs:
            http://localhost:8888/?token=a0da235fd3a44d953ab511cf3bf3620c4d73ca7908c3e5d0
    
    À partir de ce moment-là, et tant que je n'ai pas envoyé de signal de terminaison à ce processus (p. ex. avec Ctrl-C), j'ai un serveur HTTP qui tourne et écoute à l'adresse http://localhost:8888. Il faut se connecter avec le jeton indiqué (jeton = token, voir ce que le logiciel du forum a transformé en lien) pour montrer patte blanche au serveur, donc faire un copier/coller de l'adresse complète du lien apparaissant deux fois dans le bloc de code ci-dessus.

    À un instant t et sur un ordinateur donné (précisément : une pile TCP/IP), pour un couple (adresse IP, port) fixé (ici, port = 8888), il ne peut y avoir qu'une seule socket TCP écoutant sur cette combinaison (adresse IP, port). C'est en gros ce que te dit le message “The port 8888 is already in use, trying another port.”. Tu as déjà un serveur qui écoute sur ce port. Ou bien c'est un noyau SageMath que tu as lancé et non terminé, ou bien c'est un autre programme. Dans le second cas, tu peux dire à SageMath de lancer son serveur sur un autre port, par exemple :
    jupyter notebook --port 8889
    
    Le port 8888 n'est en effet pas très original, il est parfaitement possible qu'un autre logiciel installé par tes soins l'ait choisi. Le choix du numéro n'est pas important, en gros il faut juste choisir un port libre entre 1024 et 65535 (les ports < 1024 sont généralement réservés, en tout cas sous Unix).

    Quant à la question relative à Python 3, apparemment les développeurs de Sage ont fait l'essentiel du portage de Python 2 vers Python 3 (ce n'est pas rien) mais estiment que c'est encore un peu tôt pour proposer ce dernier par défaut — voir Can I use SageMath with Python 3.x? sur le site officiel.
  • Bon eh bien j'avais commencé à rédiger lentement une réponse mais je vois que la tienne est bien plus complète et mieux rédigée !
  • Bonjour,

    Merci, Brian, je vais lire ça à tête reposée.

    Cordialement,

    Rescassol
  • Bonjour,

    @Math Coss et Champ-Pot-Lion

    Merci pour vos conseils. Du coup je les ai suivis. Mon programme a fini par fonctionner mais je suis incapable de comprendre pourquoi il ne me donne pas le résultat attendu!
    Ici j'ai fait un programme qui calcule la somme des restes pour $a=1$ dans l'algorithme d'Euclide.
    Par exemple:
    -pour $b=0.7$ la somme devrait être $0.7+0.3+0.1=1.1$
    -Pour $b=0.15$ la somme devrait être $0.15+0.10+0.05=0.3$

    En vous remerciant,

    Al-Kashi90724
  • Premier problème : tu mets "return n" dans la boucle while (c'est dicté par l'indentation) donc la fonction renvoie n après un seul passage dans la boucle.

    Deuxième problème, une fois celui-ci corrigé : le test "b>0" n'est pas opportun parce que les erreurs d'arrondis font que b peut prendre des valeurs « absurdes », par exemple $4.44\cdot10^{-16}$. Il faut faire des calculs exacts et sans doute pas utiliser %. Bref, voici une exécution.
    sage: def somme(b):
    ....:     a, n = 1, b
    ....:     while b>0:
    ....:         a, b = b, a%b
    ....:         print a,b
    ....:         n = n+b
    ....:     return n
    ....: 
    sage: somme(0.7)
    0.700000000000000 0.300000000000000
    0.300000000000000 0.0999999999999999
    0.0999999999999999 4.44089209850063e-16
    4.44089209850063e-16 2.22044604925031e-16
    2.22044604925031e-16 0.000000000000000
    1.10000000000000
    
  • Ok merci MathCoss je comprends mieux du coup,je vais reprendre cela cet après midi.

    Al-Kashi
  • Bonjour,

    J'ai modifié l'indentation et le résultat s'approche du résultat attendu.
    En effet même en utilisant la fonction partie entière "floor" les résultats renvoyés par Sage sont inexacts.
    A la 3e ligne de l'exemple on devrait avoir $0.1$ et Sage indique $0.09999..$ pourquoi, je n'en sais rien.

    Merci d'avance pour votre aide

    Al-Kashi90746
  • Essaie somme(78/100)
  • Une variante du code :
    def somme(a,b) :
        if a<b : a,b=b,a
        n=b
        while b>0:
            a = a-b
            if a<b : a,b=b,a
            n=n+b
            print a,b
        return n+a
    
    Qu'est-ce que la procédure calcule, pour quelles entrées ?
  • Bonjour GaBuZoMeu,

    Merci. Avec ta proposition, cela fonctionne.
    Est-ce un choix des programmeurs? pourquoi avec l'écriture $0.7$ sage interprète différemment?

    Al-Kashi
  • J'ai réussi à obtenir le graphique que je voulais. Il s'avère qu'il n'a pas beaucoup d'intérêt car il est "illisible".
    J'ai aussi refait le graph (très curieux) qu'avait fait Champ-Pot-Lion dans le fil:Jouons avec les divisions euclidiennes

    Je tenais à vous remercier pour l'aide apportée. J'utiliserai à présent Sage pour mes recherches et reviendrai sûrement vous demander des conseils.

    Al-Kashi
  • 0.78 est un réel flottant. 78/100 est un rationnel.
    C'est là toute la différence.
Connectez-vous ou Inscrivez-vous pour répondre.