manuel maple 7

Upload: roganjo

Post on 14-Jul-2015

195 views

Category:

Documents


0 download

TRANSCRIPT

1 - Les nombres dans Z, Q, R et C AvertissementCertains aspects de ce chapitre sont lmentaires et peuvent donner l'impression qu'une lecture rapide est suffisante. En ralit, on a profit de la simplicit des exemples pour prsenter des points trs importants (et pas toujours vidents) du fonctionnement de MAPLE et une lecture attentive, y compris l'annexe Commentaires sur l'utilisation de MAPLE, est vivement conseille pour aborder la suite du manuel. Entres des commandes : Pour qu'une ligne d'oprations soit effectue et affiche elle doit tre crite aprs un prompt (ici " > ") et doit se terminer par un " ; " puis par Return. Si la ligne se termine par " : " puis par Return elle est excute mais aucun rsultat n'est affich. Nous aurons l'occasion de revenir sur l'utilit de cette criture.Nombres entiers On profitera des exemples trs simples fournis par les nombres entiers pour donner quelques caractristiques sur l'entre des commandes.Les nombres entiers et les oprations sont reprsents de faon trs simple : la multiplication est dsigne par une astrisque obligatoire et les parenthses dfinissent la priorit des oprations.Notez le ; terminant la commande> (-3+1)*(4-1)-3;-9Pour une commande longue MAPLE coupe l'expression automatiquement et passe la ligne suivante (csure). On peut cependant souhaiter, pour une meilleure prsentation, effectuer soi-mme ces csures. Ainsi dans l'exemple suivant la premire ligne se termine par Majuscule-Return. MAPLE attend alors la suite de l'expression qui sera donne la ligne suivante. Celle-ci se termine par un " ; " puis Return . Des espaces peuvent permettre d'amliorer la lisibilit mais ils ne peuvent pas tre insrs dans l'criture d'un nombre (par exemple 1000 et non 1 000)> ((3+7)*(5-3)+2) - (-32*2/(64-4*8)) + (6-4)/2 + (121-81)/2 - 3*(5/2+3/2) - 720/5/6/4/2;30> 3*1 000;Error, unexpected number __________________IMPORTANT_____________________ On peut toujours, l'aide de la souris, positionner le pointeur (petite barre verticale clignotante) sur une commande dj excute, la modifier (ou non) et l'excuter nouveau. Il faut alors noter les deux points suivants : L'tat de MAPLE n'est pas ncessairement celui qui est affich par la feuille de calcul... ! Deux exemples d'illustration sont donns la page 12, paragraphe IV de Commentaires sur l'utilisation de MAPLE. Pour excuter une commande, le pointeur peut se trouver n'importe o sur la ligne de commande quand on tape Return. Aprs la correction d'une commande il est inutile de perdre son temps dplacer ce pointeur en fin de ligne comme on voit le faire souvent chez les dbutants.___________________________________________________Symboles %, %% et %%% : Le symbole % (dito) dsigne le rsultat de la dernire instruction excute (dans l'ordre chronologique) et peut tre utilis dans une expression. Le double symbole %% et le triple symbole %%% dsignent les rsultats prcdents. 1%% et le triple symbole %%% dsignent les rsultats prcdents. > 2*%; 3*%% ; 3*(%%%/2+1);609048Attention : ces symboles sont d'un usage commode mais doivent tre manipuls avec prcautions (voir l'annexe importante la fin de ce chapitre sur le fonctionnement de MAPLE, page 13). Autre exemple permettant une prsentation sur plusieurs lignes de plusieurs commandes: la premire ligne se termine par un Majuscule-Return, la deuxime par Return. Chaque expression se termine par un ; ce qui entrainera l'valuation de chacune et l'affichage sur des lignes spares. On peut crire un commentaire la fin de la ligne (aprs le : ou le ; ) en le faisant prcder du caractre #. L'lvation une puissance s'crit l'aide du symbole ^> -6*(-4) ;-10/(-2); # Les parenthses sont ncessaires (-3-1)^2;(1/2)^(-2);245164Si on termine chaque expression par une virgule et la dernire par point-virgule on obtiendra aussi les rsultats. Ceux-ci s'afficheront sur la mme ligne mais "l'objet" MAPLE cr aura une signification particulire que nous examinerons au chapitre 3, Ensembles, Listes, Intervalles, Suites.> -6*(-4) ,-10/(-2), (-3-1)^2,(1/2)^(-2);, , , 24 5 16 4MAPLE connat beaucoup de fonctions dfinies pour les entiers comme par exemple la fonction factorielle qu'on utilise avec la notation standard. > 40!-6^36;815915283247897734335296844797625358725828050944Le nombre maximal de chiffres autoriss, bien que trs grand, est limit et sa valeur dpend de l'ordinateur utilis.On peut l'obtenir avec la commande (ici plus de 268 millions de chiffres, mais attention aux temps de calcul ! ):> kernelopts(maxdigits);268435448On peut affecter, on dit aussi assigner, un nombre un nom en utilisant la notation: =Attention: le signe = seul a une autre signification sur laquelle nous reviendrons (dfinition d'une quation) > n:=2^77-1; :=n 151115727451828646838271On peut se poser la question " n est-il premier ? " en utilisant la fonction isprime(lire : is prime ?). La rponse false signifiant "faux", la rponse est "non" > isprime(n);falseOn obtient alors sa dcomposition en facteurs premiers avec la fonction ifactor(integer factorization)) 2(integer factorization)) > ifactor(n);( ) 23 ( ) 89 ( ) 127 ( ) 581283643249112959Autre exemple : les coefficients du binme C(n,p) = n! / [p! (np)!] sont donns par la fonction binomial(n, p) > binomial(10,3);120On peut vrifier la relation entre les coefficients du binme C(n+1, p+1) = C(n, p) + C(n, p+1) > binomial(5,3), binomial(4,2)+binomial(4,3); , 10 10Aide MAPLE

On ne dtaillera pas dans ce manuel toutes les fonctions de MAPLE relatives aux calculs sur les nombres entiers pas plus que bien d'autres fonctions. Celles-ci peuvent tre dcouvertes dans l'aide (help) en ligne (c'est--dire directement l'aide du logiciel). Il faut aussi savoir que toutes les fonctions ne sont pas "charges" au moment du lancement de MAPLE et que certaines ne seront accessibles qu'aprs les avoir lues dans des bibliothques (fonction with). C'est un point sur lequel nous reviendrons en temps utile. L'aide en ligne peut tre obtenue de trois faons Soit en donnant le nom de la fonction et en le faisant prcder d'un point d'interrogation > ?binomial Une fentre s'ouvre alors et donne la dfinition, des explications et des exemples. On peut aussi utiliser la fonction example: > example(binomial); On trouvera aussi un menu help qui offre plusieurs options - L'option using help qui ouvre une fentre contenant un classement hirarchis des fonctionnalits de MAPLE et un guide d'utilisation de l'aide en ligne. - L'option help on context. Lorsque le pointeur d'insertion (petite barre verticale clignotante indiquant o l'on se trouve dans la fentre) est sur un mot, par exemple binomial, help on binomial (ou help on context) permet d'ouvrir la fentre correspondante du help. - L'option Topics search ouvre une fentre dans laquelle on indique un mot pour lequel on recherche une information. Ds l'entre de la premire lettre une liste de tous les mots cls de MAPLE commenant par cette lettre s'affichent. Au fur et mesure que l'on prcise le mot, la liste se rduit. Un double "clic" sur la ligne du mot souhait ouvre la fentre help. - L'option Full text search. Aprs avoir donn le mot complet, la liste des points d'entre du help associ ce mot sont donns sous la forme d'une liste. Un double "clic" sur la ligne souhaite ouvre la fentre help correspondante.On recommande vivement de complter ces informations de base par une exploration des possibilits de l'aide en ligne que l'on trouvera avec l'option Using help du menu help. Nombres Rationnels Les nombres rationnels sont considrs par MAPLE comme tels s'ils ne sont pas simplifiables, c'est--dire comme des rapports de deux entiers et non comme leurs approximations dcimales. L'valuation d'un rsultat non entier reste sous sa forme rationnelle. > 1/4-1/3; 4*(15/32+2*(-3/192+1/32));-11223Nombres Irrationnels Comme pour les nombres rationnels, les nombres irrationnels sont conservs en tant que tels (sous une forme symbolique) s'ils ne sont pas simplifiables. Par exemple, pour une racine carre on dispose de deux notations quivalentes : ^ ou sqrt (square root) : > a:=3^(1/2); a:=sqrt(3); sqrt(9); :=a 3 :=a 33Le symbole a est uniquement considr par MAPLE comme le nombre positif dont le carr vaut 3, etc.> a^2; 3MAPLE effectue parfois automatiquement des transformations pour prsenter un nombre> b:=2^(-1/3); b^(-3); :=b122( ) /2 32Il n'effectue pas ncessairement des calculs qui peuvent paratre vidents l'utilisateur. Ici on doit forcer MAPLE effectuer le travail l'aide de la fonction simplify sur laquelle nous reviendrons au chapitre 13, Simplifications, Manipulations. > sqrt(6)/sqrt(2); simplify(%);126 23Nombres Remarquables MAPLE connat, au sens de leurs proprits et pas seulement par leurs approximations numriques, quelques nombres remarquables comme par exemple Pi = (notez le P majuscule). Il peut ainsi exprimer certains rsultats de fonctions classiques qui sont, si possible, values automatiquement (GAMMA est la fonction eulerienne ) > Pi; cos(Pi/4); GAMMA(1/2); 122Certaines valeurs que MAPLE sait calculer (ce n'est pas toujours le cas) ne le sont cependant pas et il faut forcer l'valuation> cos(Pi/5); 4> cos(Pi/5); convert(cos(Pi/5),radical);cos15 + 14145La base e des logarithmes npriens n'est pas prdfinie. Elle l'est seulement par exp(1) > exp(1);

