• Aucun résultat trouvé

2.Expressions-Arbres-Évaluationmaximale 1.Objectifs I.QuelquestypesdedonnéesMaple

N/A
N/A
Protected

Academic year: 2022

Partager "2.Expressions-Arbres-Évaluationmaximale 1.Objectifs I.QuelquestypesdedonnéesMaple"

Copied!
6
0
0

Texte intégral

(1)

I. Quelques types de données Maple

1. Objectifs

L’objectif de ce document est d’introduire un certain nombre detypesMaple qui sont proches de notions mathématiques et utiles en calcul formel. On introduira aussi des fonctions permettant de manipuler des objets (données, data) de ces types. Ces notions seront mises en œuvre à travers des résolutions d’équations et des calculs avec dessuites de Farey.

On rassemble dans deux tableaux ces listes et ces fonctions.

types : séquence liste ensemble somme produit

exprseq list set ’+’ ’*’

fonctions :

renvoie le type whattype

renvoie la séquence d’opérandes op renvoie le nombre d’opérandes nops

convertit convert

substitue subs

développe expand

range suivant un ordre sort

rassemble collect

résoud solve

dérive diff

résoud une équa diff dsolve On s’attachera aussi à quelquesopérateurs etconstructeurs.

opérateurs , = +

type résultat séquence égalité somme

constructeurs [ ] { } seq() add()

type résultat liste ensemble séquence somme

Il faut aussi avoir bien compris le principe de l’évaluation maximale même si ce principe admet quelques exceptions.

Pour obtenir l’aide complète, insérer un de ces mots dans une feuille Maple, placer le curseur à l’intérieur et taper F1 ou F2 suivant les versions de Maple.

Les tableaux sont introduits dans un autre paragraphe. Ce sont des types d’objets très importants dans tous les types de langage. Ils ne sont pas spécifiquement formels.

+

* a

b +

z

1

c

* exp

Fig.1 – Arbre a*b+c*(exp(z)+1)

2. Expressions - Arbres - Évaluation maximale

1. Arbres

Les expressions mathématiques formelles sont gérées par Maple comme des arbres (voir figure 1). Les nœuds sont des mots (au sens habituel c’est à dire un assemblage de lettres). Il existe deux types de mots : ceux que Maple connait (on dira de tels mots qu’ils sont réservés) et les autres.

Les mots réservés sont des éléments de la syntaxe commewhile ou le nom d’ob- jets prédéfinis par Maple et désignant des objets mathématiques (Pi,exp) ou des commandes. Il est évidemment interdit d’assigner un objet à un mot réservé, cela influerait sur le fonctionnement même de Maple. Par exemple

> Pi := 5;

Error, attempting to assign to ‘Pi‘ which is protected

Les autres mots (par exempletruc) sont considérés systématiquement comme des noms (ie des variables). Si une commande d’assignation a été exécutée, on dira

(2)

que la variable est assignée, sinon on dira qu’elle est non assignée (ou libre). Par exemple,truc est assignée si une commande du type

truc := machin;

a été exécutée. On dira quetrucest assignée même simachinne l’est pas.

2. Évaluation maximale

En général les noms de variables sontévalués par Maple. Par exemple, sitruc est un nom assigné qui désigne un certain arbre, lorsque Maple traite ce mot, il va chercher à remplacer systématiquement (ou presque) les noms assignés par ce qu’ils désignent.

>restart;

a:=2;

truc:=a+b;

truc;

a:=3; truc;

>restart;

truc:=a+b; truc;

a:=2;truc;

a:=3;truc;

De plus, Maple remplacera un certain nombre d’expression "évidentes" du genre 1+2(mais pas1=2). Ce processus est appellé leprincipe d’évaluation maximale. Il est à noter que certains objets dérogent à cette règle, en particulier les tableaux et les fonctions. Ce point n’est pas abordé ici.

Pour contourner ce comportement déroutant, il est conseillé d’utiliser des substi- tutions.

3. Type

