Calcul avec OCaml

English text at the bottom of this page.

Remarques générales

Remarques générales sur OCaml

Site général de Caml à l'INRIA
Le langage OCaml dispose d'une fiche PLUME.

Remarques générales sur la bibliothèque ocamlmath

Ce projet est inscrit sur PLUME.
Ce projet est inscrit sur OCaml Forge.
Ce projet est inscrit sur Freecode.
Un paquetage Opam est en construction : avis aux bonnes volontés.

But de la bibliothèque ocamlmath

Notre propos est de fabriquer des exemples de calculs en mathématiques générales à l'aide d'un automate.
La démonstration des algorithmes est dans la littérature mathématique classique, par exemple on pourra consulter le Cours de mathématiques spéciales publié par Ramis, Deschamps et Odoux chez Masson à Paris.
L'extrême facilité de la programmation en OCaml ne doit pas faire oublier la quantité de temps nécessaire pour se familiariser avec les êtres mathématiques.
Le code source est organisé en modules et foncteurs de fa&ccdeil;on à être maintenu et modifié facilement par une personne n'ayant que des rudiments de programmation.
Voir les spécifications pour des explications plus détaillées.

Téléchargement

L'archive au format tar-bzip2 ocamlmath-0.4.tbz contient les spécifications et programmes et pèse 20111653 octets.
L'archive au format tar-bzip2 ocamlmath-0.3.tbz contient les spécifications et programmes et pèse 10552475 octets.
L'archive au format tar-bzip2 ocamlmath-0.2.tbz contient les spécifications et programmes et pèse 2101509 octets.
L'archive au format tar-bzip2 ocamlmath-0.1.tbz contient les spécifications et programmes et pèse 1433594 octets.
Les programmes sont placés sous la même licence qu'OCaml.

Spécifications pour le calcul en mode texte

Spécifications avec les modules graphiques en plus