eAttention : Le symbole e affich en sortie n'a aucun rapport avec le nom e d'une variable, sauf bien sr si on lui assigne cette valeur :> ln(e); e:=exp(1); e; ln(e);( ) ln e :=e ee1MAPLE est capable de reconnatre l'quivalence de deux expressions comme exp(1/2) et e. En rgle gnrale il faudra cependant l'obliger effectuer cette comparaison comme ici avec la fonction simplify> exp(1/2)-sqrt(e); simplify(%); e( ) /1 2e0Nombres Dcimaux Ils sont nots de faon standard (avec un point) > -1.2+0.035;-1.165Il existe trois faons de dfinir des nombres avec des puissances de 10, la plus simple utilisant la notation scientifique (indiffremment e ou E). Pour le dernier exemple, les arguments de la fonction Float doit tre des entiers ce qui rend son maniement quelquefois dlicat (risques d'erreurs). > -13.345E-27,45e543,1.542*10^(-30),Float(1542,-33);, , , -.13345 10-25.45 10545.1542000000 10-29.1542 10-29Attention : on ne pourra pas laisser le point dcimal seul devant e ou E> 45.e6;Error, missing operator or `;` et il faudra crire (sans caractre d'espacement)> 45.0e6;.450 108La raison vient de ce que "." peut tre compris par MAPLE comme un oprateur de multiplication non commutatif5> y*x-x*y; y.x-x.y;0 ( ) .y x ( ) .x yLorsqu'il peut exister une ambigut, ce qui n'tait pas le cas dans l'exemple prcdent, le "." doit tre obligatoirement prcd d'un espace pour tre compris comme oprateur de multiplication.> 4.5 , 4 .5 , 4 . 5; , , 4.5 20 20Ici MAPLE comprend "45 x 0."> 45 .0e6;0.Maintenant MAPLE dtecte une erreur> 45. 0e6;Error, unexpected real number On ne saurait trop recommander de rserver l'usage de cet oprateur aux seules oprations non commutatives comme par exemple les produits de matrices (voir chapitre 4, Vecteurs,Matrices et Algbre linaire).Evaluation dcimale implicite : le mlange dans une expression, de nombres exprims en notation dcimale avec d'autres reprsentations (entire ou fractionnaire) entrane l'valuation en valeur dcimale.> 0.5+1/3;.8333333333alors que > 1/2+1/3;56Notez la diffrence entre ces deux rsultats:> 1./7*10^(-20); 1 /7*10^(-20); .1428571429 10-201700000000000000000000On parle ici de nombres crits seulement avec des chiffres et non reprsents symboliquement comme par exemple 2> 1.+sqrt(2); Pi+5.; +1. 2 + 5.Lorqu'une fonction est invoque avec un argument purement dcimal, MAPLE calcule le rsultat sous une forme dcimale > exp(1.5); exp(-1.0e2); 6exp(-1.0e2); 4.481689070.3720075976 10-43avec nanmoins des limitations sur la taille des nombres> exp(-1.0e10),exp(1.0e30),2*exp(1.0e30); , , 0. ( ) Float ( ) Float Le plus grand et le plus petit nombre dcimal (>0) que peut reprsenter MAPLE sur l'ordinateur utilis sont donns par> Maple_floats(MAX_FLOAT),Maple_floats(MIN_FLOAT);, .1 102147483647.1 10-2147483645Exercice : Comparer cet exemple avec celui donn plus haut:> 1+sqrt(2.);2.414213562Dans les deux exemples qui suivent les arguments ne sont pas purement dcimaux et MAPLE ne prendra pas l'initiative de remplacer ou2 par la valeur dcimale approche (priorit est toujour donne au calculs symboliques) :> exp(1.+Pi);# Voir le paragraphe suivant sur la fonction evalf exp(1.-sqrt(2));e( ) +1. e( ) 1. 2Il est possible de convertir un nombre dcimal en nombre fractionnaire. MAPLE renvoie alors une fraction rduite au plus petit dnominateur> r_Pi:=convert(3.1415927,rational); ifactor(%); :=r_Pi12600340108( ) 3 ( ) 97 ( ) 433( ) 22( ) 37 ( ) 271On obtient la partie entire d'un nombre avec la fonction trunc ou l'entier le plus proche avec round. On remarquera qu'il n'est pas ncessaire de forcer au pralable l'valuation dcimale.> a:=1.648; trunc(-a); round(-a);#-2 est l'entier le plus proche de -1.648... trunc(Pi); :=a 1.648-1-23Evaluations dcimales des nombresLa fonction evalf MAPLE est avant tout un calculateur symbolique mais on peut toujours obtenir une approximation dcimale d'une expression numrique avec la fonction evalf (contraction de 7evaluation en reprsentation flottante)> evalf(5/6); evalf(100!);.8333333333.9332621544 10158MAPLE ne dit rien sur l'valuation de exp(1/2). Une valuation dcimale passe par la fonction evalf > a:=exp(1/2); evalf(a); :=a e( ) /1 21.648721271Le nombre de chiffres significatifs rendus par MAPLE est fix par dfaut 10 par le symbole global prdfini Digits (le sens du mot global sera dfini au chapitre 19, Procdures). Noter le D majuscule et le s final.> Digits;10Cependant le nombre de chiffres significatifs peut tre fix par un nombre entier avec la syntaxe evalf[n](x) qui signifie: donner une reprsentation dcimale de x avec n chiffres significatifs.Ceci n'affecte que le calcul demand et ne modifie pas la valeur de la variable Digits.> evalf[100](Pi);Notez le " \ " en fin de premire ligne qui indique que l'affichage du nombre se poursuit.3.14159265358979323846264338327950288419716939937510582097494459230781640628\6208998628034825342117068Il existe aussi une autre forme, evalf(x,n), utilise dans les prcdentes versions et encore valable. La forme prsente ci-dessus est maintenant recommande.On peut changer la valeur de Digits pour une srie de calculs puis, si ncessaire, revenir la valeur standard. On notera que certaines des commandes suivantes se terminent par deux points. En effet l'affichage de leurs rsultats n'est pas d'un grand intrt et peut, pour des affichages longs, encombrer inutilement la lecture.> Nb_digits:=Digits: # Pour mmoriser la valeur par dfaut Digits:=50: evalf(a); evalf(Pi)/5;1.6487212707001281468486507878141635716537761007101.62831853071795864769252867665590057683943387987502> Digits:=Nb_digits: # Pour restituer la valeur par dfaut evalf(a); evalf(Pi)/5;1.648721271.6283185308La fonction evalhfLes langages de programmation comme FORTRAN ou C travaillent avec une prcision fixe (6 7 chiffres en simple prcision et 15 16 chiffres en double prcision pour une machine 32 bits) et la comparaison avec les possibilits offertes par MAPLE semble difficile soutenir premire vue. En fait MAPLE gnre ses calculs numriques partir d'algorithmes dont la prcision peut tre tendue (arithmtique mule) alors que les autres langages utilisent (sauf utilisation de bibliothques spcialises) l'arithmtique cable du processeur dont la prcision ne peut videmment pas tre change mais dont la vitesse d'excution est beaucoup plus grande. La 8peut videmment pas tre change mais dont la vitesse d'excution est beaucoup plus grande. La possibilit de fixer la prcision va donc tre au prix d'une baisse de la rapidit des calculs. Ds que le volume des calculs augmente, la diffrence devient sensible jusqu' les rendre totalement impraticables et l'utilisation des langages cits plus haut devient indispensable. On peut nanmoins indiquer MAPLE d'utiliser l'arithmtique binaire cable du processeur avec la fonction evalhf (hardware floating evaluation). Bien sr on ne pourra plus fixer la prcision qui dpendra de la machine sur laquelle on travaille et qui sera celle de sa double prcision (gnralement 15 16 chiffres).> a; evalhf(a);e( ) /1 21.64872127070012819On notera cependant qu'avec evalhf l'on ne pourra pas se fier au dernier ou deux derniers chiffres affichs (en raison des conversions "reprsentation binaire" -> "reprsentation dcimale" et rciproquement).> evalhf(7/3); evalf[18](7/3);2.333333333333333482.33333333333333333ou encore> evalhf(7/5); evalf[18](7/5);1.399999999999999901.40000000000000000ATTENTION : on notera que Digits est une variable trs particulire relativement la fonction evalhf et que le rsultat peut surprendre !!! La dernire expression donne le nombre (entier) de chiffres significatifs obtenus avec evalhf. Ce nombre dpend de l'ordinateur utilis.> Digits; evalhf(Digits); trunc(evalhf(Digits));1015.15Exercice : pouvez-vous expliquer la raison de la diffrence entre les rsultats suivants : > evalhf(2*Pi/3); evalhf(2*Pi)/3;2.094395102393195262.094395102Nombres Complexes Les nombres complexes, mis sous la forme algbrique, s'crivent a + I * b : le symbole prdfini I dsigne sqrt(1). Noter la majuscule pour I. > sqrt(-1); z:=3+2*I;I :=z+3 2 ILes fonctions numriques prdfinies de MAPLE sont arguments et valeurs complexes9On peut demander d'valuer une expression complexe sous sa forme algbrique a + I *bavec la fonction evalc> c:=exp(z); evalc(c); :=c e( ) +3 2 I +e3( ) cos 2 I e3( ) sin 2ou demander une approximation dcimale > evalf(c); +-8.358532651 18.26372704 IAttention : contrairement ce que dit le help de MAPLE, la fonction evalhf fonctionne aussi avec les complexes (help non mis jour) !> evalhf(7/5+1/3*I); +1.39999999999999990 .333333333333333314 IBien sr, une reprsentation algbrique symbolique n'est pas toujours possible, mais une reprsentation dcimale peut tre calcule avec le nombre de chiffres significatifs souhaits.> evalc(GAMMA(z)); evalf[20](GAMMA(z));( ) +3 2 I +-.42263728631120216673 .87181425569650686075 IOn peut aussi extraire la partie relle avec Re et imaginaire avec Im> Re(c); Im(c); e3( ) cos 2e3( ) sin 2calculer le module avec abs et l'argument> abs(c); argument(c);e32ou obtenir une expression conjugue> conjugate(c);e( ) 3 2 IPour les nombres symboliques, les expressions conjugues sont notes avec une barre de surlignement. > conjugate((x-y)*c);e( ) 3 2 I( ) x y1011Commentaires sur lutilisation de MAPLEI - A propos de lentre des commandes Il est frquent, surtout au dbut, doublier le ; ou le: devant terminer une commande.RiennestalorsexcutetMAPLErpondparunnouveaupromptsuivitdunmessagedalerte (Warning). Il suffira alors de taper ; ou: pour terminer la commande. Par exemple> a:=2> ; Lambda[0]:=rho*exp(theta)*cos(phi[i+1]);0 1=+ e cos( )iIII - A propos des fausses erreurs de syntaxeLanalyseur syntaxique de MAPLE dtecte les erreurs comme, par exemple, loubli deparenthses ouvrantes ou fermantes. Mais il existe des erreurs assez frquentes qui ne peuventpas tre dtectes car ce sont des erreurs pour lutilisateur, mais pas pour MAPLE qui est uncalculateur symbolique. On a dj rencontr loprateur dassignation :=. Si lutilisateur tape par exemple> a= x+1;il aura peut-tre voulu assigner lexpression x+1 au nom a. Il a crit en ralit une quationdont la syntaxe est parfaitement correcte pour MAPLE qui na aucune raison de dtecter uneerreur. De plus, aucune assignation na t effectue. On peut aussi faire une erreur dans lorthographe dun nom. Par exemple> x_1:= 1;> a:= x1+1; a:= x1+1 (au lieu de 2)Il ny a pas derreur dtecte car x1 est compris par MAPLE comme un nom symbolique.12 De mme, lorsque le nom dune fonction est mal orthographi, MAPLE se contentede la renvoyer lidentique. Il considre cette fonction comme symbolique et non dfinie etparconsquentnesignaleaucuneerreur,cequiestuncomportementnormalpouruncalculateur symbolique. Par exemple on obtiendra (cosinus au lieu de cos):> 3!*cosinus(Pi)/3+2;2 2 cosinus ( ) +alors que lon attend 0. Cette erreur est assez frquente pour des fonctions moins habituelles.Elleestsourcedeconfusions,lutilisateurnonaverticherchantlerreurailleursoupensantquil ne sait pas se servir de la fonction. Un exemple frquent est celui des calculs de limitesavec la fonction de MAPLE qui scrit limit et non lim.Ceci est galement vrai pour une fonction dont la syntaxe est correcte mais qui nestpasautomatiquementchargeparMAPLEaumomentdesonlancement. Pour tre connue,elle devra tre charge par with(...) (nous reviendrons sur ces fonctions en temps utile).IV - Feuille de calcul et tat de MAPLEAu lancement, le programme MAPLE se charge dans la mmoire de la machine : cestce qui va raliser les oprations de calcul. En mme temps une zone mmoire, extensible aufur et mesure des besoins, va tre cre pour stocker lenvironnement propre lutilisateur(nomsdesvariables,expressions,valeursnumriquesetc.)pendantlapriodedutilisation(appele aussi session) : cest ce quon appelle le noyau.Attention : Laspect de la feuille de calcul et ltat interne du noyau de MAPLE sontdeuxchosesdistinctescommeonvalevoirsurdeuxexemples.Cestunpointcapitalcomprendre!1) On peut cliquer sur la zoneinput dune commande dj calcule, la modifier etpressersurReturnpourlexcuternouveau.IlfautalorsfairetrsattentionaufaitquelecontenudelafeuilledecalculnereflteplusncessairementltatinternedeMAPLE.Certains rsultats peuvent apparatre faux car ceux des autres commandes ne sont pas modi-fis en consquence ! Voici un exemple simple :> ....> a:=1;a:=1> ...> a+2;3> ...Maintenant on clique sur la commandea:=1; et on la modifie en crivant a:=2; puis onlexcute. La feuille de calcul aura alors laspect suivant> ....> a:=2;a:=2> ...> a+2;3> ...Tant que la commande a+2; naura pas t r-excute le rsultat affich ne sera pas modifi.Sivoussauvezlafeuilledecalcultellequelleousivouslimprimez,undouterisquedegermerdansvotreesprit:MAPLEsait-ilrellementfairedescalculs?.Lexempleesttrivial, mais il nen est pas toujours ainsi.Pensez toujours vrifier la syntaxe de vos commandes et assurez-vous que les fonctionsutilises sont bien connues de MAPLE avant de vous poser des questions inutiles !132)Lutilisationdudito(%)conduitaummetypedambigutscarcesymboledsignelersultatdeladernireoprationeffectuechronologiquement etnonncessai-rement le rsultat de la commande situe sur la ligne prcdente, ce que lon a gnralementtendance penser en lisant les feuilles de calculs.3) Lorsque lon charge une feuille de calculs enregistre, celle-ci saffiche lcran,maislenoyaudeMAPLEestvide.Pourretrouverlintgralitdunoyauilfautr-excuterlafeuilledecalcul.Ainsi,supposonsquelafeuilledecalculquevousvenezdecharger se rsume la seule ligne> a:=2;a:=2>En entrant directement la commande a+1; sur le prompt final libre vous obtiendrez> a:=2;a:=2> a+1;a+1car 2 naura pas t automatiquement assign la variablea au chargement de la feuille decalculs. Pour obtenir 3 il faudra dabord excuter:> a:=2;Pour excuter la totalit dune feuille de calcul on pourra utiliser Execute/Worksheet du menuEdit4) Recommandation importante : entrez lordre> restart;comme premire commande de votre feuille de calculs.Cette commande vide le contenu de la mmoire associe au noyau. Compte tenu de ce qui at dit prcdemment on peut comprendre que cette commande puisse tre place et excutenimporteodanslafeuilleetlescommandesr-excutespartirdudbutmaisvousrisquezalorsdexcuterlordrerestartparinadvertanceetvidermalencontreusementlenoyau (ceci est particulirement vrai si on excute la feuille par le menu Execute/Worksheet).Sincessaire,onpeutintroduireautantdordre restartquelonsouhaitepoursparer des calculs indpendants.Toutefois, sur certains systmes dexploitation, on peut lancer MAPLE en demandantquechaquefeuilledecalculsaitunnoyauindpendant.ParexemplesousUNIXonpeutdonner au shell la commande :> xmaple -km pou -km signifie kernel management (gestion des noyaux) et p parallel.La commande par dfaut> xmapleLesversions5etsuprieuresdeMAPLEpermettentdouvrirplusieursfeuillesdecalculssimultanment.Attentioncependant,ellessontdpendantespardfautetlesexcutions effectues sur lune affectent les autres. De plus, le fait de fermer tout ou partiedes autres feuilles nefface pas du noyau les calculs effectus.14est quivalente > xmaple -km sou s signifie shared (partag).