Le mot "racine" détermine le type de l’arbre. La fonction1whattypepermet de le connaitre.

> whattype(1=2); whattype([truc,machin]);

> whattype({truc,machin});whattype(truc,machin);

> op(truc+machin);

> nops(a*b);

> convert(a*b,’+’);

1On peut remarquer que toutes les fonctions citées icirenvoient un résultat sans modifier leur argument. Le paramètre est passé par valeur.

La fonctionoppermet « d’enlever »la racine et d’accéder à la séquence des noeuds du premier niveau (lesopérandes). La fonctionnopsrenvoie le nombre d’opérandes.

On peut accéder aux éléments d’une liste (mais pas d’une séquence) en utilisant des crochets.

> truc:=[a,b,c,d]; truc[1]; truc[3]; truc[15];

On comprendra mieux les types introduits ici, les fonctions associées et les substi- tutions avec des exemples plus significatifs.

3. Substitution - Résolution d’équations

1. Résolution d’équations

Dans le code suivant,eq1eteq2sont assignés à des égalités,{eq1,eq2},{x,y}

sont évalués à des ensembles (respectivement d’équations et d’inconnues)

> eq1 := a*x+b*y = u;

eq2 := c*x+d*y = v;

solve({eq1,eq2},{x,y})

La fonctionsolverenvoie un ensemble d’égalités2. Pour une seule équation et une seule inconnue on peut se passer des ensembles solve(a*x+b=0,x);. La fonction ne renvoie pas alors un ensemble. Je conseille toutefois de toujours mettre les accolades car le renvoi d’un ensemble d’égalités est plus commode pour combiner ensuite avec des substitutions.

2. Substitution

Dans une expression, on peut substituer quelque chose à des noms libres.

> restart;

truc := a+b;

subs({a=machin,b=2},truc); a, b, machin, truc;

Un bon exemple d’utilisation est fourni par le calcul d’un projeté orthogonal sur une droite.

>restart;

eqD := a*x+b*y=c; # équation de la droite M:= [u,v] ; # coordonnées du point

2je n’aime pas que les noms des inconnues soient réutilisés mais bon ...

(3)

P := [u+a*lambda, v+b*\lambda]; # pt de droite orth par M eq := subs({x=P[1],y=P[2]},eqD);# eq en lambda pour intersect truc := solve({eq},{lambda});# un ensemble contenant une égalité subs(truc,P); #les coordonnées du projeté

3. Résolution d’une équation différentielle

Dans le code suivant remarquer l’utilisation dediff pour dériver l’expression y(x). La présence de parenthèses indique à Maple de considérerycomme une fonc- tion. Commeyest la seule fonction dans l’expression, il n’est pas utile d’indiquer la fonction inconnue.

> eq:=diff(y(x),x,x)+(omega^2)*y(x)=0;

dsolve(eq);

Prévoir ce que renverront les instructions suivantes.

> restart;eq:=diff(y(x),x)+a(x)*y(x)=0;

dsolve(eq);

> restart;eq:=diff(y(x),x)+diff(a(x),x)*y(x)=0;

dsolve(eq);

> restart;eq:=diff(y(x),x)+diff(a(x),x)*y(x)=0;

dsolve(eq,y(x));

4. Suites de Farey

Pour un entier natureln(au moins 2), la suite de Farey3 d’ordrenest formée par les rationnels entre 0 et 1 et qui s’écrivent avec un dénominateur plus petit quen.

Ordonner à la main les éléments d’une suite de Farey est plus que fastidieux.

Les éléments ordonnés d’une suite de Farey vérifient une propriété curieuse : après réduction au même dénominateur et simplification, le numérateur de la différence entre deux éléments consécutifs est toujours 1.

La fonction seq permet de construire une sequence avec une syntaxe assez naturelle4. Considérons par exemple la séquence des inverses des entiers de 1 à 10.

>seq(1/j,j=1..10);

>restart;

3John Farey (1766-1826) était un géologiste anglais dont le nom est resté attaché aux mathé- matiques à cause de cette propriété.

