FLASH INFORMATIQUE FI



Sysquake, 3D et LaTeX




Yves PIGUET


Sysquake vient de franchir une nouvelle étape. La sortie de la version 4 fin novembre apporte entre autres les graphiques en 3D (fig. 1). C’est aussi l’occasion de diffuser largement une autre application basée essentiellement sur le même code, Sysquake for LaTeX. Cet article donne un aperçu de ces deux logiciels.
Rappelons brièvement que Sysquake est un programme de calcul numérique et de visualisation comparable à Matlab, avec lequel son langage de programmation est largement compatible. Les améliorations essentielles sont les graphiques interactifs que l’utilisateur peut manipuler avec la souris pour mieux comprendre les phénomènes représentés, et la facilité de programmation de l’interface utilisateur. Pour plus de détails, le lecteur est invité à relire l’article Sysquake 3 paru dans FI3/95.

JPEG - 15 ko
fig.1
Sysquake 4 pour Linux


Deux ans pour une nouvelle version majeure, cela doit se remarquer au niveau des possibilités offertes. Sysquake 4 améliore le langage de programmation, les graphiques et l’interface utilisateur.

Langage de programmation

La principale nouveauté de LME, le langage de programmation de Sysquake, est le support des fonctions anonymes. Le problème auquel on s’attaque ici est la façon de traiter les fonctions comme un type de données, non seulement pour pouvoir les stocker dans des variables, mais surtout pour les passer comme arguments à d’autres fonctions, d’intégration ou d’optimisation par exemple.
A chaque langage de programmation correspond une approche différente : pointeurs de fonctions en C, classe abstraite ou interface en C++ ou en Java, fermeture en Lisp. Jusqu’à présent, Sysquake, tout comme Matlab jusqu’à la version 6, offrait trois possibilités : les fonctions spécifiées par nom (chaîne de caractères) ou par référence (handle), et les fonctions inline, limitées à une expression dans Matlab. Dans les trois cas, le passage de paramètres se faisait par des arguments supplémentaires. Par exemple pour calculer le zéro de la fonction a cos(x) - x entre 0 et 2 pour a=0.8, on avait

a = 0.8;
x0 = fzero(inline('a*cos(x) - x', 'x', 'a'), [0, 2], [], a);

L’avant-dernier argument de fzero représente les options. Même s’il n’y en a pas dans le cas présent, il faut que l’argument existe pour que fzero considère le quatrième argument comme un paramètre à passer à la fonction dont on cherche le zéro.
Les fonctions anonymes, nouvelles dans Sysquake 4 et Matlab 7, apportent une solution élégante à ce problème tout en simplifiant la syntaxe. Dans Sysquake, une fonction anonyme est une fonction inline où les variables qui ne figurent pas dans la liste des arguments prennent la valeur des variables locales ou globales correspondantes. L’exemple précédent devient

a = 0.8;
x0 = fzero(@(x) a*cos(x) - x, [0, 2]);

L’utilisation est proche des fermetures du Lisp ; la différence essentielle est que la valeur des variables est définie au moment de la création de la fonction anonyme. La fonction dumpvar permet de voir comment Sysquake transforme la fonction anonyme en une fonction inline avec un argument supplémentaire pour la ou les valeur(s) des paramètres :

a = 0.8;
fun = @(x) a*cos(x) - x;
dumpvar('fun', fun);

        fun = inline('function y=f(a,x);y=a*cos(x)-x;',0.8);

Graphiques

De nouvelles commandes graphiques 2D ont été ajoutées pour les diagrammes en coordonnées polaires, les tracés ou courbes de niveaux remplis et les matrices de couleurs, similaires aux images mais plus souples. Sysquake 4 marque aussi l’apparition des graphiques 3D. Le but visé n’était pas le photoréalisme, mais la représentation de données synthétiques de qualité. C’est ainsi que l’image de la projection en 2D est obtenue par l’algorithme du peintre où les surfaces sont triées par ordre de profondeur ; l’avantage sur d’autres approches est que le résultat est un graphique vectoriel qui, une fois exporté au format EPS, assure une qualité d’impression parfaite à n’importe quelle résolution. La figure 2 montre un petit dodécaèdre étoilé qui nécessite le découpage des faces.
Les commandes 3D couvrent les fonctionnalités de base : points, courbes, droites, surfaces décrites par un réseau de carrés ou de triangles, courbes de niveaux, définition du point de vue et du type de projection et illumination. Des bibliothèques de fonctions définissent des volumes simples comme celui de la figure 2.

