Calcul formel libre et open source

1) Introduction

Le plus grand projet libre et open source de calcul formel et de calcul numérique est sans doute le projet SageMath. Un projet en pleine évolution (version actuelle 10.5) :

https://www.sagemath.org/

SageMath utilise Python, un langage de programmation généraliste préexistant, et s'appuie sur de nombreux autres logiciels existants dont il unifie l'interface. Il est construit sur un assemblage de logiciels et bibliothèques libres de calcul mathématique, et permet d’accéder de manière unifiée à de nombreuses fonctionnalités de calcul.

Il possède une interface en ligne de commande constituant un shell. Il possède aussi une interface graphique appelée le notebook (« bloc-notes »), qui fonctionne dans un navigateur web, et qui permet de créer des feuilles de calcul mêlant graphique, texte et calculs effectués avec SageMath ou d'autres logiciels. Via cette interface web, il est possible de se connecter à un serveur SageMath installé sur un ordinateur distant.

Des serveurs SageMath publics permettent aujourd'hui d'utiliser SageMath sans l'installer sur son propre ordinateur. Vous pouvez utiliser SageMath en ligne en ouvrant un compte gratuit sur CoCalc :

https://cocalc.com/

2) Installation

L'installation sur un poste Linux de la famille Debian (tel que Kubuntu) à partir du code source est simple. Il nécessite l'installation d'un grand nombre de paquets dont voici la liste :

https://sagemanifolds.obspm.fr/install_ubuntu.html

et que vous pouvez installer avec la commande suivante :

sudo apt install automake bc binutils bzip2 ca-certificates cliquer cmake curl ecl eclib-tools fflas-ffpack flintqs g++ gengetopt gfan gfortran git glpk-utils gmp-ecm lcalc libatomic-ops-dev libboost-dev libbraiding-dev libbz2-dev libcdd-dev libcdd-tools libcliquer-dev libcurl4-openssl-dev libec-dev libecm-dev libffi-dev libflint-dev libfreetype-dev libgc-dev libgd-dev libgf2x-dev libgiac-dev libgivaro-dev libglpk-dev libgmp-dev libgsl-dev libhomfly-dev libiml-dev liblfunction-dev liblrcalc-dev liblzma-dev libm4rie-dev libmpc-dev libmpfi-dev libmpfr-dev libncurses-dev libntl-dev libopenblas-dev libpari-dev libpcre3-dev libplanarity-dev libppl-dev libprimesieve-dev libpython3-dev libqhull-dev libreadline-dev librw-dev libsingular4-dev libsqlite3-dev libssl-dev libsuitesparse-dev libsymmetrica2-dev zlib1g-dev libzmq3-dev libzn-poly-dev m4 make nauty openssl palp pari-doc pari-elldata pari-galdata pari-galpol pari-gp2c pari-seadata patch perl pkg-config planarity ppl-dev python3-setuptools python3-venv r-base-dev r-cran-lattice singular sqlite3 sympow tachyon tar tox xcas xz-utils texlive-latex-extra texlive-xetex latexmk pandoc dvipng

La doc officielle explique en partie le rôle de ces paquets :

https://doc.sagemath.org/html/en/installation/source.html#sec-installation-from-sources

Une fois installé tous ces paquets, vous pouvez éléchargez le code source de SageMath ici :

https://www.sagemath.org/download-source.html

C'est un fichier sage-10.5.tar.gz téléchargeable sur différent dépôts miroirs.

Considérons que nous soyons l'utilisateur de login dupond. Vous décompresser sage-10.5.tar.gz en un dossier /home/dupond/sage-10.5. Vous ouvrez un terminal dans ce dossier et effectuez les commandes en étant simple utilisateur ./configure et make. Cela lance la compilation qui peut durer 1 heures. Notez que après la configuration ./configure, le système peut préconiser de faire d'autres installations de paquets qu'il convient alors de le faire puis de lancer make reconfigure.

Pour lancer l'application en mode shell : /home/dupond/sage-10.5/sage

Pour lancer l'application en mode notebook : /home/dupond/sage-10.5/sage -n

Puis placez un lien symbolique dans /usr/local/bin qui fait parti du PATH pour ajouter la commande sage, cela se fait avec la commande suivante :

sudo ln -sf  /home/dupond/sage /usr/local/bin

Pour lancer l'application en mode shell : sage

Pour lancer l'application en mode notebook : sage -n

3) Partage en réseau

Votre ordinateur peut devenir serveur et permettre aux autres ordinateurs de se connecter et de lancer une instance de l'application SageMath.

A partir d'un poste Linux distant. On peut lancer la commande ssh dupond@server pour ouvrir un terminal et exécuter sage dans ce terminal (en remplaçant server par le nom ou l'adresse IP du serveur).

Et si on souhaite utiliser un interface web plus complet alors on lance la commande suivante en choisissant un port tel que 8881 non déjà utilisé (l'option -L localhost:8881:localhost:8881 ouvre un tunnel de communication sur le port 8881 entre le serveur et le client) :

ssh -L localhost:8881:localhost:8881 -t dupond@server

Puis après avoir saisie le mot de passe du compte dupond on lance la commande suivante :

sage -n --no-browser --port=8881

Cela démarre une instance du programme et affiche un token tel que par exemple :

http://localhost:8881/tree?token=4ab7a9ac32b4864f63a92b6eab0562f152e128e831e35afa

Vous recopiez le token, vous ouvrer la page web http://localhost:8881 et vous collez le token, ou directement cliquez sur le lien hypertexte.

4) Introduction à l'utilisation de SageMath

Un tel outils rend l'étude des mathématriques moins ingrate. Le langage de programmation SageMath est un langage Python augmenté capable de commander des calculs savant aux machines. Il rend concret de nombreux objets mathématiques et produit des programmes.

ZZ
IntegerRing( ) Les entiers relatifs
QQ
RationalField( ) Les rationnels
RR
RealField(53) Les réels avec 53 bits de précision
CC
ComplexField(53) Les complexes avec 53 bits de précision
HH.<i,j,k> = QuaternionAlgebra(RealField(53),-1,-1) Les quaternions avec 53 bits de précision
G.<a> = GF(p^n,"a") Le coprs fini de p^n éléments avec l'élément nommé "a" comme générateur.
P.<a> = PolynomialRing(ZZ) L'anneau des polynomes en "a", à coéfficient entier relatif.
MatrixSpace(CC,2) La classe des matrices carrées 2×2 de complexes

Par exemple exemples, le corps fini à 2^3 éléments avec "a" comme élément générateur :

G.<a>=GF(2^3,"a")
for x in G: print(x)
0
a
a^2
a + 1
a^2 + a
a^2 + a + 1
a^2 + 1
1

Résolutions d'un système d'équation utilisant une matrices et un vecteur de polynômes en "x" à coefficient dans le corps fini à 2^3 éléments avec "a" comme élément générateur :

G.<a> = GF(2^3,"a")
P.<x> = PolynomialRing(G)
M = MatrixSpace(P,2)

A=M([[a,x],[x+1,a*x^2]])
V=vector(P,[x,a])
R=A.solve_right(V)
A*R==V
True

 

---- 22 février 2024 ----