User Tools

Site Tools


documentation:numeric_calcul

Calcul numérique en Java

F. de Coligny - 31.10.2003

Objectif : associer la souplesse du langage Java et les performances des outils d'analyse et de calcul numérique de la communauté scientifique pour rendre possible :

  • l'utilisation d'une bibliothèque d'analyse numérique depuis Java (calcul matriciel et différentiel…),
  • l'accés à des grapheurs scientifiques,
  • si possible avec une approche interactive

Contexte : développement de la plate-forme Capsis en langage Java, prototype de connexion Capsis-Scilab (stage de Laurent Biget - été 2002), discussions avec Christophe Pradal (cirad), Nicolas Donès et Christian Pichot (INRA).

Références (parmis d'autres) :

Les logiciels et bibliothèques de calcul numérique peuvent être catégorisés selon :

  • champ d'application (calcul matriciel, calcul différentiel…)
  • libre ou propriétaire
  • importance de la communauté d'utilisateurs (prototypes, standards…)
  • langage d'implémentation (c/c++, Fortran, Java…)
  • interface interactive (type Scilab)
  • proposition ou non de grapheurs scientifiques

Dans ce document, on se limite aux logiciels libres, les logiciels propriétaires (Matlab, S, JMSL…) ayant souvent une implémentation libre. Java étant portable, il n'est pas fait mention des systèmes d'exploitation pour chacun des outils / bibliothèques.

1. Les plus utilisés :

  • Scilab : algèbre linéaire, matrices, solveur d'équations différentielles, systèmes dynamiques, optimisation, statistiques… : très complet - communauté importante - C / Fortran - interface interactive - grapheurs
  • R : statistiques et graphiques, similaire à S (propriétaire), modélisation linéaire et non linéaire, tests statistiques, analyses de données, classification, calcul sur matrices, calcul différentiel… : très complet - communauté dynamique - C / C++ / Fortran - interactif - grapheurs
  • LAPACK - Linear Algebra PACKage : (évolution de EISPACK et LINPACK) résolution d'équations linéaires, méthode des moindres carrés, gestion des matrices de réels et complexes, - repose sur BLAS - Fortran 77 (Lapack++ : implémentation en C++) non portable directement (transportable) CLapack et JLapack beaucoup moins performantes

2. Les principales implémentations en C/C++, fortran, Python... :

  • Octave : Calcul numérique, résolution de problèmes linéaires et non linéaires, langage type Matlab, intégration d'équations différentielles, manipulation de polynomes… - C/C++, Fortran - interface interactive - grapheur Gnuplot
  • SciPy : interface entre la bibliothèque NumPy (extensions numériques Python : notamment un type tableau multidimensionel efficace et un package LinearAlgebra) et Matlab pour accéder à des fonctions supplémentaires (grapheurs…) - Python
  • BLAS (Basic Linear Algebra Subprograms) de la National Science Foundation : routines “haute qualité” pour opérations de bases sur matrices et vecteurs (base de LINPACK et LAPACK) - Fortran 77
  • uBLAS : portage BLAS : bibliothèques C++ pour calcul matriciel - évaluation difficile
  • des dizaines d'autres implémentations…

3. Les principales implémentations en Java :

  • JAMA (Java Matrix package) / Jampack : algèbre liéaire, matrices de réels (pas de complexes), algorithmes similaires à EISPACK, LINPACK et Matlab - non optimisé, non complet, en développement
  • Colt : analyse de données, algèbre linéaire, tableaux multi-dimensionels, histogrammes, statistiques, simulation Monte-Carlo, programmation parallèle, génération de nombres aléatoires… - CERN
  • Ninja (Numerical Intensive Java - IBM) : tableaux multidimensionels efficaces - stade de recherche
  • JADE (Java Addition to Default Environment) : comporte un package math avec classe matrice générique plus des types Real et Complex - incomplet
  • Java Numerical Toolkit (JNT) : implémentation partielle du BLAS, en projet : systèmes d'équations linéaires, équations non linéaires, générateurs de nombres aléatoires - incomplet
  • JSci (a science API for Java) : algèbre linéaire, statistiques, graphiques - difficile à évaluer
  • OpsResearch : classes Java pour développements scientifiques, graphes, matrices, résolution d'équations (+ version professionelle : analyse de corrélation, régressions multiples…) - difficile à évaluer
  • JLapack (inclut JBLAS, implémentation partielle en Java de BLAS) : implémentation de Lapack en Java - contient un solveur d'équations pour matrices générales - incomplet
  • JMP (a sparse matrix library for Java) : BLAS pour matrices (sparse & dense), parallélisation, s'appuie sur JAMA modifié, résolution systèmes linéaires - difficile à évaluer
  • apache.commons.maths : https://commons.apache.org/math/
  • d'autres implémentations…

4. Discussion

L'utilisation d'une bibliothèque de calcul numérique en Java pose la question de l'implémentation. la solution la plus directe serait l'utilisation d'une implémentation en Java faisant référence. Cependant une telle implémentation ne semble pas se dégager actuellement.

La connexion à une implémentaion en C/C++ et/ou Fortran est plus complexe. La première tentative de connexion Java-Scilab qu'a constitué le stage de Laurent Biget en été 2002 a montré que l'opération était très technique, qu'elle requerait des compétences en calcul numérique, en Java ainsi qu'en les langages d'implémentation de la bibliothèque, autant de difficultés aggravées par l'apparition de questions particulières aux systèmes d'exploitation cibles.

Le résultat est un prototype difficile à installer et d'un usage complexe, dont la performance est difficile à évaluer, impossible à mettre entre les mains d'un modélisateur Capsis “non informaticien”.

Une difficulté supplémentaire est le choix d'une implémentation de référence. Celle ci dépend des questions à résoudre, des possiblités offertes par la bibliothèque (de qualités et performances très hétérogènes et difficiles à évaluer : par exemple, CLapack est beaucoup moins performant que le Lapack original en Fortran dont l'optimisation est très poussée) ainsi que des préférences ou habitudes de l'utilisateur.

5. Conclusions

Au terme de cette réflexion, plusieurs possibilités :

1. Solution non Java : interviewer les utilisateurs préssentis pour le choix d'un outil non Java et faire étudier et prendre en charge plus sérieusement la question par une personne ayant les compétences suivantes :

  • calcul numérique,
  • langages C/C++ et Fortran,
  • langage Java.

L'étude devra aborder les questions relatives :

  • au domaine couvert : quels algorithmes,
  • à la qualité de l'implémentation : quelles performances,
  • aux questions de plate-formes : réponse homogène en domaine couvert et qualité sur les systèmes d'exploitations visés.
  • à la méthodologie de connexion en cas de langages hétérogènes : technique et facilité / élégance d'utilisation.

Dans ce cas, le système devra être suivi et maintenu dans le temps par la personne en question pour assurer sa perennité.

2. Attendre l'émergence d'une bibliothèque standard de calcul numérique en Java développée et maintenue par une communauté de scientifiques et l'adjoindre à Capsis (répertoire d'extensions). Cette option ne requiert aucun investissement particulier d'un développeur.

documentation/numeric_calcul.txt · Last modified: 2022/09/13 07:03 by coligny