JPEG - 11.3 ko
fig. 2
petit dodécaèdre étoilé

Dans Sysquake, l’interactivité passe par une conversion automatique de la position de la souris dans le système de coordonnées propre à la figure manipulée. Une contrainte supplémentaire doit être ajoutée pour passer de la position 2D en 3D. La solution choisie est la même qu’en VRML : le clic initial est attaché à l’objet visible à cet endroit et le mouvement est obtenu par le déplacement sur un plan ou une sphère choisi par le programmeur.

Interface utilisateur

Les programmes Sysquake sont des fichiers de texte brut, aussi bien pour les bibliothèques de fonctions que pour les fichiers SQ qui décrivent l’interface utilisateur des applications interactives. Jusqu’à présent, le texte présenté à l’utilisateur était lui aussi du texte brut, avec dans le meilleur des cas la gestion automatique des sauts de ligne.
Sysquake 4 apporte du texte avec style partout où cela est utile. Le format choisi devait respecter un certain nombre de contraintes : texte brut lisible au niveau du code source, simple pour un non-spécialiste, suffisamment puissant, si possible standard. Les formats HTML et RTF ont donc été écartés. Finalement, un langage de balises proche de celui utilisé dans les wikis, Creole, a été retenu ; il est le résultat d’un effort de standardisation de plusieurs auteurs de moteurs de wikis. L’implémentation développée pour Sysquake est disponible sous licence open-source ; elle est suffisamment souple d’emploi pour convertir du Creole en plusieurs formats texte comme RTF ou LaTeX, ou pour piloter directement les fonctions propres à l’interface utilisateur comme MFC ou GTK+.

Dans Sysquake, le texte formaté apparaît à trois endroits différents.

  • Sortie texte : les canaux standard d’Unix (0 pour l’entrée, 1 pour la sortie standard et 2 pour les messages d’erreurs) ont été complétés. L’identificateur 4 correspond à une sortie dans la fenêtre de commande après conversion de Creole en texte formaté. Le manuel qu’utilise la fonction help, dont l’original est en XHTML, a été converti en Creole. Les sous-titres et les liens ont été conservés. La fonction lookfor, qui donne la liste de toutes les fonctions dont la description abrégée contient la chaîne de caractère spécifiée, crée aussi des liens hypertextes.
  • Fenêtres de texte : en plus de la fenêtre de commande, Sysquake 4 peut créer des fenêtres pour des sorties de texte brut ou formaté. La fonction textoutputopen ouvre une nouvelle fenêtre et renvoie l’identificateur à utiliser avec des fonctions comme fprintf ou clc. L’utilisateur peut enregistrer le contenu de la fenêtre soit comme texte non formaté (Creole), soit au format texte brut, RTF, HTML ou LaTeX.
  • Aide des applications Sysquake : les fichiers SQ peuvent contenir une description destinée à l’utilisateur final.

Sysquake for LaTeX

Sysquake for LaTeX est un paquetage pour LaTeX basé sur Sysquake. L’une des tâches les plus fastidieuses auquel l’auteur doit faire face est l’importation de données en provenance d’autres programmes, et notamment les figures. Souvent, de multiples itérations sont nécessaires pour obtenir exactement la taille et les polices de caractères voulues. Sysquake for LaTeX fournit une solution élégante à ce problème : en s’intégrant dans l’environnement que l’auteur connaît déjà, il offre la puissance de Sysquake grâce à quelques commandes LaTeX simples.

Fonctionnement

Sysquake for LaTeX est fait de deux parties.

  • Le paquetage LaTeX proprement dit, qui est un fichier .sty (code source) contenant des définitions de commandes LaTeX. Les fragments de code Sysquake figurent soit comme des arguments de commandes LaTeX, soit comme du texte dans un environnement de type verbatim où les caractères propres à LaTeX n’interfèrent pas. Le rôle des commandes est double : dans une première phase, elles extraient les fragments de code et les écrivent dans un fichier séparé avec l’information qui permettra de placer le résultat au bon endroit ; dans une seconde phase (exécution suivante de latex ou pdflatex), elles importent les résultats de l’évaluation.
  • Un programme compilé séparé, sysquakelatextool, qui interprète les fragments de code Sysquake et génère du code LaTeX et des fichiers EPS.