4elle ressemble à celle utilisée en mathématiques pour une somme. Par exempleP

j∈{1···10}

1 j

n:=5;

FareySeq:=seq(seq(i/j,i=1..j),j=1..n);

nops(FareySeq);

Cela signifie que pour Maple la sequence n’est pas vraiment un type, une sequence n’est pas un objet unique.

Une liste (list) est une séquence entourée par des crochets :

> FareyList:=[FareySeq];

La fonction sort trie les éléments d’une liste (et d’autres types de données, voir l’aide) mais pas ceux d’une séquence.

>FareyList:=sort(FareyList);FareySeq:=sort(FareySeq);

Le type ensemble (set) rend bien compte d’un ensemble au sens mathématique.

On forme un ensemble en entourant une séquence par des accolades.

>FareySet:={FareySeq};

Un ensemble Maple contient chaque élément une seule fois (comme en maths), il est stocké et affiché selon un ordre interne à Maple et qui n’a rien de naturel.

En ce qui concerne les suites de Farey, l’intérêt est bien cette "élimination de doublons".

L’utilisation de la fonctionopet des constructeurs[]et{}permet de passer d’un type à l’autre.

>FareyList:=[op(FareySet)];

Écrire les quelques lignes de code qui renvoient la liste ordonnée des élements d’une suite de Farey d’ordre n. Combien la suite ordonnée de Farey pour n = 245 contient-elle d’éléments ? Former la liste des différences entre deux termes consécutifs.

(4)

la boite (1,1) la boite (1,2)

la boite (2,5)

le tableau A A[2,5]

Fig.2 – tableau à deux dimensions

II. Tableaux et tables

Feuilles de calcul à téléchargerPtab.mwouPtab.mws.

1. Principes.

Seul le type de données tableau (array) est au programme de l’épreuve de polytechnique.

Il est utile de connaître le typetable car on génère souvent ce genre de données sans s’en rendre compte. Le type de donnéestable est plus général que le type tableau. Dans les deux cas, iI s’agit d’unefamille de boîtes.

Dans un tableau, les boîtes sont bien rangées en ligne, en rectangle, en rectangles superposés, etc. Les boîtes sont repérées par un nombre (le numéro de la boîte), un couple de nombres, un triplet de nombres et ainsi de suite. On parlera de tableau à une, deux, trois dimensions ou davantage. Un tableau à deux dimensions est analogue à une matrice.

Dans une table, les boîtes ne sont pas particulièrement rangées mais chacune a un nom qui permet d’accéder à son contenu. Un tableau c’est donc une table avec des noms particuliers pour les boîtes.

Dans le vocabulaire informatique, le nom d’une boîte est uneclé, le contenu d’une boîte est unevaleur. Dans la syntaxe Maple siA est le nom d’une table ou d’un tableau, une clé disons1/2doit figurer entre crochets juste à droite du nom de la table.

Une table est proche d’une fonction mathématique dont l’ensemble de définition est fini ; cet ensemble de définition étant l’analogue de l’ensemble des clés de la

table.Attention à l’utilisation de crochets au lieu de parenthèses.

A[1/2];

est évalué à la valeur contenue dans la boîte de nom1/2.

2. Exemples de commandes pour des tables

> restart;

L:=[a,b,c];

L[1];L;

L[2]:=machin;

L;

whattype(L);

L[4]:=truc;

T:=table();

T[1]:=machin;T[2]:=truc;

Une table est utile pour stocker des données dont le nombre n’est pas connu à l’avance.

> whattype(T);

T;

Les tables et les tableaux ont des règles d’évaluation particulières (comme les pro- cédures). Si le nomTa été assigné à un objet de ces types, l’évaluation deTrenvoie seulement le nomT. L’appel deop(T)renvoie la structure de la table etop(op(T)) renvoie les composants de la table qui sont la fonction d’indexation (s’il y en a une) et la liste des équations donnant les valeurs que contient la table.

> eval(T);op(T);

dec:=table([0=1,1=2,3=0]);