(La langue française suit l'anglais dans les pages de spécifications.)

Exemples

Exemples de sessions en mode texte :

matrix.txt  inversion d'une matrice mal conditionnée trouvée dans http://www.cs.berkeley.edu/~wkahan/Math128/FailMode.pdf,
volume.txt  calcul approché du volume de la boule unité de l'espace R^5 euclidien,
curvature.txt  calcul approché en quelques échantillons aléatoires de la courbure de Gauss de la sphère unité de l'espace R^3 euclidien,
expm.txt  calcul approché de quelques exponentielles matricielles (construites à l'aide d'une méthode de Runge-Kutta) ; les réponses fastidieuses ne sont pas reproduites,
poly64.txt  approximation des racines d'un polynôme (suivies de leurs multiplicités respectives) en précision ordinaire,
poly1024.txt  approximation des racines de deux polynômes (éventuellement suivies de leurs multiplicités respectives) en précision moyennement étendue (attention au navigateur pour les réponses finales : les exposants de l'affichage décimal sont en bout de ligne),
complex.txt  différents calculs de l'inverse d'un nombre complexe (même précaution de lecture que précédemment).
sparse.txt  calcul de l'inverse d'une matrice carrée creuse d'ordre 2^2048. Les réponses fastidieuses ne sont pas reproduites. Si elle était pleine, une telle matrice demanderait plus de 2^4099 octets de stockage ; si elle était semi-pleine, elle demanderait plus de 2^2051 octets de stockage ; pourtant elle ne diffère de l'identité que par quatre coefficients.

Exemples de sessions en mode graphique :

Utiliser l'instruction suivante pour fermer les fenêtres graphiques :
Graphics.close_graph () ;;

pseudosphere.txt  dessin en cure-pipe d'une pseudosphère,
pseudosphere.png  saisie de fenêtre,
vector_field.txt  dessin de plusieurs champs de vecteurs en dimension trois,
vector_field.png  saisie de fenêtre,
cycloides.txt  dessin d'une cycloïde et de sa développée,
cycloides.png  saisie de fenêtre.

Exemples de numérisation d'oscillogrammes

Corrections

Si vous voulez offrir quelques corrections d'erreurs, ou des ajouts, prière de contacter le rédacteur du site web de l'IREM.

Main courante

ocamlmath-0.4

décembre 2013
module version résumé ou ajouts [+]
util.ml 0.2
bary.ml 0.1 ensembles à poids
data.ml 0.2
deg.ml 0.1
hash.ml 0.1 tables de hachage à poids
sparse_vector.ml 0.1 foncteurs de calcul sur les vecteurs creux à coefficients dans des annaux ou des corps commutatifs; les indices aussi sont polymorphes.
sparse_tensor.ml 0.1 foncteurs de calcul sur les tenseurs creux
sparse_matrix.ml 0.1 foncteurs de calcul sur les matrices creuses
matrix.ml 0.5
mat.ml 0.1 foncteurs de calcul sur les vecteurs, tenseurs et matrices indifféremment pleins ou creux
fft.ml 0.1 transformées de Fourier rapides sur les vecteurs
readwrite.ml 0.3
infinitesimal.ml 0.4
sci.ml 0.4
reduc.ml 0.4
data2.ml 0.2
draw.ml 0.4
widget.ml 0.3
analogic.ml 0.3
spec.ml 0.2

ocamlmath-0.3.tbz :

septembre 2012
bibliothèques en bytecode,
toplevels avec .ocamlinit adaptés,
scripts pour compilation et pour exploration de dépendances récursives.
module version résumé ou ajouts [+]
util.ml 0.1 fonctions utilitaires pour divers modules
data.ml 0.1 constantes classiques ; modules d'indices ; modules d'annaux et de corps commutatifs pour les coefficients
deg.ml 0.1 calculs pour les degrés des polynômes et des fractions rationnelles
sparse.ml 0.1 calculs de base sur les vecteurs, tenseurs et matrices creux pour le module Sparser
sparser.ml 0.1 foncteurs de calculs sur les vecteurs, tenseurs et matrices creux : coefficients ET indices sont polymorphes
matrix.ml 0.4
readwrite.ml 0.2
infinitesimal.ml 0.3
sci.ml 0.3 [+] fonctions trigonométriques (et réciproques) en précision intermédiaire (1024 bits)
reduc.ml 0.3 calcul sur les polynômes à une variable réels ou complexes, calcul sur les matrices complexes, réductions des matrices, polynômes de matrices, recherches approchées de zéros de polynômes en précision arbitraire.
data2.ml 0.1 modules de corps commutatifs pour les coefficients
draw.ml 0.3
widget.ml 0.2
analogic.ml 0.2
spec.ml 0.1 outils pour se repérer dans la spécification et le code source (une fonction utilise lynx)

ocamlmath-0.2.tbz :

janvier 2012
module version résumé
matrix.ml 0.3
infinitesimal.ml 0.2
sci.ml 0.2
poly.ml 0.2
readwrite.ml 0.1 lecture et écriture de fichiers, de vecteurs et matrices réels et entiers, d'images fixes et de sons
draw.ml 0.2
widget.ml 0.1 gadgets de fenêtres et boîtes de dialogues
analogic.ml 0.1 numérisation d'oscillogrammes analogiques

ocamlmath-0.1.tbz :

septembre 2011
module version résumé
matrix.ml 0.2 vecteurs et matrices à coefficients entiers et réels, inversions de matrices, réductions de matrices symétriques réelles, découpage récursif de matrices par blocs, méthodes usuelles d'accélération de convergence.
infinitesimal.ml 0.1 calcul différentiel et intégral sur les fonctions à valeurs réelles, champs de vecteurs et champs de matrices, équations différentielles ordinaires du premier ordre, exponentielles matricielles, recherches approchées de zéros, interpolations, transformées usuelles, repères de Serret-Frenet, courbure de Gauss.
sci.ml 0.1 calcul sur les nombres complexes en notation scientifique avec des mantisses arbitraires ou limitées à 1024 bits, méthodes usuelles d'accélération de convergence.
poly.ml 0.1 calcul sur les polynômes à une variable réels ou complexes, calcul sur les matrices complexes, réductions des matrices, polynômes de matrices, recherches approchées de zéros de polynômes en précision arbitraire.
draw.ml 0.1 dessins en dimension deux et trois de graphes de fonctions, courbes, surfaces, champs de vecteurs et de tenseurs.

Mode caml-mode ou ocaml-mode d'emacs

Si le caml-mode d'emacs ne fonctionne pas, peut-être que le patch pour le fichier caml.el apportera une solution.
Il suffit en fait de changer les chaînes
-,-
en
-comma-
. (Testé sous FreeBSD 9.2 amd64.)

Mode tuareg d'emacs

Pour le tuareg-mode d'emacs, on peut rajouter les instructions suivantes dans le fichier ~/.emacs .

(add-to-list 'auto-mode-alist '("\\.ml[iylp]?\\'" . tuareg-mode))
(dolist (ext '(".cmo" ".cmx" ".cma" ".cmxa" ".cmi" ".annot"))
(add-to-list 'completion-ignored-extensions ext))
(autoload 'tuareg-mode "tuareg" "Mode majeur pour éditer du code OCaml." t)

(Testé sous FreeBSD 9.2 amd64.)

English: Mathematics calculations with OCaml

Aim

Our purpose is to build examples of calculations in general mathematics with the help of an automaton.
The proof of the algorithms is in the classical mathematical literature.
The extreme ease of OCaml programming should not make one forget the amount of time necessary to get familiar with mathematical beings.
The source code is organized in modules and functors in such a way as to be easily maintained and modified by a person with only elementary skills in programmation.
See the specifications for more detailed explanations.
An Opam package is under construction: notice to goodwill...

Downloading

The archive in the tar-bzip2 format ocamlmath-0.4.tbz contains the specifications and programs; its size is 20111653 bytes.
The archive in the tar-bzip2 format ocamlmath-0.3.tbz contains the specifications and programs; its size is 10552475 bytes.
The archive in the tar-bzip2 format ocamlmath-0.2.tbz contains the specifications and programs; its size is 2101509 bytes.
The archive in the tar-bzip2 format ocamlmath-0.1.tbz contains the specifications and programs; its size is 1433594 bytes.
The programs are placed under the same license as OCaml.

Specifications for the calculations in text mode

Specifications with the graphic modules in addition

Corrections

If you wish to offer some error corrections or addings, please contact the writer of the IREM web site.

Examples of digitization of oscilloscope pictures

Log

ocamlmath-0.4

december 2013
module version abstract or addings [+]
util.ml 0.2
bary.ml 0.1 weighted sets
data.ml 0.2
deg.ml 0.1
hash.ml 0.1 weighted hash tables
sparse_vector.ml 0.1 calculation functors on sparse vectors with coefficients in commutative rngs and fields; the indices too are polymorphic.
sparse_tensor.ml 0.1 calculation functors on sparse tensors
sparse_matrix.ml 0.1 calculation functors on sparse matrices
matrix.ml 0.5
mat.ml 0.1 calculation functors on vectors, tensors and matrices, whether full or sparse
fft.ml 0.1 fast Fourier transforms on vectors
readwrite.ml 0.3
infinitesimal.ml 0.4
sci.ml 0.4
reduc.ml 0.4
data2.ml 0.2
draw.ml 0.4
widget.ml 0.3
analogic.ml 0.3
spec.ml 0.2

ocamlmath-0.3.tbz :

september 2012
bytecode libraries,
toplevels with adapted .ocamlinit,
scripts for compilation and recursive dependence browsing.
module version abstract or addings [+]
util.ml 0.1 utility functions pour several modules
data.ml 0.1 classical constants; index modules; rng and field modules for coefficients
deg.ml 0.1 calculations for the degrees of polynomial and polynomial fractions
sparse.ml 0.1 basic calculations on sparse vectors, tensors and matrices for the module Sparser
sparser.ml 0.1 calculation functors on sparse vectors, tensors and matrices: coefficients AND indices are polymorphic
matrix.ml 0.4
readwrite.ml 0.2
infinitesimal.ml 0.3
sci.ml 0.3 [+] trigonometric functions (and reciprocal) in intermediary precision (1024 bits)
reduc.ml 0.3 calculation on polynomials in one real or complex variable, calculation on complex matrices, reduction of matrices, polynomial of matrices, approximate searches of roots of polynomials in arbitrary precision
data2.ml 0.1 field modules for coefficients
draw.ml 0.3
widget.ml 0.2
analogic.ml 0.2
spec.ml 0.1 tools in order to find one's way in the sepcification and the source code (one function uses lynx)

ocamlmath-0.2.tbz :

january 2012
module version abstract
matrix.ml 0.3
infinitesimal.ml 0.2
sci.ml 0.2
poly.ml 0.2
readwrite.ml 0.1 read and write files, real and integer vectors and matrices, pictures and sounds
draw.ml 0.2
widget.ml 0.1 window gadgets and dialog boxes
analogic.ml 0.1 digitization of analogic oscillograms

ocamlmath-0.1.tbz :

september 2011
module version abstract
matrix.ml 0.2 vectors and matrices with real and integer coefficients, inversions of matrices, reductions of real symmetric matrices, recursive block cutting of matrices, usual methods of convergence acceleration
infinitesimal.ml 0.1 differential and integral calculus on real-valued functionss, vector fields and matrix fields, ordinary differential equations of the first order, matrix exponentials, approximate searches of zeroes, interpolations, usual transforms, Serret-Frenet frames, Gauss curvature.
sci.ml 0.1 calculation on complex numbres in scientific notation with arbitrary mantissae or limited to 1024 bits, usual methods of convergence acceleration
poly.ml 0.1 calculations on polynomial with ine real or complex variable, calculation on complex matrices, reductions of matrices, matrix polynomials, approximate searches of roots of polynomials in arbitrary precision
draw.ml 0.1 drawings in dimension two and three of function graphs, surfaces, vector and frame fields