Pour l’auteur, LaTeX est utilisé comme n’importe quel autre paquetage LaTeX : le traitement du fichier .tex se fait comme d’habitude et les résultats sont insérés automatiquement dans le fichier de sortie DVI ou PDF.
Sysquake for LaTeX fonctionne avec n’importe quelle distribution LaTeX qui supporte l’extension shell escape (\write18), telle que TeXLive ou MiKTeX. Si l’extension shell escape manque, sysquakelatextool peut être lancé explicitement.

Exemple

Le court exemple qui suit donne une idée de l’utilisation de Sysquake for LaTeX.

\documentclass{report}
\usepackage[latexingraphics]{sysquake}
\usepackage{graphicx}
\usepackage{epstopdf}
\begin{document}

Dans Sysquake, $e^{j \cdot \pi} = \sqexpr{exp(1j * pi)}$.

Voici le tracé de $f(x) = (x+0.3)^2 + 7.2 e^{-3x^2}$:

\begin{sysquake}(300,200)
a = 7.2;
fplot(@(x) (x+0.3)^2+a*exp(-3*x^2), [-2,3], 'r');
label '$x$' '$f(x)$';
\end{sysquake}
\end{document}

Le résultat est reproduit à la figure. 3.

JPEG - 8.7 ko
résultat de l’exemple après traitement par pdflatex et Sysquake for LaTeX

Diffusion

Plusieurs facteurs expliquent le succès de LaTeX. En plus de la qualité du résultat, on trouve LaTeX sur de très nombreuses plates-formes et il est gratuit. On peut ainsi facilement écrire des documents à plusieurs, les soumettre pour publication et les reprendre des années plus tard. Sysquake for LaTeX prend cela en compte. Actuellement, sysquakelatextool est disponible pour Windows, Mac OS X et Linux. Au cas où le document devrait être recréé sur une autre plate-forme, une option du paquetage supprime l’extraction des fragments de code et leur évaluation. Enfin, Sysquake for LaTeX est gratuit.

Conclusion

Le tout premier but du développement d’un clone de Matlab en 1997 était d’avoir à disposition une implémentation rapide, de taille raisonnable et indépendante du système d’exploitation pour des applications difficile ou impossible à réaliser avec Matlab. Dix ans après, il reste d’actualité. Le langage, et d’autres aspects de Sysquake, ont été étendus pour faciliter le travail du développeur. La 3D est une extension naturelle où l’interactivité, et sa simplicité de mise en oeuvre, ont été conservées.
Sysquake for LaTeX facilite beaucoup l’écriture d’articles et de livres scientifiques. De plus, il peut être utilisé pour la création automatique de rapports dans toutes sortes de domaines : résultats d’analyses de laboratoire, surveillance, finance, etc.



Cherchez ...

- dans tous les Flash informatique
(entre 1986 et 2001: seulement sur les titres et auteurs)
- par mot-clé

Avertissement

Cette page est un article d'une publication de l'EPFL.
Le contenu et certains liens ne sont peut-être plus d'actualité.

Responsabilité

Les articles n'engagent que leurs auteurs, sauf ceux qui concernent de façon évidente des prestations officielles (sous la responsabilité du DIT ou d'autres entités). Toute reproduction, même partielle, n'est autorisée qu'avec l'accord de la rédaction et des auteurs.


Archives sur clé USB

Le Flash informatique ne paraîtra plus. Le dernier numéro est daté de décembre 2013.

Taguage des articles

Depuis 2010, pour aider le lecteur, les articles sont taggués:
  •   tout public
    que vous soyiez utilisateur occasionnel du PC familial, ou bien simplement propriétaire d'un iPhone, lisez l'article marqué tout public, vous y apprendrez plein de choses qui vous permettront de mieux appréhender ces technologies qui envahissent votre quotidien
  •   public averti
    l'article parle de concepts techniques, mais à la portée de toute personne intéressée par les dessous des nouvelles technologies
  •   expert
    le sujet abordé n'intéresse que peu de lecteurs, mais ceux-là seront ravis d'approfondir un thème, d'en savoir plus sur un nouveau langage.