V Ouvertures et sauvegardes des feuilles de calculsUnefeuilledecalculspeut,etleplussouventdoittresauvegardedansunfichierpour pouvoir tre rutilise ultrieurement. Deux situations sont alors possibles : Lafeuilledecalculestnouvelle:elleestautomatiquementouverte(vierge)aulancementdeMAPLEetapournomuntitled(sanstitre).LoptionSavedumenuFilepermet de sauvegarder la feuille et MAPLE demande, laide dune fentre de dialogue, deluidonnerunnom.Cetteoprationpeutaussitreraliseenappuyantsurleboutonmarquparledessindunedisquette.OnpeutgalementouvrirunenouvellefeuilleviergeaveclemenuFile/Newouaveclepremierboutondegauche,quelonaitounonfermlesautres feuilles de travail (voir cependant la fin du paragraphe prcdent).Lafeuilleexistedj:aprsavoirlancMAPLEonouvrelafeuilleavecloptionOpen du menuFile. Cette opration peut tre ralise en appuyant sur le bouton marqupar le dessin dun dossier. On peut galement sauver la feuille de calcul sous un autre nomet/ou une autre forme laide du menu File/Save as...On peut demander aussi MAPLE de faire une sauvegardeautomatique toutes lesnminuteslaidedumenuOptions/AutoSaveLesnomsdecesfeuillessontsuivisdelextension _MAS. Ces fichiers sont automatiquement dtruits chaque sauvegarde effectuevolontairement.Les paragraphes suivants ne contiennent que des informations de base qui pourronttrecompltesaveclaideenligneobtenuesoitaveclamenuhelp,soitaveclescommandes suivantes >?worksheet,managing >?worksheet,documentingVI Organisation des feuilles de calculFeuilles de calculLecontenudunefentreMAPLEportelenomdefeuilledetravail ou feuilledecalculs ou worksheet. On remarquera que les ensembles commande plus rsultats associsavecventuellementdescommentaires,sontdmarqussurlagauchepardessortesdecrochetsouvertsdelongueursvariables.Ilsdlimitentdesgroupesdexcution(GroupRanges). Un groupe dexcution peut contenir cinq types de zones : les zones input pour entrer les commandes. Elles se reconnaissent par leprompt >.Dans les feuilles help lexcution ou la modification des commandes donnes en exempleestinterditemaisellespeuventtrefacilementtransportesparcopier-collerdanslesfeuilles de calcul utilisateur. les zones output o saffichent les rsultats. les zones paragraph o lon peut crire du texte. les zones graphisme o sinscrivent les graphiques. les zones tableur dont on ne dira rien dans ce cours.Conseils dutilisation : lorsquon ouvre une nouvelle feuille, la sauvegarder immdiatement,mme vierge, en lui donnant un nom. Effectuer frquemment des sauvegardes en appuyantsimplement sur le bouton marqu de licne disquette.15Poursupprimerunezonedansungroupedexcution,cliquernimporteodanslazone et activer la commande Delete Paragraph dans le menu Edit.Pour supprimer tout un groupe dexcution, on procde de mme mais en cliquant surle crochet (Group Range) qui le dlimite et qui saffiche alors en trait double.Pourinsrerungroupedexcutiononutiliseralunedesoptions,Before(avant)ouAfter (aprs) du menu Insert/Execution Group, avant ou aprs se rfrant au groupedexcution point par le curseur, quelque soit la zone pointe.Pour insrer un paragraphe de texte dans un groupe dexcution, on utilisera lune desoptions, Before ou After du menu Insert/Paragraph, avant ou aprs se rfrant lazone pointe par le curseur dans le groupe dexcution.Pour insrer un paragraphe de texte qui ne soit pas dans un groupe dexcution,oncliquera sur le crochet dun groupe puis on procdera comme prcdemment.Pour couper un groupe dexcution en deux, placer le pointeur lendroit o lon veutcouper puis activer la commande Edit/Split or Join/Split Execution group.Pour rassembler deux groupes dexcution, cliquer quelque part sur le premier groupepuis activer la commande Edit/Split or Join/Join Execution group.Pour supprimer laffichage des crochets dlimiteurs utiliser la commandeView/Show GroupRanges.Certaines de ces oprations sont aussi possibles aprs slection grce aux boutons de labarre des menus de MAPLE.Pour quitter MAPLE on utilisera la commande Exit du menu File.On compltera ces informations avec la commande>?worksheet,documentingSections, sous sections, hyperliensLes feuilles de travail peuvent tre organises laide de sections et sous-sections quipermettentdemasquerounomcertainespartiesdelafeuilledecalcul.Pourcrerdetellessections dans les feuilles de travail, on utilisera le menu Insert/Section ou Insert/Subsection.Pour obtenir des informations supplmentaires excuter la commande>?worksheet,documenting,structuring2Ontrouveraaussidanslesfeuilleshelpdeshyperliens (hyperlink) visualiss pardesmotssoulignsdecouleurdiffrentequirenvoientparunsimpleclicsurlesujetmentionn. La construction dhyperliens dans une feuille de calcul utilisateur vers le help ouvers une autre feuille de calcul est dune grande simplicit grce au menu insert/hyperlink.>?worksheet,documenting,hyperlinksIlexistedenombreusespossibilitsddition(modlestypographiques,insertionsdexpressions mathmatiques dans les textes, etc.) que lon ne dtaillera pas ici. >?worksheet,documenting,stylesVII - Impression des feuilles de calculsLimpressiondesfeuillesdecalculdpenddutypedemachineutiliseetdelenvironnement de travail. Pour les micro-ordinateurs personnels, elle se fera gnralementde faon directe en appuyant sur le bouton imprimante. Sous UNIX on procdera demme mais il faudra passer par une fentre de dialogue et peut-tre (suivant la configuration16de la machine) par un fichier intermdiaire de type postscript que lon imprimera ensuite parune commande du shell.VIII - Affichage des rsultats, tiquetageMAPLE dispose de plusieurs options daffichage que lon peut slectionner laide dumenuOptions/Output Display.LemodeMAPLEnotation:lesexpressionssontaffichesaveclesmmesnotations que celles utilises pour entrer les commandes (sous forme de caractres en ligne).Ces expressions sont ditables et on peut slectionner et copier tout ou partie du texte. LemodeCharacternotation : les expressions sont affiches avec des caractresdessinant au mieux les notations mathmatiques standard. Ces expressions sont ditables.LemodeTypesetnotation:lesexpressionssontdessinesaveclesnotationsmathmatiques standard mais ne sont pas ditables.LemodeEditablemath:lesexpressionssontdessinesaveclesnotationsmathmatiquesstandardmaissontditables(cestlemodedaffichagepardfautdeMAPLE).Cependant ce mode est aussi le plus gourmand en mmoire. Lorsquune slectionest colle dans une zone Input, elle est convertie en mode caractres.AveclesmodesCharacternotation et Typesetnotation(quinesontpaslesmodes par dfaut) et lorsque les expressions affiches sont longues, MAPLE tente de reprerdessousexpressionsquiserptentetlesremplacepardessymboles%1,%2,etc.quilafficheensuite.Cettemthode,ditedtiquetage,peuttremodifie(voirlehelpinterface/labelling et interface/labelwidth).2 - Assignations, Evaluations et Substitutions, Types, Elments sur la structure des expressions Assignations (affectations) et valuations. MAPLE permet d'associer un nom un " objet " quelconque (valide). Dans l'exemple suivant on assigne la constante entire 7 au nom E aprs valuation de l'expression. Notez que la feuille de calcul commence par l'ordre restart comme conseill au chapitre prcdent. > restart:> E:=cos(0)+3!; :=E 7Du point de vue informatique, le nom E est maintenant un identificateur qui pointe sur la constante 7. Pour savoir ce qui est assign au nom E il suffit d'crire> E;7et MAPLE affiche l'objet point par E. A tout nom valide non protg (voir plus loin cette fonctionnalit) on peut assigner n'importe quel objet de MAPLE comme, par exemple, une expression. On notera que l'assignation prcdente sur E est automatiquement dtruite et remplace par la nouvelle.> E:=a*x+b*x^2+2*y-sin(Pi*a); E; :=E+ + a x b x22 y ( ) sin a + + a x b x22 y ( ) sin aIl est important de comprendre qu' chaque fois que E sera invoque, seule ou dans un calcul, MAPLE valuera l'expression associe en fonction du contexte. Ici, en assignant a une valeur ou une expression, l'expression de E change en raison de l'valuation automatique. Le deuxime exemple montre galement que toute l'expression demande est calcule en tenant compte de la nouvelle dfinition de a.> a:=3*x+1; E; E+sin(Pi*a)+2*a; :=a+3 x 1 + + ( ) +3 x 1 x b x22 y ( ) sin ( ) +3 x 1 + + + +( ) +3 x 1 x b x22 y 6 x 2Assignations multiplesOn peut assigner une suite d'objet de MAPLE une suite de noms. On entend par "suite" des lments spars par des virgules. Cette criture conomise la frappe au clavier ainsi que l'espace d'affichage et permet de regrouper des assignations qui ont, pour l'utilisateur, un lien logique entre elles.> a1,b2,c3:=1,x-1,x+sin(x); b2; :=, , a1b2c3 , , 1x 1+x ( ) sinx x 117DsassignationOn peut librer l'assignation a en crivant> a:='a'; :=a aAttention : Il existe deux caractres distincts, ' et `, qui ont des significations diffrentes (voir plus loin dans ce chapitre)Maintenant l'identificateur a existe mais il est dsassign (il pointe sur lui-mme) et l'valuation de E ne peut donner que son expression d'origine> a; E;a + + a x b x22 y ( ) sin aEvaluation, assignation et dsassignationMAPLE valuant toujours les expressions (sauf demande explicite ; voir plus loin), ce que l'on assigne un nom peut tre diffrent de ce que l'on crit> a:=x+1; Ex:=a*x+3; :=a+x 1 :=Ex+( ) +x 1 x 3Mais maintenant, le fait de dsassigner a aprs avoir dfini Ex ne changera pas son expression. On a assign Ex l'expression value de a*x+3 et non a*x+3.> a:='a'; Ex; :=a a +( ) +x 1 x 3Voici un autre exemple d'assignations successives. Avant l'affectation s, MAPLE value r qui vaut 2, etc.> r:=2; s:=r; t:=s; :=r 2 :=s 2 :=t 2Si on 'libre' (dsassigne) un des lments on ne supprime pas les autres assignations> s:='s'; r, s, t; :=s s, , 2s 2Attention : lors d'assignations multiples l'aide de suites, le mcanisme n'est pas rcursif> u,v,w := 2,u,v; :=, , uvw , , 2uvEvaluation expliciteAttention : Ce type d'opration reste d'un usage relativement limit mais doit tre assimil pour comprendre les principes de fonctionnement de MAPLE. Pour un usage systmatique on prfrera la notion de fonction (voir le chapitre 7, Fonctions)18On peut demander l'valuation d'une expression pour une valeur particulire d'un paramtre avec la fonction eval. Les arguments doivent tre successivement l'expression valuer puis une galit fixant la valeur du paramtre.Noter l'utilisation du caractre=seul et non de := (ce ne sont pas des assignations mais des quivalences ; nous verrons que cette notation est aussi utilise pour crire des quations).> P:=(3*x+1)*(x-2); eval(P,x=-2); :=P ( ) +3 x 1 ( ) x 220L'valuation ne change en rien l'expression de P et aucune assignation x n'a t effectue> P; x;( ) +3 x 1 ( ) x 2xFonction inerte Eval et fonction d'activation valueMAPLE dispose d'une fonction inerte Eval qui enregistre une opration d'valuation sans l'excuter, affichant seulement une criture symbolique.> Eval(P,x=-2);( ) +3 x 1 ( ) x 2 =x -2ainsi qu'une fonction value rendant effective l'opration. Le symbole % vaut ici Eval(P, x = 2) et la fonction value excute l'opration.> value(%);20Ceci permet d'exprimer plus clairement le rsultat d'un calcul en l'crivant sous la forme d'une galit (= et non :=).On utilise gnralement pour cela la syntaxe suivante (notez le : terminant la premire commande et qui vite un affichage sans intrt).> Eval(P,x=-2): %=value(%); =( ) +3 x 1 ( ) x 2 =x -220Cette criture est donc quivalente > Eval(P,x=-2)=eval(P,x=-2); =( ) +3 x 1 ( ) x 2 =x -220On peut galement assigner l'opration et le rsultat des noms diffrents. D'autres oprateurs de MAPLE offre cette possibilit et nous aurons l'occasion d'en montrer l'utilit > Q:=Eval(P,x=-2): q:=value(Q): Q=q; =( ) +3 x 1 ( ) x 2 =x -220Evaluations valeurs multiplesLa fonction eval admet plusieurs spcifications condition de les crire entre deux accolades (voir la notion d'ensembles au chapitre 3, Ensembles, Listes ...). On remarquera galement qu'un lment d'une expression peut tre remplac par une autre expression (encore que ... voir le paragraphe suivant). Ici encore, la deuxime opration n'est qu'une valuation de F, mais ne change pas F> F:=(x-y)/(3*x^2+2*y+1); eval(F,{x=1,y=exp(-u)-1}); 19eval(F,{x=1,y=exp(-u)-1}); F; :=F x y + +3 x22 y 1 2 e( ) u +2 2 e( ) u x y + +3 x22 y 1Exercice : calculer la valeur exacte de F pour x=4 et y=2 puis donner une expression dcimale du rsultat avec 6 chiffres significatifsModification d'une expression par la fonction evalLa fonction eval permet galement de changer la valeur d'une constante dans une expression. Notez ici que le coefficient de y a chang et que x2 est devenu x3. Comme l'opration eval ne change en rien F , elle n'a une utilit que si on r-affecte le rsultat soit un autre nom (Q), soit a F lui-mme> F; Q:=eval(F,2=3); x y + +3 x22 y 1 :=Q x y + +3 x33 y 1Les deux exemples suivants montrent comment changer soit le coefficient de x2,soit x2 en x3.Ici on change la nature de F en r-affectant le rsultat F lui-mme> F:=eval(F,3*x^2=2*x^2); F:=eval(F,x^2=x^3); :=F x y + +2 x22 y 1 :=F x y + +2 x32 y 1On peut aussi changer le nom d'une fonction.> Esin:=x+2*y-sin(Pi*x); Ecos:=eval(Esin,{x=y,sin=cos}); :=Esin+ x 2 y ( ) sin x :=Ecos3 y ( ) cos yCes valuations ne sont pas toujours aussi simples qu'elles en ont l'aircomme le montrent les trois exemples qui suivent. Pour les comprendre nous devrons examiner dans un prochain paragraphe la faon dont MAPLE construit ses expressions. Exemple 1 : Il est possible de donner une valeur une "partie" d'une expression. On remarque que seul x2 est effectivement remplac dans P mais que l'criture x2 = 2 n'entrane pas l'valuation de l'expression pour x=0. > P; eval(P,x-2=-2); ( ) +3 x 1 ( ) x 26 x 220Exemple 2 : Ici on veut remplacer +3 x22 ypar le symbole t mais la commande est sans effet> F; eval(F,3*x^2+2*y=t); x y + +3 x22 y 1 x y + +3 x22 y 1Exemple 3 : Le remplacement de la constante 3 par 2 ne s'effectue pas et ne produit pas la simplification attendue> E:=2*x/3; eval(E,3=2); :=E23 x23 xNous reviendrons sur ces particularits aprs avoir tudi les structures de ces expressions et la notion d'oprande.Non valuation d'une expressionDe faon gnrale, un nom ou une expression crit entre deux caractres ' est interprt par MAPLE comme un "objet" ne devant pas tre valu (attention au caractre ' et non `). > a:=x^2+1; 'a'+1; a+1; :=a+x21 +a 1 +x22Ceci n'est cependant pas valable pour les nombres exprims strictement par des chiffres (ou sous forme dcimale) et pour lesquels MAPLE effectue toujours les oprations. > a:='6+3'; a:=6+3+'sqrt(2)^2+1'; :=a 9 :=a+10 22Nous reviendrons avec d'autres exemples sur l'utilit de cette criture.Exercices : Pouvez-vous expliquer cette suite de rsultats ?> a1:=2:a2:='a1';a3:=a2;a1:=3;a2; :=a2 a1 :=a3 2 :=a1 33Ou encore> a:=3:b:=1: ''a^2-b''; 21''a^2-b''; %; %;' ' a2b a2b8Test d'assignationOn peut tester (utile en programmation) si un nom est assign avec la fonction assigned. Le rsultat est un tat logique : true (vrai) ou false (faux)> assigned(a); assigned(Exy);truefalseProtection d'un nomIl peut tre utile de protger un nom pour viter toute assignation ultrieure malencontreuse. Cette opration se fait avec la fonction protect.ATTENTION aux graves interfrences possibles entre la fonction protect et l'utilisation sans prcaution de la fonction setattribute (voir la fin du chapitre).Sachant que MAPLE cherche toujours valuer les arguments d'une fonction avant de les lui transmettre, il est ncessaire de mettre le nom entre deux ' pour viter l'valuation. En effet, si dans l'exemple suivant on avait crit protect(a), MAPLE aurait cherch excuter protect(3), ce qui n'a aucun sens. La fonction protect ne cre aucun affichage.> a:=3; protect('a'); :=a 3Toute tentative d'assignation nom est ensuite interdite et conduit un message d'erreur, y compris la dsassignation (qui n'est qu'une assignation particulire). Il est possible aussi de protger un nom non assign qui restera alors un nom symbolique. > a:=4; a:='a';Error, attempting to assign to `a` which is protected Error, attempting to assign to `a` which is protected L'opration inverse se fait avec la fonction unprotect('nom') :> unprotect('a'); a:=4; :=a 4Certains noms prdfinis de MAPLE, tels Pi, I, O, gamma ou D, ainsi que ceux des fonctions sont protgs (on peut les dprotger, mais c'est une opration vraiment peu recommande...! ) :> Pi:=22/7; sin:=0:Error, attempting to assign to `Pi` which is protected Error, attempting to assign to `sin` which is protected 22ATTENTION : Si les noms des fonctions sont protgs, leurs images ne le sont pas ! La raison en sera donne au chapitre 7, Fonctions ( oprandes et table remember). On vitera donc soigneusement d'crire une btise comme :> sin(0):=1; :=( ) sin 0 1dont les consquences pour les calculs seront dsastreuses mme l o on ne les attend pas> sin(2*Pi)^2 + cos(2*Pi)^2; # ????2et on s'empresse de rparer le problme...> sin(0):=0; sin(2*Pi)^2 + cos(2*Pi)^2; :=( ) sin 0 01Elments sur la structure des expressions : oprandes Considrons l'expression E suivante> restart: # Les assignations cres prcdemment sont dtruites E:=a*x+b*x^2+2*y-sin(a); :=E+ + a x b x22 y ( ) sinaPour MAPLE cet objet (au sens informatique) est constitu avant tout par une somme de termes appels oprandes, positives ou ngatives, que l'on peut lister l'aide de la fonction op> op(E);, , , a xb x22 y ( ) sinaE est bien la somme des lments de cette suite d'objets. Le nombre d'oprandes est donn par la fonction nops> nops(E);4La fonction op permet d'extraire une oprande particulire en donnant son numro d'ordre en premier argument> op(3,E);2 yChaque oprande peut tre un objet pouvant avoir plusieurs oprandes qui peut tre dcompos avec la fonction op. Ceci permet d'atteindre plus profondment la structure d'une expression. Ainsi la deuxime oprande de E est compose de deux oprandes lies par un opration de multiplication> op2:=op(2,E); op(op2); :=op2 b x2, bx2ou encore en imbriquant les fonctions:> op(op(2,op(2,E)));, x 2On notera que la quatrime oprande de E, sin(a), est en fait le produit de 1 par sin(a)> op(op(4,E));23, -1 ( ) sinaSi on demande maintenant quelles sont les oprandes de sin(a) dans E, MAPLE ne renvoie que l'argument de la fonction sinus> op_sin:=op(2,op(4,E)); # op(2) parce que op(1) est associ -1 op(op_sin); :=op_sin ( ) sinaaLa fonction sin est associe une oprande d'ordre 0 qu'il faut explicitement dsigner si on veut la faire apparatre> op(0,op_sin);sinL'expression E peut tre aussi considre comme une fonction de sommation> op(0,E);+Ainsi d'ailleurs que l'oprande 0 des quatres oprandes de E comme la fonction produit> op(1,E),op(2,E),op(3,E),op(4,E); op(0,op(1,E)),op(0,op(2,E)),op(0,op(3,E)),op(0,op(4,E));, , , a xb x22 y ( ) sina, , , ****On voit que les expressions sont construites l'aide d'oprations imbriques dont l'ordre est fix par la priorit des oprations. On peut aussi, si l'on prfre, se faire une reprsentation en arbre avec diffrents niveaux, ceux-ci tant dfinis par la priorit des oprations. Choisissons un autre exemple> E:=a*x+x^3-3*x^(3*a); :=E+ a x x33 x( ) 3 aLa reprsentation en arbre serait la suivante, les oprandes tant symbolises par des crochetsNiveau 4[3]*[a] |Niveau 3 [x]^[3*a] |Niveau 2 [a]*[x] [x]^[3] [-3]*[x^(3*a)]| ||Niveau 1 (E): [a*x]+[x^3]+[-3*x^(3*a)]Au niveau 1, les oprandes de cette expression sont lies par une fonction de sommation dsigne par l'oprande 0 de E.Pour atteindre une oprande dans une expression ayant une grande hirarchie de niveaux la syntaxe utilisant des fonctions op imbriques peut tre notablement simplifie par l'utilisation d'une liste (voir cette notion au chapitre suivant). La liste est faite d'une suite d'entiers spars par des virgules et entoure de crochets. Ces entiers dsignent successivement le numro d'ordre de l'oprande de premier niveau, puis de second niveau, etc.> Exyzt:=x*(t-y-5)+4*x-(1-z)*y^(2*(1-t)); op(3,op(2,op(1,Exyzt))); op([1,2,3],Exyzt); # oprande 3 de l'oprande 2 de l'oprande 1 :=Exyzt+ x ( ) t y 5 4 x ( ) 1 z y( ) 2 2 t-524-5Ici encore, il est assez rare que l'on ait besoin d'effectuer ce type d'oprations. Pourtant il est indispensable de bien connatre ces structures et les mcanismes qui leur sont associs pour matriser MAPLE.Exercice : pourquoi la liste doit-elle tre [3,3,2,2] et non [3,2,2,2] pour faire apparatre ce terme ?> op([3,3,2,2],Exyzt);2 tDivisions et soustractionsPas plus que la soustraction (AB est compris comme A+(1*B)), MAPLE ne connat la division. Ici 3/x est le produit de 3 par 1/x:> E:=3/x; op(E); op(0,E); :=E 31x, 31x*et 1/x est en ralit compris par MAPLE comme x( ) -1> op(op(2,E)); op(0,op(2,E));, x -1^Aprs avoir tudi la notion de types nous reviendrons sur d'autres exemples sous la forme d'exercicesIndtermines d'une expressionLa fonction indets permet de savoir quelles sont les indtermines d'une expression, c'est--dire les noms non assigns et les fonctions dpendant de tels noms (le sens des accolades dans l'criture du rsultat sera donn au chapitre 3)> restart: z:=3; expr:=exp(z)+x-sin(z*x)+u^2+cos(Pi/7); indets(expr); :=z 3 :=expr+ + +e3x ( ) sin 3 x u2cos17{ } , , xu ( ) sin 3 xAvec l'argument supplmentaire name ou symbol, cette fonction ne renvoie que les noms non assigns qui, comme on peut le voir, ne sont pas ncessairement des variables. On constate en particulier que (Pi) est une constante symbolique protge laquelle rien n'est assign> indets(expr,name);{ } , , xu25Retour sur les Evaluations et les Substitutions Lorsque MAPLE effectue une valuation avec la fonction eval, il substitue l'oprande dsigne gauche du signe gal par la valeur ou l'expression situe droite. La substitution s'effectue tous les niveaux de la structure de l'expression. > restart: E:=a*x+x^3-3*x^(3*a); eval(E,a=z+2); :=E+ a x x33 x( ) 3 a + ( ) +z 2 x x33 x( ) +3 z 6On remarquera en examinant l'arbre de l'expression E que 3 et 3 sont des oprandes distinctes, ce qui explique les rsultats suivants> Eval(E, 3=2): %=value(%); Eval(E,-3=2): %=value(%); =( ) + a x x33 x( ) 3 a =3 2 + a x x23 x( ) 2 a =( ) + a x x33 x( ) 3 a =-3 2 + +a x x32 x( ) 3 aExercice : examiner et expliquer les rsultats:> Ep:=a*x+1/x^3-3*x^(3*a); Eval(Ep, 3=2): %=value(%); Eval(Ep,-3=2): %=value(%); :=Ep+ a x1x33 x( ) 3 a = + a x1x33 x( ) 3 a =3 2 + a x1x33 x( ) 2 a = + a x1x33 x( ) 3 a =-3 2 + +a x x22 x( ) 3 aPour que la fonction eval puisse effectuer les oprations il est impratif que l'expression situe gauche du signe = soit une oprande de l'expression, quelle que soit le niveau de la structure. Ainsi 3a est une oprande de niveau 3> E; eval(E,3*a=u-1); eval(E,op([3,2,2],E)=t); + a x x33 x( ) 3 a + a x x33 x( ) u 1 + a x x33 xtPar contre +a x x3 n'est oprande d'aucun niveau (c'est une combinaison de deux oprandes de niveau 1) et l'valuation ne fonctionne pas> eval(E,a*x+x^3=u); + a x x33 x( ) 3 aDe mme on ne peut pas valuer l'expression en posant x^2=t qui remplacerait x3 par xt. On pourra seulement poser x^3=x*t26> eval(E,x^2=t); eval(E,x^3=x*t); + a x x33 x( ) 3 a + a x x t 3 x( ) 3 aIl en est de mme pour une valuation automatique> t:=x^2; E; :=t x2 + a x x33 x( ) 3 aAttention : mme si un nombre rationnel possde deux oprandes, elles ne sont pas substituables. On parle ici de rationnels numriques et non de rationnels symboliques (qui ne peuvent pas encore tre dfinis dans ce chapitre).> q:=3/2; op(q); eval(q,3=5); :=q32, 3 232Aussi, la tentative d'valuation suivante ne simplifie pas l'expression car 2*x/3 est transforme par l'analyseur syntaxique de MAPLE en (2/3)*x, (2/3) tant un nombre rationnel dont les oprandes ne sont pas substituables> q:=2*x/3; op(q); eval(q,3=2); :=q23 x,23x23 xFonction subsMAPLE dispose galement d'une fonction subs, assez similaire eval, mais qui n'effectue que les substitutions d'oprandes sans ncessairement faire les valuations. Les commentaires donnent un moyen de se souvenir de l'ordre des arguments qui est diffrent pour les deux fonctions> Es:=x+x^2+2*y-sin(Pi*a); E1:=subs(a=2,Es);# Substituer a par 2 dans Es E2:=eval(Es,a=2);# Evaluer Es pour a valant 2 :=Es+ + x x22 y ( ) sin a :=E1+ + x x22 y ( ) sin 2 :=E2+ +x x22 yOn notera que E1 contient un terme( ) sin 2 que eval a calcul. La fonction eval avec pour seul argument une expression permet de forcer (si possible) ces valuations rsiduelles> eval(E1);27 + +x x22 yComme eval, la fonction subs permet d'effectuer plusieurs substitutions l'aide de la mme instruction> subs({a=1,x^2=y^3,sin=cos},Es); + + x y32 y ( ) cos Attention : Jusqu'ici la fonction subs n'avait que deux arguments, les termes entre accolades constituant un seul argument. La fonction subs admet une syntaxe avec plus de deux arguments (suppression des accolades ; la fonction eval n'admet pas cette syntaxe). Les substitutions se font alors dans l'ordre d'apparition (de gauche droite) des arguments de subs et chaque substitution prend en compte la prcdente. Dans le premier exemple l'oprande a prend la valeur 2 puis toutes les oprandes 2 de la nouvelle expression prennent la valeur 3. Pour cette syntaxe l'ordre des arguments a donc une grande importance comme le montre le deuxime exemple. Sauf raisons particulires on prfrera la syntaxe avec accolades.> Es; subs(a=2,2=3,Es); subs(2=3,a=2,Es); + + x x22 y ( ) sin a + + x x33 y ( ) sin 3 + + x x33 y ( ) sin 2 Exercices : interprtez les rsultats suivants en se rappelant que MAPLE value toujours les expressions, y compris celles des arguments d'une fonction avant de l'valuer (eval et subs sont des fonctions).> a:='a':Ex:=4*x+a^2; a:=3: eval(Ex,a=4); eval(Ex,4=a); :=Ex+4 x a2 +4 x 9 +3 x 9> a:='a': eval(Ex,a=4); eval(Ex,4=a); +4 x 16 +a x a2Fonctions subsop et algsubsOn peut effectuer une substitution l'aide de la fonction subsop, le premier argument s'crivant n = ... o n dsigne le numro d'ordre d'une oprande de premier niveau> Es; subsop(2=4,Es);# Remplace la 2me oprande par 4 + + x x22 y ( ) sin a + + x 4 2 y ( ) sin aque l'on comparera > subs(2=4,Es); + + x x44 y ( ) sin aLes fonction subs ou eval ne permettent pas d'agir sur un groupe d'oprandes associes par une opration algbrique comme +x x2. Seules les oprations conformes seront excutes28> eval(Es+exp(-x^2-x^3),{x+x^2=t,a=1,y=0}); + +x x2e( ) x2x3On pourra, pour raliser de telles oprations, utiliser la fonction algsubs (algebraic substitution). On remarque que algsubs ne se contente pas d'une simple substitution d'oprandes car l'argument x2x3 de l'exponentielle a t factoris en x ( ) +x x2 avant d'tre substitu. Toutefois algsubs n'admet pas d'effectuer plusieurs substitutions simultannes. On pourra pour cela imbriquer les fonctions pour raliser toutes les oprations souhaites en une seule commande.> eval(algsubs(x+x^2=u,Es+exp(-x^2-x^3)),{a=1,y=0}); +u e( ) u xFonctions whattype et type, profils de typesFonction whattype

Tous les objets de MAPLE possdent au moins une caractristique appele aussi type. En fait, ils en possdent souvent plusieurs, le type de base et les sous-types. Le type de base d'un objet peut tre obtenu avec la fonction whattype. Ici MAPLE rpond + indiquant que Es est du type "somme" (somme des oprandes de niveau 1). Cette fonction renvoie souvent l'quivalent de l'oprande d'ordre 0 de niveau 1.> Es; op(0,Es); whattype(Es); + + x x22 y ( ) sin a++Cependant ce n'est pas systmatique...> op(0,cos(x)); whattype(cos(x)); cosfunction> s:=series(sin(x),x):# voir chapitre 11 op(0,s); whattype(s);xseriesVoici d'autres exemples dont les rponses sont simples comprendre.> op(0,-3); whattype(-3); op(0,3/2); whattype(3/2);IntegerintegerFractionfractionIci le mot float dsigne un nombre fractionnaire exprim en notation dcimale (floating point number).> op(0,3.5e-3); 29> op(0,3.5e-3); whattype(3.5e-3); whattype(exp(-3.5e-3)); FloatfloatfloatLes nombres complexes dont les parties relles et imaginaires sont dfinies avec des valeurs numriques non symboliques ont leur type propre> z:=1+3*I; whattype(z); whattype(I); :=z+1 3 IcomplexcomplexMais ceci n'est pas vrai pour des nombres complexes dfinis l'aide de nombres symboliques. Le type est alors celui de l'opration qui les dfinit> Z:=sqrt(2)+3*I;whattype(Z); T:=Pi/I; whattype(T); G:=GAMMA(2+3*I); whattype(G); :=Z+2 3 I+ :=T I * :=G ( ) +2 3 IfunctionATTENTION : la fonctionwhattype ne donne pas la nature mathmatique d'un nombre mais caractrise la nature informatique de l'objet, dfinie de faon interne par MAPLE (voir le paragraphe suivant sur la fonction type).Les rponses peuvent donc rvler quelques surprises pour qui manque de pratique (nous aurons l'occasion de revenir tout au long du cours). Le lecteur attentif peut dj comprendre les deux derniers exemples.> whattype(cos);# voir chapitre 7 whattype(eval(cos));# idem whattype(cos(x)); whattype(cos(Pi/4));symbolprocedurefunction*Symboles et Chanes de caractres : introduisons, pour les besoins des exemples donns dans les paragraphes suivants, les notions de symbole et de chane de caractres (elles seront tudies plus en dtail au chapitre 18, Elments du langage de Programmation). Des caractres entours par deux ` dfinit un objet de type symbol. Des caractres entours par deux caractres " dfinit un objet de type chane de caractres (character string)Attention, " est un seul caractre et non la rptition de ':30> whattype(`Valeur de x`);symbol> whattype("Chaine de caracteres");stringUn objet de type symbol peut tre utilis comme un nom valide condition toutefois que les caractres soient toujours entours des deux caractres `. Une chane de caractres n'a pas cette proprit et ne peut pas tre utilise comme symbole.> `Valeur de x`:=1; exp(`Valeur de x`+1); :=Valeur de x 1e2Si cette possibilit permet une grande libert d'criture, elle doit tre manipule avec prudence car il est facile de rendre confuse une feuille de calcul comme le montre cet exemple caricatural> `1+1`:=4:'`1+1`-2'=`1+1`-2; =1+1 2 2En fait, tout nom valide cr avec la syntaxe habituelle (commenant par une lettre ou un "_" et ne contenant pas d'espace) est considr par MAPLE comme un symbole mme en l'absence des ` `. Dans l'exemple suivant la rponse signifie que x est un nom qui ne pointe sur rien (sinon sur lui-mme). Ne reprsentant aucun objet ayant un type de base particulier, le type de x est celui d'un symbole. > whattype(x);symbolExercice : interprtez ces rsultats> Z:=x^2+1:whattype('Z'); whattype(Z);symbol+Fonction typeUn complment ce paragraphe concernant les types attribus est donn la fin du chapitre. On peut galement vrifier qu'un objet est bien du type souhaite avec la fonction type (l'intrt des fonctions type et whattype apparat clairement en programmation). Si on demande par exemple avec type si la structure de Es est du type "somme" en dsignant l'oprateur par `+`, MAPLE rpond true c'est--dire "vrai". > Es; type(Es,`+`); + + x x22 y ( ) sin atrueOn remarque que + dans la commande prcdente est entour de deux accents graves. Ici `+` reprsente le symbole qui est le nom de la fonction "sommation". Ecrire simplement + n'aurait aucun sens puisque les oprandes ne sont pas prsentes.Ici l'identificateur x ne pointe sur aucun objet et il possde seulement le type symbol et le type name.> x; type(x,symbol); type(x,name);31xtruetrueOn pourra sauter les remarques suivantes (entre les deux traits) pour une premire lecture.

Remarques : Ces deux types ne sont cependant pas compltement identiques lorsqu'ils s'appliquent un nom index non assign.> X[0]; whattype(X[0]); type(X[0],name); type(X[0],symbol);X0indexedtruefalseOn rencontre ici certaines subtilits syntaxiques de MAPLE sur lesquelles nous ne nous attarderons pas. Si, non assign, X[0] tait un nom index, assign il devient l'lment d'une table (voir le chapitre 5, Tables et Tableaux)> X[0]:=1; whattype(eval(X)); :=X01tableAvec les noms prdfinis de MAPLE comme D, I, gamma, sin, etc., on peut crer des variables indexes mais elles ne pourront pas tre assignes car la transformation en table est interdite, ces noms tant propgs. > I[0]; I[0]:=1; I0Error, illegal use of an object as a name Tous les noms de fonctions (ici une exponentielle intgrale) n'tant pas ncessairement connus de l'utilisateur, le message peut surprendre > Ei[0]; Ei[0]:=1;Ei0Error, attempting to assign to array/table `Ei` which is protected

ATTENTION : La fonction type, comme whattype, analyse la proprit informatique (ou une combinaison de proprits), relativement aux dfinitions internes de MAPLE, des objets spcifis. Elle n'analyse pas la nature mathmatique et c'est la fonction is qui ralise cette opration (fonction sur laquelle nous reviendrons au chapitre 13, Simplifications, Manipulations). Il peut y avoir quelquefois recouvrement entre les rponses. Par exemple, les entiers positifs et ngatifs ont des types internes propres qui concident avec leurs proprits mathmatiques> type(-4,integer), type(4,positive), type(4,posint), # posint = entier positif 32type(4,posint), # posint = entier positif type(4,negint); # negint = entier ngatif, , , truetrue true falseLa fonction is analyse la nature mathmatique et les rponses sont les mmes> is(-4,integer), is(4,positive), is(+4,posint), is(+4,negint);, , , truetrue true falseMais un nombre comme3, bien qu'il soit positif, ne possde pas le type positive et les rponses sont diffrentes.> type(sqrt(3),positive), is(sqrt(3),positive);, false trueDe mme > type(Pi,positive), is(Pi,positive);, false trueLe nombre de types dfinis par MAPLE est de l'ordre de l60. Nous aurons l'occasion d'en rencontrer d'autres dans ce cours. Par exemple le type algebraic est associ un nombre, un symbole ou une expression > type(-3,algebraic), type(x,algebraic), type(exp(-x^2)+sqrt(y),algebraic);, , true true truemais une chane de caractres ne possde pas ce type> type("abc",algebraic);falseOn aura pu remarquer qu'un objet peut avoir plusieurs types. Ainsi -3 possde le type integer, negint, algebraic ou constant. Voici un autre exemple pour3> type(sqrt(3),`^`), type(sqrt(3),constant), type(sqrt(3),algebraic);, , true true trueSignalons aussi la distinction faite par MAPLE entre un nombre du type numeric et un nombre du type constant. Pour MAPLE, le nombre 3 est une constante numrique alors que n'est qu'une constante.> type(-3,constant), type(-3,numeric); type(Pi,constant), type(Pi,numeric);, true true, true falseIl en est de mme pour3> type(sqrt(3),constant), type(sqrt(3),numeric);, true falseContrairement un type comme `+` qui ne relve que de la structure informatique d'une expression, le type constant ne peut tre dtermin que par une analyse complte. Ainsi les deux exemples suivants montrent que MAPLE "sait" que gamma est une constante (constante d'Euler) alors qu'il ne sait rien de kappa qu'il considre comme un simple nom. > sqrt(2)+exp(1-kappa)+cos(Pi/7); type(%,constant); sqrt(2)+exp(1-gamma)+cos(Pi/7); 33sqrt(2)+exp(1-gamma)+cos(Pi/7); type(%,constant); + +2 e( ) 1 cos17false + +2 e( ) 1 cos17trueMAPLE reconnat par dfaut 7 constantes symboliques qui sont contenues dans la suite (sequence, voir chapitre 3) constants> constants;, , , , , , false true CatalanFAIL Les types sont hirarchiss mais ne sont pas exclusifs. Si -2 est un entier, c'est aussi un polynme (certes particulier)> type(-2,integer), type(-2,polynom);, true trueAlors que > type(x^2+1,integer), type(x^2+1,polynom);, false trueProfils de typeEn programmation (chapitre 19) il est souvent utile de savoir si une objet correspond un profil dfini. On compose un profil en reproduisant l'expression souhaite avec les types des oprandes> type(x^n,name^name), type(x^n,name^constant), type(exp(-x+1),function(algebraic));, , true false trueL'expression suivante n'a pas le type polynom en raison de la puissance fractionnaire> type(x^(2/3)+x+2,polynom);falseAvant de poursuivre il faut faire une parenthse. L'opration de sommation peut s'crire comme une fonction qui a pour nom le symbole `+` (et non simplement + qui produirait une criture syntaxiquement incorrecte)> `+`(4,1,-2); `+`(1,x,exp(-x));3 + +x e( ) x1Il est possible de "neutraliser" l'oprateur en le faisant prcder du caractre &. L'oprateur n'agit plus sur les oprandes. On notera que l'oprateur perd aussi sa commutativit et sa distributivit.> `&+`(4,1); `&+`(4,1,-2); 4 &+ (x -1);4 &+ 1( ) &+ , , 4 1 -24 &+ ( ) x 1Reprenons notre exemple. L'expression prcdente ne correspondait pas au type polynom, mais correspond maintenant au profil propos. La neutralisation de l'oprateur est ncessaire car on ne veut pas effectuer l'opration mais seulement proposer un profil> type(x^(2/3)+x+2,`&+`(name^rational,name,constant));34trueLes entiers possdent aussi le type rational et MAPLE accepte pour +x( ) 2yle profil de type suivant> type(-2,rational), type(x^(-2)+y,`&+`(name^rational,name));, true trueIci +x21 n'est pas un nom et MAPLE rpond que l'expression n'a pas le bon profil> type((x^2+1)^(1/3),name^rational);falsemais> type((x^2+1)^(1/3),algebraic^rational);trueOn donne ici un exemple de profil de types pour lequel les expressions doivent tre la somme d'une fonction quelconque un argument et d'une constante. De plus l'argument de la fonction doit tre un nom de variable une puissance qui doit tre soit un entier soit un nom. L'alternative "soit" est dfinie par les accolades {,} (voir le chapitre 3, Ensembles).> prf:=`&+`(anyfunc(name^{integer,name}),constant); Q:=cos(x^n)+1; type(Q,prf); :=prf ( ) anyfuncname{ } , integer name&+ constant :=Q+( ) cosxn1true> Q:=tan(x^(-2))-exp(1-I*Pi); type(Q,prf); :=Q tan1x2e( ) 1 I true> Q:=ln(x^sqrt(2))-1; type(Q,prf); :=Q( ) lnx( ) 21falseExercice : le profil prf ne reconnat pas certaines situations particulires. Pouquoi ? Modifier prf pour que les rponses soit aussi true pour les situations suivantes: > c:=0:type(cos(x^2)+c,prf); k:=1:type(cos(x^k)+2,prf); k:=0:type(cos(x^k)+2,prf);falsefalsefalseExercice : on a dj vu que l'exemple suivant rpondait correctement au profil> type(x^(2/3)+x+2,`&+`(name^rational,name,constant));truemais> type(x^(2/3)-x+2,`&+`(name^rational,name,constant));35false1) On propose une rponse ce problme en modifiant le profil (son affectation un nom n'a rien voir avec la rponse et ne rpond qu' un souci de raccourcir les commandes). Expliquer cette criture.> prf:=`&+`(name^rational, {name,`&*`(constant,name)},constant): type(x^(2/3)+x+2,prf), type(x^(2/3)-x+2,prf);, true true2) Pourquoi n'a-t-on pas besoin de modifier le profil pour rpondre positivement cet exemple> type(x^(2/3)-x-2,prf);true3) Ce profil rpond aussi positivement. Expliquez la diffrence. Faire des tests.> type(x^(2/3)-x-2,`&+`(name^rational,algebraic,constant));trueFin de l'exercice.On pourra galement utiliser les fonctions match, patmatch et typematch (voir le help). Types attribus, fonctions setattribute et attributesIl existe une possibilit d'attribuer un ou plusieurs types choisis par l'utilisateur certains objets de MAPLE avec la fonction setattribute. Cette possibilit peut s'avrer utile par exemple en programmation, lors de la cration de bibliothques de procdures ou de l'laboration de feuilles de calculs compliques.La rponse affiche par la commande setattribute tant simplement le nom de l'objet, elle est ici de peu d'utilit et on s'en dispensera dans les exemples suivants en terminant les commandes par : .Voici quelques exemples o "Variable", "Constante", etc. sont des noms imagins par l'utilisateur. On rappelle que si un nom est assign (c), il ne faudra pas oublier de le rendre non valu pour le transmettre aux commandes qui le ncessitent comme protect ou setattribute. > restart: setattribute(x,Variable): c:=2.99792: protect('c'); setattribute('c',Constante,Physique,protegee):ATTENTION avec la fonction protect. L'exemple ci-dessus ne fait pas ce que l'on croit !!! (voir plus loin)On peut interroger MAPLE avec la fonction attributes pour savoir quels sont les types attribus un nom> attributes(x); attributes('c');Variable, , Constante Physique protegeeLes termes comme "Constante", "Variable" dfinis par l'utilisateur n'ont pas la caractristique d'un type propre de MAPLE, mais celle d'un "type attribu". Un type attribu n'est pas non plus un nom et on peut se servir de la mme orthographe pour un nom assignable, mme si, pour des raisons de clart, ceci est peu recommand.36> type('c',Constante); Error, type `Constante` does not exist Pour vrifier si un nom possde un ou plusieurs types attribus on devra crire> type('c',attributed(Constante)); type('c',attributed(Constante,protegee)); type('c',attributed(Variable));truetruefalseCertaines objets de MAPLE ont aussi des types attribus> attributes(cos); type(cos,protected); type(cos,attributed(protected));, protected_syslibtruetrue_________________________________________________ATTENTIONMme si la fonction type rpond correctement au type protected, il s'agit en ralit d'un type attribu comme le montre l'exemple prcdent. Or, quand on attribue un ou des types un nom, celui-ci perd ceux qu'il avait prcdemment. Si on examine la faon dont on a dfini la constante c, on constatera qu'elle a en fait perdu sa protection par l'application de setattribute aprs protect et l'attribut "protegee" donn par l'utilisateur est illusoire !!!.> type('c',protected); attributes('c'); false, , Constante Physique protegeeLa commande protect('a') fonctionne comme un alias de> setattribute('a',protected,attributes('a')):Il faut donc, soit rajouter protected dans la liste des attributs, soit appliquer la fonction protect aprs setattribute.> setattribute('c',Constante,Physique): protect('c'); > type('c',protected); attributes('c');true, , protectedConstante PhysiqueHlas, ces remarques sont aussi vraies pour les objets prdfinis de MAPLE et on doit faire preuve d'une grande prudence. On donne un exemple, certes caricatural car il ne viendrait l'ide de personne de changer la nature de la fonction cos ! Mais combien d'utilisateurs peuvent prtendre connatre tous les noms des 22291 fonctions de MAPLE version 7 ? On remarquera que le rsultat n'est mme pas 2 ( ) sinx2 car on a mis la pagaille dans les algorithmes de MAPLE !> setattribute(cos,Nouvelles_Mathematiques): # cos n'est plus protge cos:=x->sin(x): # On redfinit la fonction cos (voir chapitre 7) 37cos:=x->sin(x): # On redfinit la fonction cos (voir chapitre 7) et ... 'cos(x)^2+sin(x)^2'=simplify(cos(x)^2+sin(x)^2); # c'est la catastrophe ! =+( ) cosx2( ) sinx222+1 = 3, tes-vous sr ? ;-)> setattribute(`+`): `+`:=(x,y)->x*y: '`+`(1,2)'=`+`(2,1); =( ) + , 1 2 2Il n'y a gure qu'une rinitialisation radicale qui permette de remettre de l'ordre...> restart: 'cos(x)^2+sin(x)^2'=simplify(cos(x)^2+sin(x)^2); # Ouf ! '`+`(2,1)'=`+`(2,1); =+( ) cosx2( ) sinx21 =( ) + , 2 1 3Vrifiez le statut d'un nom avant de lui appliquer la fonction setattribute !Il ne devrait pas tre difficile aux concepteurs de MAPLE de modifier ce comportement pour le rendre plus scuris..._________________________________________________On notera galement que la dsassignation conserve les types attribus> setattribute(a,Constante): a:=3; attributes('a'); a:='a'; attributes(a); :=a 3Constante :=a aConstanteExercice : Pourquoi cette rponse ?> setattribute(c,Constante): c:=2.99792: type(c,attributed(Constante)); Attributs_c:=attributes(c); false :=Attributs_cExercices de rappel : expliquez les rsultats suivants.> restart:Es:=x+x^2+2*y-sin(Pi*a);eval(Es,op(nops(Es),Es)=1); :=Es+ + x x22 y ( ) sin a + + +x x22 y 1> ex:=x/2+1/sin(x):type(op(1,ex),`*`);whattype(op(2,ex));true^> ex2:=x/2+2/sin(x):type(op(2,ex2),`*`);whattype(op(2,ex2));true*Que se passe-t-il ?> ex:=5*x-2;Eval(ex,2=3):%=value(%); :=ex5 x 2 =( ) 5 x 2 =2 3 5 x 2383 - Ensembles, Listes, Intervalles, Suites Ce chapitre et les deux suivants, sont principalement destins introduire les structures de donnes de MAPLE, c'est--dire des objets de nature informatique contenant des collections de nombres ou d'autres objets manipulables par MAPLE. La plupart du temps, ils auront une forme qui rappelle celles d'objets mathmatiques tels que des ensembles, des suites, des matrices, etc. Mais ils pourront aussi se prsenter sous une forme sans quivalent traditionnel, comme par exemple des listes, des tables ou des tableaux.Ensembles (set) Un ensemble est une structure de donnes de MAPLE dfinie par une suite (en anglais sequence) d'lments spars par des virgules et encadre par les accolades {} (nous reviendrons sur la notion un peu particulire de sequence). Conformment la dfinition des ensembles, l'ordre d'entre des lments peut tre chang par MAPLE puisqu'il est sans importance et les lments rpts sont considrs comme un lment unique. > restart; f:={z,y,x}; e:={z,x,y,x,z}; :=f { } , , z yx :=e { } , , z yxLes ensembles possdent le type set : > whattype(e); type(e,set);settrueRemarque : en raison des changements imprvisibles de l'ordre des lments, on devra adapter certains exemples si l'on veut les reproduire.L'expression suivante compare deux ensembles en effectuant une valuation boolenne (logique) de l'galit avec la fonction evalb (true = vraie, false = faux). Cette galit suppose est crite avec le signe = seul, ce n'est donc pas une affectation mais une quation. Les lments d'un ensemble peuvent tre quelconques : valeurs numriques, symboles, fonctions, ensembles, etc. On remarque ici encore que toute expression est, dans la mesure du possible, pralablement value (ici factorielle 3 et sin(/4)) : > g:={sqrt(2)/2,{x,a},6,{x,a}}; evalb({{x,a},sin(Pi/4),3!} = g); :=g { } , , 6 { } , ax122trueMAPLE peut effectuer des oprations usuelles sur les ensembles, comme une intersection ou une union. Par exemple on vrifie que l'intersection des ensembles f et g est l'ensemble vide> f intersect g; evalb(% = {});{ }true39ou encore > Phi:=(f union e) intersect g; := { }La "soustraction" de deux ensembles A et B se fait l'aide de l'oprateur minus. L'opration A minus B se dfinit comme " liminer de A tous les lments communs A et B". Contrairement aux deux autres, cet oprateur n'est videmment pas commutatif > g minus {{x,a},7,sqrt(3),6}; {{x,a},7,sqrt(3),6} minus g;{ }122{ } , 7 3Cette opration permet d'enlever de faon simple un ou plusieurs lments un ensemble> g minus {{x,a},sqrt(2)/2}; % minus {6};{ } 6{ }Les oprateurs union, intersect et minus que nous venons de voir sont binaires en ce sens qu'ils ne peuvent, en raison de la syntaxe utilise, agir que sur deux ensembles. Pour que union et intersect puissent oprer sur plus de deux ensembles, on les transforme en noms de fonctions en entourant le nom de l'oprateur avec des accents graves> `union`(f,g,e);{ } , , , , , 6z yx { } , ax122Pour ce qui concerne minus, la fonction ne peut avoir bien sr, que deux arguments dont l'ordre est impratif> `minus`(f,g); `minus`(g,f);{ } , , z yx{ } , , 6 { } , ax122La fonction op permet d'extraire les lments (oprandes) d'un ensemble sous la forme d'une suite d'lments (lments spars par des virgules) > op(e);, , z yxL'expression op(n,e) permet d'extraire la n-ime oprande de l'ensemble e. ATTENTION : L'ordre des lments d'un ensemble est imprvisible et peut changer pendant les calculs.Cette instruction doit donc tre utilise avec prudence (voir plus loin la fonction member). > op(2,e);yElle peut tre remplace par une notation plus concise (avec les mmes prcautions)> e[2];yLa fonction nops donne le nombre d'oprandes d'un ensemble qui correspond donc son cardinal. > Card_e:=nops(e);40 :=Card_e 3Pour savoir si un lment donn appartient un ensemble on utilisera la fonction member. Cette fonction possde deux arguments obligatoires, l'lment cherch puis l'ensemble> g; member(x,g); member({x,a},g); { } , , 6 { } , ax122falsetrueElle accepte un troisime argument facultatif qui permet d'obtenir la position de l'lment> member({x,a},g,i); i; g[i];true2{ } , axMaintenant 2 est assign iet on conoit qu'il ne soit pas possible d'excuter la commande member(6,g,i) car MAPLE reoit, en raison de l'valuation pralable des arguments, la commande member(6,g,2) ce qui n'a aucun sens.> member(6,g,i);Error, wrong number (or type) of parameters in function member Pour excuter nouveau cette fonction, il faut transmettre le nom i non valu (ou utiliser un autre nom non assign)> member(6,g,'i'); i; g[i];true16La fonction select permet d'extraire d'un ensemble, l'ensemble des lments ayant une proprit donne. Le premier argument est un oprateur dont la rponse est un tat logique (true ou false), le deuxime dsigne l'ensemble, le troisime tant le deuxime argument de l'oprateur si ncessaire. Par exemple, si on souhaite savoir si x est du type numeric on crit > type(x,numeric); Par consquent, pour slectionner dans un ensemble S les lments de type numeric on crira > select(type,S,numeric); Rappel : si 3 est une constante, c'est une criture symbolique qui n'est pas du type numeric mme si elle exprime une valeur numrique (voir chapitre 2, Fonctions whattype et type). > G:= {x,2,-2*sqrt(3),0,ln(2),c,1}; select(type,G,numeric); select(type,G,constant); :=G { } , , , , , , 0 1 2xc ( ) ln 2 2 3{ } , , 0 1 241{ } , , , , 0 1 2 ( ) ln 2 2 3Certaines fonctions comme isprime ou issqr, dont la rponse est un tat logique true ou false, ne ncessitent qu'un argument. La fonction select ne reoit alors que deux arguments. Ici la fonction issqr dtermine si l'argument est le carr d'un entier:> select(issqr,{-2,4,6,7,9});{ } , 4 9Avec la fonction remove on enlve de l'ensemble des lments d'un type donn> G; _______; remove(type,G,symbol); remove(type,G,numeric);remove(type,G,even); # "even"=pair, "odd"=impair remove(type,G,odd);{ } , , , , , , 0 1 2c ( ) ln 2 2 3 x_______{ } , , , , 0 1 2 ( ) ln 2 2 3{ } , , , c ( ) ln 2 2 3 x{ } , , , , 1c ( ) ln 2 2 3 x{ } , , , , , 0 2c ( ) ln 2 2 3 xEncore deux derniers exemples utilisant la fonction has qui dtermine si un lment possde une caractristique donne> E:={sqrt(3*x),2,x+y,xy2,x*y3}; remove(has,E,y);# cre l'ensemble des lments ne contenant pas le nom y select(has,E,{2,x});# cre l'ensemble des lments contenant la constante 2 ou le nom x :=E { } , , , , 2xy2 3 x+x yx y3{ } , , , 2xy2 3 x x y3{ } , , , 2 3 x+x yx y3 Evaluations, Substitutions d'lments dans un ensemble Comme pour les expressions, elles se font avec les fonctions eval ou subs puisqu'un ensemble est constitu d'oprandes : > G; eval(G,x=3); subs(x=3,G);{ } , , , , , , 0 1 2xc ( ) ln 2 2 3{ } , , , , , , 0 1 2 3c ( ) ln 2 2 3{ } , , , , , , 0 1 2 3c ( ) ln 2 2 3Changement d'un lment dans un ensemble : La notation g[n] := est rserve aux listes (voir plus loin), aux tables, tableaux, matrices et vecteurs (voir le chapitre 4, Matrices, Vecteurs, Algbre Linaire) et ne peut pas tre utilise pour changer un lment dans un ensemble. On veut changer le 3me lment de g et le remplacer par z en crivant > G[3]:=z;Error, cannot assign to a set 42Error, cannot assign to a set Il faudra substituer z la troisime oprande de G et rassigner le rsultat G> G; G:=subsop(3=z,G);{ } , , , , , , 0 1 2xc ( ) ln 2 2 3 :=G { } , , , , , , 0 1xz c ( ) ln 2 2 3De mme pour supprimer un lment, il suffit de le remplacer par le mot cl NULL de MAPLE. Ce mot cl est un concept informatique plutt que mathmatique. Il ne signifie pas qu'un objet est nul (gal 0), mais qu'il n'existe pas:> G:=subsop(3=NULL,G); :=G { } , , , , , 0 1z c ( ) ln 2 2 3Pour illustrer ce concept, assignons NULL x> x:=NULL; :=xOn cherche afficher x et MAPLE ne rpond rien puisque x est un symbole qui est assign mais rien:> x;> x+1; assigned(x); +( ) 1trueNoter que NULL possde quand mme un type qui sera dfini au paragraphe Suites de ce chapitre.> whattype(NULL);exprseqMais pour supprimer un ou plusieurs lments on peut aussi crire simplement> G:=G minus {ln(2),0}; :=G { } , , , 1z c 2 3Listes (list)Une liste est une structure de donnes de MAPLE reprsente par une suite d'lments encadre par des crochets : [...]. Contrairement aux ensembles, l'ordre des lments est important et les rptitions sont prserves. Ces objets jouent, comme les ensembles, un rle essentiel dans MAPLE.> restart: L1:=[x,y,z,a,x,y,x]; L2:=[y,x,z,a,x,y,x]; :=L1 [ ] , , , , , , xyz axyx :=L2 [ ] , , , , , , yxz axyxLes listes ont le type list : > whattype(L1),type(L2,list);, list trueOn retrouve dans les deux listes prcdentes un mme nombre d'lments identiques. Mais l'ordre des lments tant diffrent, elles seront considres comme diffrentes 43> evalb(L1=L2);falseOn retrouve beaucoup d'oprations communes aux listes et aux ensembles avec quelques diffrences.> n:=nops(L1); L2:=eval(L1,z=cos(x)); L2[3]; :=n 7 :=L2 [ ] , , , , , , xy ( ) cosx axyx( ) cosxEvidemment certaines oprations n'ont pas de sens avec les listes> L1 union L2;Error, wrong number (or type) of parameters in function union Pour extraire d'une liste une sous liste de l'lment de rang i l'lment de rang k on utilisera la syntaxe i..k(voir le paragraphe Intervalles dans ce chapitre pour plus de dtails)> L2[2..4];[ ] , , y ( ) cosx aCe qui est trs diffrent de (voir paragraphe Suites dans ce chapitre) > op(L2)[2..4];, , y ( ) cosx aPour dsigner un lment d'une liste on peut donner un indice ngatif, la valeur 1 correspondant au dernier lment, 2 l'avant dernier, etc. (voir galement le paragraphe Intervalles dans ce chapitre)> Ln:=[x,x^2,x^3,x^4,x^5]; Ln[-2]; Ln[-nops(Ln)+1];# Un peu compliqu pour crire Ln[2] ! :=Ln [ ] , , , , xx2x3x4x5x4x2Comme pour les ensembles, pour supprimer des lments d'une liste on les remplacera les oprandes concernes par l'objet prdfini NULL (respecter les majuscules)> Ln; Lx:=subsop(3=NULL,Ln);[ ] , , , , xx2x3x4x5 :=Lx [ ] , , , xx2x4x5> L2; Lx:=eval(L2,{cos(x)=NULL,y=NULL});[ ] , , , , , , xy ( ) cosx axyx :=Lx [ ] , , , xaxxAvec la commande prcdente tous les lments y ont t limins de la liste. On veut maintenant changer cos(x) par b et liminer seulement le deuxime y (avant dernier lment de la liste). On utilisera la fonction subsop, le membre de gauche de chaque galit dterminant le numro d'ordre de l'lment modifier dans la liste> Lx:=subsop(3=b,nops(L2)-1=NULL,L2); :=Lx [ ] , , , , , xybaxx44Avec les commandes prcdentes on a cr une nouvelle liste Lx partir de L2 sans modifier cette dernire. Si l'on souhaite simplement modifier un terme de L2 on peut utiliser (contrairement aux ensembles) des assignations> L2[3]:=sin(x): L2[2]:=6: L2;[ ] , , , , , , x 6 ( ) sinx axyxOn ne peut pas assigner directement NULL un lment pour le supprimer. Comme indiqu plus haut on utilisera subsop et une rassignation de la liste modifie au mme nom> L2[3]:=NULL;Error, expression sequences cannot be assigned to lists > L2:=subsop(3=NULL,L2); :=L2 [ ] , , , , , x 6axyxLes lments d'une liste pouvant tre rpts, la fonction member ne donnera que la premire occurrence de l'lment demand.> Lx; member(x,Lx,'i'); i,Lx[i];[ ] , , , , , xybaxxtrue, 1xPour ajouter un lment la fin (ou au dbut ) d'une liste, il suffit de reconstruire la liste avec ses oprandes et ce que l'on souhaite rajouter au bon endroit> Lx:=[op(Lx),0]; :=Lx [ ] , , , , , , xybaxx 0Pour insrer un lment on procde de mme en coupant la liste en deux parties (on veut insrer ici x 1 entre y et b, c'est dire entre la 2-ime et la 3-ime oprande). L'utilisation de nops(Lx) vite d'avoir compter le nombre d'oprandes.> Lx:=[op(Lx[1..2]),x-1,op(Lx[3..nops(Lx)])]; :=Lx [ ] , , , , , , , xyx 1baxx 0Pour supprimer un lment, on peut aussi crire (quelle condition faut-il respecter sur n pour qu'il n'y ait pas d'erreur ?)> n:=5; [op(Lx[1..n-1]),op(Lx[n+1..nops(Lx)])]; :=n 5[ ] , , , , , , xyx 1bxx 0 On ne manquera pas d'explorer galement la bibliothque ListTools qui contient 19 fonctions de manipulations des listes. Par exemple> ListTools[Reverse](Lx); ListTools[FlattenOnce]([1,[1,2],[a,b,c]]);[ ] , , , , , , , 0xxabx 1yx[ ] , , , , , 1 1 2abcTransformation d'une liste en ensemble : la fonction convert permet (parmi d'autres utilisations sur lesquelles nous reviendrons) de transformer une liste en un ensemble et rciproquement. Le deuxime argument set indique ici que la liste doit tre convertie en un ensemble. > e:=convert(Lx,set);45 :=e { } , , , , , 0xyax 1bMaintenant on peut convertir cet ensemble en une liste > L:=convert(e,list); :=L [ ] , , , , , 0xyax 1bBien que contenant les mmes oprandes et dans le mme ordre, L et e sont des objets diffrents de MAPLE car ils correspondent des structures de donnes diffrentes. > evalb(e=L);falsePour dsigner un lment d'une liste on peut donner un indice ngatif, la valeur 1 correspondant au dernier lment, 2 l'avant dernier, etc. (voir galement le paragraphe Intervalles dans ce chapitre)> L[-1]; L[-2]; L[-nops(L)]; # identique L[1]b x 10Exercice : expliquez les syntaxes suivantes> S:=[1,[x,y,z],{a,b,c,d*x}]; S[2][-3]; op([2,1],S); :=S [ ] , , 1 [ ] , , xyz { } , , , abcd xxxOn peut galement ajouter et soustraire des listes, les oprations s'effectuant par lments correspondants et condition que les listes aient le mme nombres de termes (pour multiplier, diviser ou effectuer d'autres oprations, voir les fonctions map et zip au chapitre 7).> L; [1,2,-3,4,-1,-2] + L - [1,0,-4,1,3,-3];[ ] , , , , , 0xyax 1b[ ] , , , , , 0+x 2+y 1+a 3x 5+b 1Avec la fonction add on peut trs simplement ajouter les lments, ou une fonction des lments, d'une liste ou d'un ensemble. La variable i prend ici les valeurs successives de la liste L ou de l'ensemble. Cette variable est muette, c'est--dire qu'elle ne prend aucune valeur particulire aprs l'opration ou garde la valeur qu'elle avait avant celle-ci. > i;# i vaut 1 en raison d'une commande excute prcdemment add(i,i=L);# i prend succesivement les valeurs L[1],L[2],...,L[nops(L)] i;# i conserve la valeur 1. 1 + + +2 x y a 1 b1Voici un autre exemple ou s reste non assign aprs l'excution de add> S:=[sin(x),cos(x),2*sin(z)*cos(z),cos(2*z)]; add(s^2,s=S); simplify(combine(%,trig));# Voir Chapitre Simplfications... 46simplify(combine(%,trig));# Voir Chapitre Simplfications... s; :=S [ ] , , , ( ) sinx ( ) cosx 2 ( ) sinz ( ) cosz ( ) cos 2 z + + +( ) sinx2( ) cosx24 ( ) sinz2( ) cosz2( ) cos 2 z22sIci la fonction mul effectue le produit des inverses des carrs des lments de la liste> L:=[x,y,z-1]; mul(i^(-2),i=L); :=L [ ] , , xyz 11x2y2( ) z 12 On peut dfinir galement des listes de listes. Ce sont des objets que l'on rencontrera frquemment. > LL:=[[r,s],[t,u,v],[w,x,z]]; :=LL [ ] , , [ ] , r s [ ] , , t uv [ ] , , wxzLes oprandes d'une liste tant des objets MAPLE quelconques, elles peuvent tre videmment des listes ou mme des listes de listes... Ces objets sont notamment utiles pour trier, grouper, associer ou classer des objets. > whattype(LL); nops(LL); type(LL,list);list3trueCependant, si et seulement si, les lments d'une liste sont des listes de mme nombre d'oprandes (quelque soient leurs types), elle possde aussi le type listlist > type(LL,listlist);#Les listes n'ont pas le mme nombre d'oprandes false> type([[r,s,u],[t,u,v],[w,x,z]],listlist); type([[r,s,2],[[1,2],u,{a,b,c}],[sin(x),cos,z]],listlist);truetrueIntervalles MAPLE permet de dfinir des intervalles sous la forme de deux termes spars par au moins deux points. > restart: a..b; -2/3.......exp(z)-1; 0..infinity; -1.5..3.6; 47 ..a b .. -23 ez1 ..0 ..-1.5 3.6Tout objet valide de MAPLE peut avoir un nom. Aussi, on peut donner un nom un intervalle (ne pas utiliser les noms int, Int ou I qui sont des noms protgs de MAPLE qui renvoie sinon un message d'erreur).> Interv:= binomial(2,1)..3!;

:=Interv..2 6L'interprtation d'un intervalle dpend, comme nous le verrons, du contexte de son utilisation. Par exemple l'intervalle 0..infinity reprsente-t-il l'ensemble des entiers ou des rels positifs ou nuls ? La rponse dpendra du calcul que l'on effectue, par exemple une intgration ou une sommation discrte.Les objets ainsi dfinis ont le type range > whattype(Interv); type(Interv,range); type(Interv,`..`);..truetrueUn intervalle a deux oprandes qui sont simplement ses bornes (on remplace ici non pas la valeur 2 mais la deuxime oprande, c'est--dire 6 ; voir la fonction subsops au chapitre 2) > op(Interv); subsop(2=infinity,Interv);, 2 6 ..2 Un intervalle permet par exemple d'extraire une sous-suite (sequence) des lments d'une liste ou une sous-liste. Evidemment, l'intervalle s'entend ici sur des nombres entiers> L:=[-3,6,2,-1,0,4,7,8,2]; op(3..5,L); L[3..5]; :=L [ ] , , , , , , , , -3 6 2 -1 0 4 7 8 2, , 2 -1 0[ ] , , 2 -1 0Les bornes doivent tre prcises de faon a indiquer une suite d'lments de rang croissant.> L[5..3];Error, invalid subscript selector On peut aussi utiliser des bornes ngatives, 1 indiquant le dernier lment de la liste, 2, l'avant dernier, etc.> L[-1], L[-5..-3]; L[2..-5];, 2 [ ] , , 0 4 7[ ] , , , 6 2 -1 048On cre maintenant une sous-liste de L avec les termes allant du rang 2 l'avant dernier dont on trie les lments par ordre croissant puis dcroissant avec la fonction sort (voir l'aide en ligne de sort; voir galement les chapitres 7, Fonctions et 13, Simplifications, Manipulations)> sort(L[2..-2]); sort(L[2..nops(L)-1],(x,y)->is(x>y));[ ] , , , , , , -1 0 2 4 6 7 8[ ] , , , , , , 8 7 6 4 2 0 -1Suites (sequences) Une suite ou sequence est une suite d'lments de MAPLE spars par des virgules. Nous les avons dj rencontres pour la construction des structures dcrites prcdemment ou sous la forme de rsultats de la fonction op. Les squences, comme le montre whattype, ont une structure connue par MAPLE. On peut les assigner des noms mais le type ne peut pas tre test par la fonction type. Leur utilisation est frquente pour la construction automatique d'objets comme les listes, les ensembles, les tableaux, ... L'expression suivante dfinit une squence s > restart: s:=a,b,1,1,2,3,a,b,exp(x); whattype(s); type(s,exprseq); # n'est pas autoris (voir la raison plus loin) :=s , , , , , , , , ab 1 1 2 3ab exexprseqError, wrong number (or type) of parameters in function type Pour transformer une suite en un ensemble ou en une liste il suffit de l'entourer par les symboles appropris > e:={s}; # Dfinit un ensemble :=e { } , , , , , 1 2 3 exba> l:=[s]; # Dfinit une liste :=l [ ] , , , , , , , , ab 1 1 2 3ab exAttention : La fonction convert ne permet pas de faire les oprations prcdentes :> convert(s,set); convert(s,list);Error, unrecognized conversion Error, unrecognized conversion Pour comprendre la structure de donnes sequence, examinons le rsultat de la commande suivante qui voudrait remplacer le nombre 1 de la suite s par : > subs(1=Pi,s);Error, wrong number (or type) of parameters in function subs En effet, MAPLE valuant s avant d'excuter la fonction subs, ce que nous avons crit est quivalent l'instruction subs(1=Pi,a,b,1,1,2,3,a,b,exp(x)); La fonction subs a donc reu un nombre d'arguments incorrect et MAPLE refuse de l'excuter. C'est la mme raison pour laquelle les fonctions type ou convert n'ont pas pu fonctionner. On peut, comme pour les listes et les ensembles, extraire un lment d'une squence avec la notation 49> s[2]; s[-1];bexExercice : Pourquoi les rsultats des deux expressions suivantes sont-ils diffrents ? > op(s); op([s]);Error, wrong number (or type) of parameters in function op , , , , , , , , ab 1 1 2 3ab exExercice : Raliser la substitution de 3 par Pi dans s > ;Exercice : Crer une liste L:=[a,b,c,d,e,f] et une suite s:=1,2,3. Insrer s dans L pour crer la liste [a,b,1,2,3,c,d,e,f] > ;La fonction seqLa fonction seq permet la cration automatique de suites avec une boucle indexe par un entier. L'expression suivante dfinit une squence pour un entier i variant de 0 10 par pas de 1. Remarquons que la variable i est muette (la fonction seq ne modifie pas i).> i:=3; s:=seq(i^2-i,i=0..10); i; :=i 3 :=s , , , , , , , , , , 0 0 2 6 12 20 30 42 56 72 903La fonction seq permet donc de crer simplement des listes ou des ensembles. Notez la disparition d'un 0 quand on cre l'ensemble e : > L:=[seq(i^2-i,i=0..10)]; e:={seq(i^2-i,i=0..10)}; :=L [ ] , , , , , , , , , , 0 0 2 6 12 20 30 42 56 72 90 :=e { } , , , , , , , , , 0 2 6 12 20 30 42 56 72 90Il existe une deuxime forme trs utile de la fonction seq qui permet d'utiliser les oprandes d'une liste ou d'un ensemble au lieu d'un intervalle. Par exemple la variable i prend ici les valeurs successives des oprandes de la liste L et cre une liste dont les lments seront triples de ceux de L> [seq(3*i,i=L)]; [ ] , , , , , , , , , , 0 0 6 18 36 60 90 126 168 216 270En ralit cette criture est valable pour tout objet sur lequel on peut appliquer la fonction op, i prenant successivement les valeurs des oprandes (l'utilisation qui suit est plutt marginale)> ex:=x^2/2+ln(x)-3; op(ex); seq(i^2,i=ex); :=ex+ 12 x2( ) lnx 350, ,12 x2( ) lnx -3, ,14 x4( ) lnx29La gnration automatique de squence peut aussi tre obtenue l'aide de l'oprateur $ dont on donne ici un exemple d'utilisation. Contrairement la fonction seq, la variable de boucle doit tre non assigne> i; i^2-i$i=0..10; 3Error, wrong number (or type) of parameters in function $ On est donc oblig d'utiliser une criture un peu lourde> 'i^2-i'$'i'=0..10;, , , , , , , , , , 0 0 2 6 12 20 30 42 56 72 90mais on peut utiliser un nom non assign> k^2-k$k=0..10; k;, , , , , , , , , , 0 0 2 6 12 20 30 42 56 72 90kUne autre possibilit, si ncessaire, est d'crire> i:='i': i^2-i$i=0..10; i;, , , , , , , , , , 0 0 2 6 12 20 30 42 56 72