next up previous contents
Next: Intégrationtransformée de Laplace Up: Interface utilisateur. Previous: Drapeaux.

Passage de la représentation interne à la représentation utilisateur.

  Ceci s'adresse plutôt aux personnes qui désirent programmer en utilisant les routines de ALGB (en RPL utilisateur, pour le RPL système, je n'ai pas écrit de documentation autre que celle du code source de ALGB). Lorsqu'on écrit des programmes, on s'aperçoit rapidement qu'on perd beaucoup de temps si à chaque instruction il est nécessaire de convertir du mode utilisateur au mode interne et réciproquement. Par exemple, si on additionne 'X+1' et 'X+1', l'addition en interne prend 0.2s environ, alors que les conversions durent 0.4s. L'instruction SXL a pour but de convertir une fois en début de programme l'ensemble des entrées utilisateur en entrée interne et la même instruction convertit à nouveau les données internes au format utilisateur. Le flag 17 indique aux instructions intermédiaires qu'il n'est pas utile de convertir les données.

Le schéma de pile est le suivant pour convertir en interne:

stk n+1: obj_n    ->  stk n+1: liste des variables
 ...              ->  stk   n: obj_n
stk   2: obj_1    ->    ....
stk   1: #n       ->  stk   1: obj_1
Réciproquement, il faut mettre sur la pile la liste des profondeurs des objets symboliques, c'est-à-dire #2h pour une matrice, #1h pour un vecteur et #0h sinon:
stk n+2: liste de variables   ->
stk n+1: obj_n                ->  
 ...                          -> stk   n: obj_n
stk   2: obj_1                ->      ....
stk   1: { #pn ... #p1 }      -> stk   1: obj_1

Exemple:
Le crochet de Poisson de 2 matrices est défini par:

displaymath1489

(en mécanique quantique, c'est le symbole principal du commutateur de deux observables à tex2html_wrap_inline1491 près) On pourrait écrire le programme suivant:

<< @ A, B -> A*B-B*A
   DUP2 0 MMULT 3 ROLLD SWAP 0 MMULT SUBT
   >>
et le sauvegarder dans la variable POISSON. Si on essaie ce programme sur les deux matrices:
  A = { { X 'X+1' }     B = { { 'X-1' '3*X' }
        { 'X+2' 2 } }         { 'X^2+4'  7  } }
on obtient la réponse:
  { { 'X^3-2*X^2-2*X+4'   '2*X^2+X+8'        }
    { '-X^3+3*X^2-10*X-8' '-X^3+2*X^2+2*X-4' } }
après 9.2s. Si on modifie le programme en:
<< #2 SXL
   DUP2 0 MMULT 3 ROLLD SWAP 0 MMULT SUBT
   { #2 } SXL
   >>
on obtient la même réponse après 3.8s. Notez que l'argument #2 avant le premier appel à SXL signifie que le programme agit sur 2 arguments, alors que la liste { #2 } avant SXL signifie que la réponse est une matrice (profondeur 2) et non un polynôme ou un vecteur.

Notez que l'instruction MMULT permet d'effectuer des produits de différents types, selon l'argument situé au niveau 1 de la pile, les arguments aux niveaux 2 et 3 sont:


next up previous contents
Next: Intégrationtransformée de Laplace Up: Interface utilisateur. Previous: Drapeaux.