Il s'agit d'un module Perl pour faire des calculs numériques, à la Matlab. http://pdl.perl.org/ Au prompt du shell, taper perldl puis demo demo pdl demo 3d demo 3d2 demo 3dgal ---------------------------------------------------------------- Premiers calculs use PDL; $a =zeroes 5,5; print $a; $m = zeroes(3,2,2); print $m; # Affectuer la même opération sur tous les éléments d'une matrice print $a; $a++; print $a; # Avoir une liste d'entiers # On remaruera que les indices commencent à 0 print xvals(10); # avoir la liste des abscisses des points # On remarquera qu'il ne s'agit pas de la notation usuelle pour # les coefficients d'une matrice (qui est de toute manière aberrante). print $a; $b = xvals $a; print $b; # Opérations élément par élément print $a; $b = $a + 0.1 * xvals($a) + 0.01 * yvals($a); print $b; $x = xvals(10) / 5; print $x,"\n"; print ((sin $x),"\n"); # On peut récupérer des tranches de matrice # La syntaxe doit être la même qu'avec Matlab : # - L'abscisse, une virgule, l'odonnée # - L'abscisse (et l'ordonnée) peut être # . une liste de numéros, séparés par des << : >> # (par exemple 1:2:3:5) # . on peut préciser qu'il s'agit d'un intervalle i # avec un << : >> tout seul # . INCOMPLET print $b; print $b->slice(":,2:3"); print $b->slice("2:3,:"); # On peut récupérer la diagonale (celle formée des deux premières # dimensions, numérotées 0 et 1). print $b->diagonal(0,1),"\n"; # Ces tranches sont des REFERENCES sur les morceaux de la matrice. # Pour modifier la matrice, il suffit donc de les modifier. $diag = $b->diagonal(0,1); print $b; print $diag; $diag += 100; print $diag; print $b; print $b; $t = $b->slice("0:4:2"); $t += 50; print $b; # Exemples d'autres fonctions print $b; print $b->sumover; print $b->sum; print $b; print $b->minimum; print $b->min; # Transposée (la matrice reste inchangée) print $b; print $b->xchg(0,1); print $b; # Matrice aléatoire de la même taille print $b->random; # Manipulations plus intéressantes # Récupérer les indices des éléments vérifiant une certaine condition. $a = (xvals 12)/3; print $a; print sin($a); $i = which( sin($a) > 0.5 ); print $i; # Récupérer les éléments correspondants print $a->index($i); # autre méthode print $a->where( sin($a) > 0.5 ); # Mais cette fois-ci, ce ne sont plus des références sur les # éléments de la matrice de départ... $b = $a->index($i); print $b; print sin($b); $b = zeroes $b; print $b; print $a; # inchangé ------------------------------------------------------------------------- Dessins en 3D