Table des matières Mathematica

Interface avec Mathematica

1. Balise <mathematica>

L'attribut type (optionnel) permet de préciser l'action à effectuer

1.a. Attribut type='code'

C'est la valeur par défaut. Le noeud mathematica doit contenir le texte du code mathematica à exécuter. Le code de tous les blocs mathematica est exécuté en une seule fois. Le code apparait dans la page sous forme d'un bloc préformaté identique à l'original; il faut donc éviter les lignes trop longues.

Exemple : le fragment xml suivant :

<mathematica>
    f[x_]:=Sin[2*Pi*x];
    g[x_]:=1/x;
    s = "bonjour";
</mathematica>            
            

génère le résultat :

                f[x_]:=Sin[2*Pi*x]; 
                g[x_]:=1/x;
                s = "bonjour";
            

1.b. Attribut type='plot'

Le noeud mathematica doit contenir le code d'une (seule) fonction Mathematica de tracé, par exemple Plot ou Show. L'image générée est au format PNG. Les attributs supplémentaires sont name pour le nom du ficher png, width et height pour la taille de l'image. Une figure PDF est aussi générée, avec un lien vers cette figure apparaissant à côté de l'image PNG.

Exemple : le fragment xml

<mathematica type='plot' name='figSinus.png' width='500' height='400'>
     Plot[f[x],{x,0,5}]
</mathematica>

génère le résultat :

Plot[f[x],{x,0,5}]
figSinus.pngfigSinus.pdf

1.c. Attribut type='print'

Le noeud mathematica doit contenir une expression Mathematica qui est convertie en chaine de caractère. L'attribut optionnel term précise si la sortie doit être de type InputForm (false, valeur par défaut) ou de type terminal, c'est-à-dire une chaîne ascii sur plusieurs lignes (true)

Exemple : le fragment xml

<mathematica type='print'>g[x+1]</mathematica>

génère le résultat

(1 + x)^(-1)

1.d. Attribut type='mathml'

Le noeud mathematica doit contenir une expression Mathematica qui est convertie en MathML. L'attribut display précise si l'équation est dans le corps du texte (inline) ou centrée (block, valeur par défaut). L'expression est en fait convertie en TeX par Mathematica puis en MathML par ptex2mathML.

Exemple : le fragment xml

<mathematica type='mathml'>Sqrt[(x+1)/(x-1)]</mathematica>

génère le résultat

x+1x-1

alors que le fragment xml

<p>&Eacute;quation en ligne : <mathematica type='mathml' display='inline'>1/x</mathematica></p>

génère le résultat

Équation en ligne : 1x

Les matrices peuvent aussi être converties en MathML :

A={{1,2,3},{4,5,6},{7,8,9}}
1 2 3 4 5 6 7 8 9

1.e. Attribut type='datatable'

Le noeud mathematica doit contenir une liste numérique qui est convertie en structure de donnée xml. Dans ce cas, la balise ne fournit aucun résultat visible. Il doit y avoir au moins l'un des attributs export ou id (mais pas les deux). L'attribut export indique le nom du fichier xml où est enregistrée la liste, pour un usage dans la même page ou dans une autre page. L'attribut id identifie la liste pour un usage dans la même page.

Exemple : le fragment xml

 
<mathematica type="datatable" id="tableA">
    <title>Table A</title>
    <type>%g;%g</type> 
    <head separator='#'>x#y</head>
    <array>{{1,2,3,4,5},{1.5,2.5,3.5,1,0}}</array>
</mathematica>              
                

génère une table numérique qui peut être affichée avec le fragment suivant :

<table type="data" src="#tableA"/>

qui donne :

Table A
xy
11.5
22.5
33.5
41
50

On peut aussi obtenir une figure SVG à partir de ce tableau avec ce code xml:

                <plot type="plot2d" name="fig1.svg" width="600">
                    <plot2d> 
                        <view xmin="0" xmax="5" ymin="0" ymax="5"/>
                        <legends>
                            <title>Plot 1</title> 
                            <x>X_1</x> 
                            <y>Y</y>
                        </legends>
                        <axes xticks="5" yticks="5" grid="true"/>
                        <plotxy datasrc="#tableA" x="0" y="1"> 
                            <curve stroke="red" stroke-width="1" dasharray="none"/>
                        </plotxy>
                    </plot2d>
                </plot>

ce qui donne la figure suivante

fig1.svgFigure pleine page

1.f. Attribut type='xml'

Dans ce cas, l'élément mathematica contient une chaine de caractères Mathematica, représentant un fragment XML qui est inséré à l'emplacement correspondant.

Exemple : le fragment suivant (auquel il faut ajouter un CDATA pour encadrer la chaine)

<mathematica type="xml">"<p><sb>"<>ToString[N[Pi]]<>"</sb></p>"</mathematica>

génère le résultat suivant :

3.14159

1.g. Attribut visible

L'attribut optionnel visible indique si le code mathematica doit être visible (true, valeur par défaut) ou pas (false) dans la page. Dans ce dernier cas, le code est tout de même présent dans le fichier html final mais avec un attribut css le rendant invisible. Dans le cas type='math', il y a toujours visibilité de l'équation MathML générée.

2. Exemple

Diffraction par une ouverture circulaire :

 
a=0.0001; (*diametre*)    
lambda=0.5*10^-6; 
k=2*Pi/lambda;  
intensite[theta_]:=(2*BesselJ[1,k*a/2*Sin[theta]]/(k*a/2*Sin[theta]))^2; 
Plot[intensite[theta],{theta,-0.02,0.02},PlotRange->{{-0.02,0.02},{0,1}},AxesLabel->{"theta","i"}]
figDiffraction.pngfigDiffraction.pdf

Création des tableaux à exporter

n=101;   
theta = Table[-0.02+k*0.04/n,{k,n}];   
i = Map[intensite,theta]; 
m = {theta,i};   

Exportation des données puis tracé de la courbe avec le code xml suivant :

            <mathematica type="datatable" export="tableB.xml">  
                    <title>Table B</title>  
                    <type>%g;%g</type>
                    <head separator='#'>theta#I</head>
                    <array>m</array>
            </mathematica>
                <plot type="plot2d" name="fig2.svg" width="600">
                    <plot2d> 
                        <view xmin="-0.02" xmax="0.02" ymin="0" ymax="1"/>
                        <legends>
                            <title>Plot 2</title>
                            <x>theta</x> 
                            <y>I</y>
                        </legends>
                        <axes xticks="10" yticks="10" grid="true"/>
                        <plotxy datasrc="tableB.xml" x="0" y="1"> 
                            <curve stroke="red" stroke-width="1" dasharray="none"/>
                        </plotxy>
                    </plot2d>
                </plot>
fig2.svgFigure pleine page
Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.