dec:=table([(0)=1,(1)=2,(3)=0]);

dec[1];

LongOnde:=table([rouge=610,bleu=480,violet=450,vert=520]);

LongOnde[rouge];

DS1:=table([Blanchet=20,Gauss=18,Markov=11]);

DS1[Markov];DS1[titi];DS1;eval(DS1);print(DS1);

(5)

3. Exemples de commande pour des tableaux

La commande V := array(1..10) crée un tableau à une dimension (un 10- uplet) vide. La commande A := array(1..m,1..n) crée un tableau à deux di- mensions (une matrice) avecm rangs et n colonnes. Les tableaux ont des règles particulières d’évaluation. Lorsque la nomAa été assigné à un tableau, l’évaluation deArenvoie le nom eteval(A)renvoie la structure du tableau.

On peut utiliser la fonctionoppour détailler la structure.op(1,eval(A))renvoie la fonction d’index s’il y en a une sinon rien.

op(2,eval(A))renvoie les bornes.

op(3,eval(A))renvoie les entrées du tableau sous forme d’équations clé = valeur.

> v := array(1..4):

for i to 3 do v[i] := i^2 od:

print(v);

v[2];

u:=array(1..n);

#l’accès à un indice qui n’est pas dans la liste

# renvoie une erreur:

v[0];

A := array(1..2,1..2):

A[1,2] := x:

A[1,1];

A[1,2];

print(A);

A := array( symmetric, 1..2,1..2, [ [1,x], [x,x^2] ] ):

op(1,eval(A));

op(2,eval(A));

op(3,eval(A));

4. Recherches linéaires

Le problème consistant à trouver la plus grande valeur dans un tableau com- porte de nombreuses variantes qui se retrouvent très souvent. Il faut bien maîtriser le schéma conventionnel (figure3 ) et l’implémentation Maple.

> n:=5

L:=array(1..n,[1,2,5,2,3]);

max:=L[1];

for i from 2 to n do if L[i]> max then

Fig.3 – recherche de la plus grande valeur

max:=L[i]

fi;

od;

max;

Comment doit modifier le schéma conventionnel pour renvoyer la clé de plus grande valeur ?

> L:=array([1,2,5,2,3]);

max:=L[1]; Nmax:=1;

for i from 2 to n do if L[i]> max then

max:=L[i]; Nmax:=i fi;

od;

Nmax;

Un autre problème fréquent est de trouver la clé pour un objet qui peut être une valeur d’un tableau sans qu’on en soit certain à priori.

On suppose ici que les valeurs d’un tableau A (de dimension deux) sont deux à deux distinctes. On se donne unx assigné à quelque chose qui est peut être une valeur deA. On veut calculer uncletel que

– clesoit évalué à 0 sixn’est pas une valeur du tableau.

– A[cle]soitxsi c’est une valeur du tableau.

Dans le premier problème, il faut forcément parcourir tout le tableau car on ne peut savoir à l’avance où se situe la plus grande valeur. En revanche dans ce deuxième problème, on peut arrêter le parcours dès que la valeur est trouvée. Il serait plus

(6)

Fig.4 – recherche d’une valeur

élégant d’implémenter la solution avec une bouclewhilemais il est beaucoup plus facile d’utiliser unerupture dans une bouclefor.

Références

Documents relatifs

[r]

[r]

Table 2: Genes differentially expressed in GASCs and control

établissement: Université Kasdi-Merbah OUARGLA - Faculté des Mathématiques et Science de la matière - Département de Mathématiques.. Emplois

Elle affiche deux champs de saisie de texte, pour le numéro du court et l'heure de début de la réservation, et une liste permettant de choisir son partenaire; la liste affiche

4- Aide-toi des additions de l’arbre pour écrire les résultats des multiplications.. 5- Invente au moins trois autres multiplications avec le

[r]

Remarque: L'apprentissage des tables de multiplications prend du temps et je ne m'attends pas à ce que cette leçon soit parfaitement sue du premier coup.. -LA TABLE