Cours Int´egr´e de Maple - Institut de Recherche...

24
Universit´ e Louis Pasteur L2 MPC/LPA Cours Int´ egr´ e de Maple 2007-2008

Transcript of Cours Int´egr´e de Maple - Institut de Recherche...

Universite Louis Pasteur L2 MPC/LPA

Cours Integre de Maple

2007-2008

2

Table des matieres

1 Une introduction et sa suite 51.1 Acces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2 Instruction(s), execution(s) et resultat(s) . . . . . . . . . . . . . . . . . . . . . 51.3 Sauvegarde de fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.4 Aide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.5 Quelques suites avec Maple . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2 Variables, fonctions, tableaux et boucles 92.1 Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.2.1 Fonctions et expressions . . . . . . . . . . . . . . . . . . . . . . . . . . 112.2.2 Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3 Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.3.1 La commande array . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.3.2 Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.4 Boucles et tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3 Graphiques 153.1 La commande plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.1.1 Des fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.1.2 Un ensemble de points . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.1.3 Faire une animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.2 Autres commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4 Quelques complements 194.1 Resolution d’equations differentielles . . . . . . . . . . . . . . . . . . . . . . . 194.2 Partiel janvier 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.3 Partiel septembre 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3

4 TABLE DES MATIERES

Chapitre 1

Une introduction et sa suite

Maple est un logiciel de calcul formel : il peut traiter des donnees numeriques (entier, reels,complexes...) de precision arbitraire et aussi des donnees symboliques (polynomes,expressions...).Ce logiciel est egalement dote de capacites graphiques.

1.1 Acces

Maple est un logiciel (payant). Il est installe sur un systeme (linux, mac, windows). Il y aplusieurs versions ; actuellement la version 11 existe. Sur Univ-R (avez vous un compte ent ?),il y a (normalement) 2 versions : 7 et 9.5. On preferera la version 7 qui est moins lourde. Ony accede en cliquant sur Application pedagogique puis Mathematiques et enfin Maple 7 (s’il ya ecrit Mapple 7, c’est une erreur d’orthographe : Maple vient du Canada et veut dire erable,dont la feuille est d’ailleurs l’embleme de ce pays ; rien-a-voir avec une pomme, donc ; cliquezquand meme sur l’icone, mais ne faites pas la faute d’orthographe !).

1.2 Instruction(s), execution(s) et resultat(s)

Apres un certain temps, vous voyez apparaıtre une interface graphique avec un fichiernomme Untitled(1) et un curseur qui attend que vous tapiez votre premiere instruction :

>2+2;

N’oubliez pas le ;, car il signifie la fin de l’instruction et que le resultat sera affiche. Ne rajouterpar l’invite de commande > : il est deja ecrit et correspond a un bloc d’instructions qui estexecute des que l’on appuie sur la touche entree.A la place du ;, on peut aussi utiliser le :. Dans ce cas l’instruction sera executee, mais nonaffichee. Cela peut etre pratique si l’on ne veut pas que l’ordinateur affiche plein de resultatsintermediaires qui ne sont pas utiles.Lorsque l’on appuie sur la touche shift entree, on va a la ligne sans executer. Cela permetd’ecrire un bloc d’instructions de maniere plus claire et evite de devoir appuyer de nombreusesfois sur la touche entree pour arriver au resultat final.Le resultat de la derniere instruction est donne par % et celui de l’avant-dernier resultat estdonne par %% (on peut aussi avoir le resultat de l’avant-avant-derniere operation par %%%).Pour bien comprendre comment les instructions sont executees, ecrivez :

5

6 CHAPITRE 1. UNE INTRODUCTION ET SA SUITE

>1:1:

>%+%%;

Vous devez voir affiche 2. Revenez au deuxieme bloc et reappuyez sur entree. 3 est alorsaffiche. Recommencez un certain nombre de fois. Vous etes en train d’afficher les nombressuccessifs de la suite de Fibonacci definie par

u1 = 1, u2 = 1, un+1 = un + un−1, n = 2, . . .

Revenez maintenant au premier bloc, appuyez sur entree, puis allez au deuxieme bloc etappuyez sur entree. Quel est le resultat affiche, pourquoi ?Pour eviter d’avoir a repeter les memes instructions, on peut utiliser une boucle

>1:1:for i to 10 do %+%%;od;

i est une variable qui va de 1 (valeur par defaut) a 10 ; tout ce qui est ecrit entre le do et leod va donc etre execute 10 fois. A la sortie de la boucle (apres le od), la variable i vaut 11.C’est le ; apres le od qui dicte s’il y a ecriture ou non. Faites plusieurs essais, en changeantles ; en : et vice-versa, pour bien comprendre.Pour afficher seulement le 100 ieme terme de la suite de Fibonacci, on peut donc ecrire

>1:1:for i to 98 do %+%%;od:%;

Une des particularites de Maple est que ce logiciel utilise des valeurs exactes et non approchees.Ainsi si l’on tape

>3/2;sqrt(2);Pi;

on n’obtient guere d’informations sur la valeur numerique de 3/2,√

2 ou Pi (pensez bien amettre une majuscule). Pour forcer a evaluer numeriquement, on peut remplacer les entiersutilises par des reels. Cela se fait en ecrivant par exemple 3. (avec un point) au lieu de 3

(sans le point). On peut aussi utiliser la fonction evalf.

>3./2;sqrt(2.);

ou alors

>evalf(3/2);evalf(sqrt(2));evalf(Pi);

Par defaut, MAPLE utilise 10 chiffres significatifs ; on peut changer cette valeur en ecrivantpar exemple

>Digits:=20:

Cela veut dire que l’on a affecte 20 a Digits, la variable interne (i.e. definie dans Maple,comme Pi), et cela se traduit par le fait que les calculs vont se faire avec une precision de 20chiffres significatifs. Nous voyons donc que Maple nous permet de faire des calculs avec uneprecision arbitraire, ce qui n’est pas le cas pour la plupart des langages de programmationtels que C, Fortran, Scilab ou Matlab.

Exercice 1. Le nombre d’or est donne par 1+√

52 . Il est aussi donne comme la limite de un+1

un,

ou (un) est la suite de Fibonacci precedement decrite. Ecrivez des instructions pour observerce phenomene numeriquement.

1.3. SAUVEGARDE DE FICHIER 7

1.3 Sauvegarde de fichier

Vous avez tape quelques lignes de Maple et vous voulez garder la trace de ce que vous avezfait. Vous voulez egalement rajouter des commentaires, i. e. du texte non execute par Maple.Un commentaire s’ecrit avec #. Ainsi toute la fin de ligne apres ce symbole ne sera plus luepar Maple. Votre feuille Maple peut se presenter ainsi de la maniere suivante :

>#Suite de Fibonacci

1:1:for i to 100 do %+%%;od:%;

>#Nombre d’Or (exercice 1)

1.:1.:for i to 100 do %+%%;od:%/%%;(1+sqrt(5.))/2;

Sauvegarder alors le fichier sous la forme NOM.tp1.mws ou NOM.tp1.mw, suivant la versionde Maple utilisee (pour Maple7, c’est .mws). Utilisez toujours la meme version pour un memefichier ; ainsi si on passe de la version 7 a la version 9.5, il est possible que le fichier ne soitplus lisible en version 7 par la suite.Sous linux/mac, il est aussi possible d’utiliser Maple sans mode graphique : les commandesMaple sont enregistrees dans un fichier (par exemple tp1.maple) et executees dans un terminalpar

maple -q tp1.maple

Un interet est que l’execution est plus rapide, car en mode graphique, l’execution peut etre tresralentie, notamment lors de l’ouverture de la session Maple. Par contre, on perd l’interactivitequi peut etre retrouvee en lancant maple et non xmaple depuis un terminal. Dans ce casneanmoins, on ne peut pas faire de sauvegardes. Enfin, en mode non graphique, il est plusdifficile d’obtenir des figures (qui sont affichees avec des caracteres dans le terminal). On peutparer a cet inconvenient en creant par exemple des fichiers jpg.N’oubliez pas de sauvegarder regulierement votre fichier.

1.4 Aide

Le logiciel Maple peut etre vu comme une grosse calculatrice et offre de nombreusespossibilites. N’hesitez pas a consulter l’aide (en anglais : cela ne doit pas vous rebuter !). Onpeut obtenir de l’aide sur un mot, en tapant ? suivi du mot (tout attache et sans ;). Parexemple, pour tracer une fonction

?plot

1.5 Quelques suites avec Maple

Exercice 2. Une grenouille assoifee cherche une mare pour se desalterer. Son premier sautla porte 1 metre plus loin. Comme elle se fatigue a chaque saut, le suivant ne fait que 90%de la longueur precedente. Sachant que la mare la plus proche est a 9 metres de son point dedepart, arrivera-t-elle a l’atteindre ? si oui, en combien de sauts ?

Exercice 3. La fonction rand() renvoie un entier positif a 12 chiffres (au plus), choisi demaniere aleatoire. Pour N assez grand, calculer la moyenne obtenue de N appels de cettefonction. Que remarque-t-on ?

8 CHAPITRE 1. UNE INTRODUCTION ET SA SUITE

Exercice 4. Les polynomes de Chebyshev sont definis par la formule de recurrence suivante :

T0(x) = 1, T1(x) = x, Tn+1(x) = 2xTn(x) − Tn−1(x), n ≥ 1.

La fonction simplify permet de simplifier des expressions algebriques. Ainsi, par exemple

> simplify(2*x*(2*x^2-1)-x);

donne pour resultat 4x3 − 3x. En utilisant la fonction simplify, calculer alors T9. Verifierle resultat a l’aide de la commande

>orthopoly[T](9,x);

Exercice 5. Calculer∑N

k=01k! , pour N = 5, 10, 20 et comparer avec une valeur approchee de

exp(1).

Exercice 6. La formule de Machin fut decouverte en 1706 et relie le nombre π a la fonctionarctangente :

π

4= 4arctan

1

5− arctan

1

239.

D’autre part, on a arctan(x) =∑∞

k=0(−1)k x2k+1

2k+1 . En deduire un algorithme pour calculer unevaleur approchee de π, en n’utilisant que des operations elementaires (+,−, ∗, /), et compareravec une valeur numerique de Pi. On pourra tester differentes valeurs de la variable Digits.

Chapitre 2

Variables, fonctions, tableaux etboucles

Dans le chapitre precedent, nous avons vu que Maple nous permet de faire des calculsnumeriques de precision arbitraire, en reglant la variable Digits convenablement. Nous avonsaussi apercu que les calculs peuvent etre faits sur des objets plus formels tels que les po-lynomes. Pour l’instant les calculs ont ete faits dans la foulee grace a l’utilisation des resultatsprecedents obtenus par les symboles %,%% et %%%. Cela a deja permis de faire de nombreuxcalculs sur les suites, mais reste neanmoins limite, car pour faire un calcul on peut avoirbesoin d’autres valeurs que celles que l’on vient juste d’utiliser ! Nous allons maintenant doncintroduire d’autres notions qui vont permettre de faire des calculs plus evolues : les variables,les fonctions, les tableaux et les boucles.

2.1 Les variables

Nous avons deja rencontre quelques variables : Pi,Digits, l’indice de boucle i. Contrai-rement a d’autres langages de programmation, comme le C ou le Fortran, les variables ne sontpas declarees a l’avance et l’utilisateur n’a pas besoin de preciser le type (reel,entier,caractere,pointeur...).Il existe des variables predefinies :

>Pi,Digits,I;

I est le nombre complexe i (on a i2 = −1). Certaines de ces variables peuvent etre modifiees(comme Digits) et d’autres non (comme I et Pi).Les autres variables sont definies a partir du moment ou elles sont affectees. L’affectation d’unevariable se fait par l’instruction := (comme nous l’avons deja vu pour la variable Digits).

>a:=1:a;

La valeur 1 est mise dans la variable a. Il peut parfois etre interessant de liberer une variable,c’est-a-dire d’enlever la valeur qu’elle contenait. Cela se fait a l’aide de la fonction unassign.

>a:=1:a;unassign(’a’):a;

Ainsi, dans cet exemple, a redevient une variable formelle (on pourrait ainsi definir parexemple des polynomes en fonction de a, comme cela avait ete fait pour les polynomes de

9

10 CHAPITRE 2. VARIABLES, FONCTIONS, TABLEAUX ET BOUCLES

Chebychev).Pour reinitialiser toutes les variables et tout ce qui a ete fait auparavant, on utilise la com-mande

>restart;

Reprenons l’exemple de la suite de Fibonacci

>n:=10:u:=1:v:=1:

for i to n-2 do w:=u+v:u:=v:v:=w:od:w;

Remarquez qu’il a ete necessaire d’utiliser ici une variable temporaire w.Lorsque l’on cherche a resoudre un probleme, celui-ci va generalement dependre de quelquesparametres (parametres physiques, de simulation,. . .), qu’il est important de bien identifier. Ilest conseille de definir ces variables parametres une fois pour toutes au debut, pour la clarteet afin de pouvoir les modifier facilement.

Exemple 1. On souhaite comparer l’erreur obtenue pour le calcul de∫ 1

0exp(x)dx,

∫ π

0sin(x)dx.

par la methode des rectangles et la methode des trapezes. L’integrale exacte pour l’exponentielleest donnee par

>int(exp(x),x=0..1):evalf(%);

La methode des rectangles d’une fonction f sur un intervalle [a, b] est donnee par la formule

b − a

N

N−1∑

k=0

f(a + kb − a

N),

tandis que la methode des trapezes est donnee par

b − a

2N

(

f(a) + f(b) + 2N−1∑

k=1

f(a + kb − a

N))

.

On peut ecrire alors le code Maple suivant

>f:=exp:a:=0:b:=1: #cas1

#f:=sin:a:=0:b:=Pi:#cas2

N:=10:

int(f(x),x=a..b):Iexact:=evalf(%);

a:=evalf(a):b:=evalf(b):dx:=(b-a)/N:

#methode des rectangles

0.:a:for i to N do %%+f(%):%%+dx:od:

Irect:=%%*dx;Irect-Iexact;

#methode des trapezes

0.5*(f(a)+f(b)):a+dx:for i to N-1 do %%+f(%):%%+dx:od:

Itrap:=%%*dx;Itrap-Iexact;

Ainsi, en commentant/decommentant la deuxieme ligne (i.e. en laissant ou en enlevant lepremier # de la deuxieme ligne), on peut passer de la premiere a la deuxieme integrale.

2.2. LES FONCTIONS 11

2.2 Les fonctions

2.2.1 Fonctions et expressions

Supposons que l’on veuille definir la fonction f(x) = x2 + 1, afin de calculer par exempleson integrale, comme dans l’exemple precedent. Pour cela, il y a deux manieres de faire : soiton ecrit

>f:=x->x^2+1:

et dans ce cas, pour evaluer la fonction en un point, par exemple pour x = 0.1, on ecrit

>f(0.1):

soit, on considere l’expression

>f:=x^2+1:

et dans ce cas, pour evaluer l’expression en x = 0.1, on ecrit

>subs(x=0.1,f);

Remarquons que l’on peut passer d’une forme a l’autre :

>f:=x^2+1:f:=unapply(f,x);

>f:=x->x^2+1:f:=f(x);

Notons que dans le cas d’une fonction la variable est muette ; on peut la changer sans chan-ger la definition (on aurait pu ecrire par exemple f :=y->y^ 2 ;). Ceci n’est pas vrai pourune expression ou il faut faire attention que la variable utilisee soit libre (on peut toujoursliberer une variable avec unassign, comme nous l’avons deja vu). En general, on preferera lesexpressions qui sont des objets plus simples.

Exercice 7. Modifier l’Exemple 1, pour pouvoir traiter le calcul de

∫ 1

−1

1

1 + x2dx,

∫ 1

−1exp(−x2)dx.

On traitera le cas ou l’on utilise des fonctions et le cas ou l’on utilise des expressions.

2.2.2 Procedures

Lorsque l’on veut faire plusieurs calculs avec des parametres differents, il peut etre interessantd’englober le calcul dans une procedure. Cet objet se presente de la maniere suivante :

>toto:=proc(f,N)

local i,tmp;

tmp=0.;

for i to N do tmp:=tmp+evalf(subs(x=i/N,f)):od:

tmp/N;

end proc:

> f:=x^2:N:=10:toto(f,N);N:=20:toto(f,N);f:=exp(-x^2):toto(f,N);N:=40:toto(f,N);

12 CHAPITRE 2. VARIABLES, FONCTIONS, TABLEAUX ET BOUCLES

Pour le premier >, on definit la fonction ; toto est le nom, f,N sont des variables parametresqui sont utilisees dans la procedure, i et tmp sont des variables locales c’est-a-dire qu’ellesn’existent qu’ a l’interieur de la procedure. Le dernier resultat avant la fin de la procedure(materialise par end proc :) est ce qui sera renvoye par la procedure lors de l’appel.Pour le deuxieme >, on appelle la fonction avec differents parametres.

Exercice 8. Ecrire une procedure rect(f,a,b,N) et trap(f,a,b,N) qui calcule l’integraled’une fonction f sur un intervalle [a, b], avec respectivement la methode des rectangles et destrapezes. La tester pour differents parametres.

2.3 Les tableaux

On a vu que pour l’on pouvait calculer les termes d’une suite a l’aide de variables.Considerons maintenant la suite definie de la maniere suivante :

c1 =1

7,

5k + 9

6ck =

k−1∑

j=1

jcjck−j +1

3−

k−1∑

j=1

cj , k ≥ 2.

Nous voyons que pour calculer le kieme terme ck, nous avons besoin de tous les termesprecedents ck−1, . . . , c1. Nous avons donc besoin de stocker ces valeurs une fois qu’elles sontcalculees.

2.3.1 La commande array

Pour cela, nous pouvons utiliser un tableau par la commande

>N:=100:c:=array(1..N):

Cela veut dire que l’on a reserve des variables c1, . . . , cN que l’on pourra affecter par la suite.On peut ecrire ainsi :

c[6]:=1:

Notons que les variables peuvent etre de n’importe quel type ; en particulier, l’espace occupepar les variables non encore affectees n’est pas alloue, mais sera alloue lors de l’affectation.

Remarque 1. Lorsque l’on connait la taille des objects, on peut parfois reserver a l’avancela place memoire. Cela peut augmenter les performances pour le temps d’acces au tableau.Neanmoins, on ne connait pas toujours la place occupee par les variables (par exemple, cer-tains entiers peuvent etre tres grands et necessiteront donc beaucoup de stockage). Le lecteurinteresse pourra consulter l’aide sur la commande rtable.

Un interet de la commande array est que l’on peut faire commencer et terminer les indicesou l’on souhaite. Ainsi, on peut ecrire

>deb:=-10:fin:=15:c:=array(deb..fin):

On peut egalement indicer les tableaux en plusieurs dimensions

>N:=10:M:=12:L:=array(1..N,1..M):

2.3. LES TABLEAUX 13

L’acces se fait alors par L[i,j]. Pour calculer la suite precedente, on peut donc ecrire.

N:=30:L:=array(1..N):L[1]:=1/7:

for k from 2 to N do

S:=add(L[j],j=1..k-1):T:=add(j*L[j]*L[k-j],j=1..k-1):

L[k]:=(6/(5*k+9))*(T-S+1/3);

od:evalf(%);

On a utilise ici la commande add qui fait la somme des elements de la liste (on aurait aussipu utiliser la commande for) et on a utilise from, pour faire commencer k par 2 et non lavaleur 1 par defaut.Pour afficher tous les elements du tableau, on peut ecrire

>eval(L);

2.3.2 Les listes

On peut aussi definir des tableaux par des listes de la maniere suivante :

L:=[1,4,7];

Un interet est la declaration qui est plus simple. On peut aussi acceder au nombre d’elementsa l’aide de la commande nops

>nops(L);

La fonction nops compte le nombre d’operandes de l’ objet L et les operandes sont donneespar la fonction op. L’affichage de toute la liste se fait tout simplement en ecrivant

>L;

Attention, dans une liste, les indices commencent par 1 :

>L:=[3,6,7]:L[1];op(1,L);

La valeur 3 est ici affichee, puisque c’est le premier element de la liste, qui est aussi la premiereoperande de L.Notons aussi qu’une liste est une sequence entre crochets et pour generer une sequence, il estcommode d’utiliser la commande seq

L:=[seq(i*i,i=1..5)];

Exercice 9. Calculer c200 lorsque c1 vaut 1/7 et 1./7, en mettant ces deux valeurs initialesdans une liste et on souhaite avoir le resultat sous forme d’une liste.

De maniere generale (aussi en voyant l’exercice precedent), on preferera utiliser array pourdes grands tableaux et des listes pour des petits tableaux (qui peuvent etre une liste deparametres a tester, que l’on mettra de preference au debut du programme ).Remarquons aussi la commande map qui applique une fonction a une liste (ou un array) :

>N:=10:L:=[seq(k/N,k=0..N)]:f:=x->exp(x):fL:=map(f,L):

14 CHAPITRE 2. VARIABLES, FONCTIONS, TABLEAUX ET BOUCLES

2.4 Boucles et tests

Pour diverses raisons, on peut avoir besoin d’executer une instruction que sous certainesconditions.Prenons l’exemple de la recherche dichotomique. On se donne une fonction continue surun intervalle [a, b] tel que f(a) > 0 et f(b) < 0. On sait alors qu’il existe une racine def sur l’intervalle [a, b], c’est-a-dire un nombre x ∈ [a, b] tel que f(x) = 0. La recherchedichotomique permet alors de trouver une racine notee x dans cet intervalle. On regardele signe de f((a + b)/2), afin de savoir si x ∈ [a, (a + b)/2] ou si x ∈ [(a + b)/2, b]. Onrecommence ensuite ce procede jusqu’a l’obtention d’un intervalle assez petit pour avoir unebonne approximation de x. On peut alors definir la procedure suivante.

>dicho:=proc(aa,bb,eps,Nmax,f)

local fa,fb,err,i,c,a,b;a:=evalf(aa):b:=evalf(bb):

fa:=evalf(subs(x=a,f));fb:=evalf(subs(x=b,f));err:=fa;i:=0:

if(fa*fb>0) then error "Mauvais intervalle\n";end;

while((abs(err)>eps) and (i<Nmax)) do

c:=0.5*(a+b):err:=evalf(subs(x=c,f)):

if(err<0) then b:=c:fb:=err:else a:=c:fa:=err:fi:

i:=i+1:

od:

i,c,evalf(subs(x=c,f));

end proc:

On a ici utilise l’instruction conditionnelle if, la boucle while. Notez la syntaxe :

if (..) then .. else .. fi:

while (..) do .. od:

On a aussi utilise l’instruction error suivie d’une chaıne de caracteres qui est le messaged’erreur. Lorsque l’on est dans cette situation, le message d’erreur est renvoye et le reste de laprocedure n’est pas execute (on sort de la procedure). Le symbole apres ”intervalle” signifieque l’on va a la ligne. On a aussi utilise le signe logique and (et). Dans ce contexte, on pourraaussi utiliser les symboles ou, different, egal, negation :

or,<>,=,not

En particulier, on ne confondra pas le symbole = de test d’egalite entre deux objets avec lesymbole := qui est l’affectation d’une variable.

Exercice 10. Grace a la fonction precedente, trouver une approximation de l’unique solutionde l’equation

tan(x) = x,

pour x ∈]π/2, 3π/2[. Modifier le code precedent pour pouvoir traiter le cas ou f(a) < 0 ettester sur un exemple. Comparer avec le resultat obtenu par fsolve.

Chapitre 3

Graphiques

Dans le chapitre precedent, nous avons vu les principales bases pour faire un calcul. Aveccertains parametres d’entree, on est capable de faire une suite d’instructions qui aboutit aun resultat qui se presente generalement sous la forme d’un ou plusieurs nombres ou d’uneexpression formelle (comme un polynome). Pour repondre a un probleme donne, le resultatpeut se presenter come une suite importante de nombres qu’il est alors commode de visualisera l’aide d’un outil graphique. Nous allons voir ici comment visualiser de resultats en 1D,2D, 3D et comment faire des animations. Un autre point est de savoir comment stocker desinformations.

3.1 La commande plot

3.1.1 Des fonctions

On peut visualiser des fonctions par :

>f:=sin(4*x):plot(f,x=0..2*Pi);

>f:=x->sin(4*x):plot(f,0..2*Pi);

Dans le premier cas, on utilise la forme expression tandis que dans le deuxieme cas, il s’agitde la forme fonction. On peut aussi visualiser plusieurs graphiques en meme temps ; cela peutetre extremement utile lorsque l’on veut faire une comparaison. Pour cela, on utilise

>plot([sin,cos],x=0..Pi,color=[red,blue],legend=["sin","cos"]);

Remarquez les options utilisees pour bien distinguer les courbes, grace aux couleurs et a lalegende.

Exercice 11. A l’aide de la fonction plot, localiser le 5ieme zero strictement positif de lafonction x − tan(x), a 10−2 pres ; verifier le resultat avec fsolve.

Un autre moyen de dessiner deux courbes en meme temps est d’utilise la fonction display

qui fait partie de la libraire plots. Pour cela, on charge d’abord la librairie en ecrivant

>with(plots):

Puis, on definit les deux graphiques de chaque courbe avant de creer la graphique qui contien-dra les deux courbes.

>G1:=plot(sin,0..Pi,color=red,legend="sin"):G2:=plot(cos,0..Pi,color=blue,legend="cos"):

display(G1,G2);

15

16 CHAPITRE 3. GRAPHIQUES

3.1.2 Un ensemble de points

On peut aussi dessiner un ensemble de points, ce qui peut etre utilise si on connait lafonction cherchee seulement en un nombre fini de points. Pour cela, la commande est lasuivante

>plot([[0,0.5],[1,0.2]]);

Ainsi les points (0, 0.5) et (1, 0.2) sont relies par un segment (on peut ne tracer que les pointsen rajoutant l’option style=point).

Exercice 12. Tracer sur un meme graphique la fonction sin avec une resolution de 10 pointset de 20 points, avec une legende. Comparer avec

plot(sin,0..2*Pi,adaptive=false,numpoints=10);

On peut egalement tracer des courbes parametrees de la forme (x(t), y(t)) ; par exemple,pour dessiner le cercle de centre (0, 0) et de rayon 1, on ecrit

plot([cos(t),sin(t),t=0..2*Pi],scaling=constrained);

L’option est mise pour que les axes soient les memes (sinon, on aurait une ellipse !).

3.1.3 Faire une animation

Il peut etre interessant de vouloir dessiner l’evolution d’un graphique ; cela s’obtient fa-cilement avec la fonction display, en rajoutant l’option insequence=true : on definit toutd’abord la liste d’images et on appelle ensuite la fonction display que l’on applique a cettesuite. En cliquant sur l’image, on voit ensuite apparaıtre des boutons play, pause,. . . qui per-mettent de controler l’animation.Prenons l’exemple de la cycloide : il s’agit du mouvement d’un point fixe a un cercle qui roulesans glisser sur une droite. Regardez ce que fait ce code et cherchez a comprendre toutes lesinstructions.

n:=50:R:=5:nbt:=2:

t:=0:dt:=nbt*2*Pi/n:

G:=[seq(0,k=1..n)]:G0:=plot([[0,0],[nbt*2*Pi*R,0]],color=black):

for k to n do t:=t+dt:

G1:=plot([R*(cos(s)+t),R*(sin(s)+1),s=0..2*Pi],color=red):

G2:=plot([R*(s-sin(s)),R*(1-cos(s)),s=0..t],color=blue):

G3:=plot([[R*(t-sin(t)),R*(1-cos(t))]],thickness=2,style=point,color=red):

G[k]:=display([G0,G1,G2,G3]):

od:display(G,insequence=true,scaling=constrained,axes=none);

Exercice 13. Hypo/epicycloides1. Tracez un cercle de rayon 1 et de centre (0, 0).2. Soit R 6= 0 un nombre et t ∈ [0, 2π]. On considere le cercle de rayon |R| et de centre((R + 1) cos(t), (R + 1) sin(t)). Que represente ce cercle par rapport au cercle de la question1, suivant le signe de R ? Que se passe-t-il lorsque t varie ? Faites une animation.3. On considere la courbe definie sur [0, t] par

x(s) = (1 + R) cos(s) − R cos((1/R + 1)s), y(s) = (1 + R) sin(s) − R sin((1/R + 1)s).

3.2. AUTRES COMMANDES 17

Rajoutez cette courbe a l’animation precedente.4. Comme dans le cas de la cycloide, rajoutez le point rouge.

Exercice 14. On cherche un nombre L > 0 verifiant

L =gT 2

2πtanh

(2πd

L

)

,

avec g = 9.81, tandis que T et d sont des parametres qui varient.1. Pour un jeu de parametres T, d, trouvez L a l’aide de la fonction dicho (que l’on pourralegerement modifier).2. Calculez l’erreur maximale commise par rapport a la solution ”exacte” obtenue a l’aide defsolve.3. Pour une valeur de T donnee, faıtes une representation de L en fonction de d.4. Pour une valeur de d donnee, faıtes une representation de L en fonction de T .5. Superposez plusieurs graphiques precedents pour des valeurs de T differentes.

3.2 Autres commandes

Il existe de nombreuses autres possibilites pour faire des graphiques : implicitplot,plot3d.Il peut etre utile egalement de sauvegarder des informations dans un fichier pour pouvoir lesutiliser plus tard, soit avec le meme logiciel ou meme avec d’autres logiciels.Pour cela, on consultera la commande fprintf.On peut aussi sauvegarder des graphiques en format eps ou jpg.Voici quelques instructions qui peuvent etre utiles si l’on veut par exemple utiliser Maplesans mode graphique et avoir quand meme la possibilite de visionner des graphiques (sansanimations neanmoins).

interface(plotdevice=ps,plotoutput=‘toto.ps‘);

with(plots):

plotsetup(ps);

plot(sin,x=0..2*Pi);

quitplotsetup():

system("xv toto.ps&"):

la derniere ligne permet de visualiser le fichier ps avec le logiciel xv (qui doit etre installe).

3.3 Exercices

Exercice 15. Polynomes de Lagrange Etant donnes un intervalle I = [a, b], une fonctionf definie sur I et un ensemble de k + 1 points {xn}n=0...k avec xn ∈ I ∀n = 0 . . . k ; on definitl’interpolee de Lagrange de f sur l’ensemble {xn}n=0...k comme l’unique fonction polynomialeP de degre inferieur ou egal a k verifiant

P (xn) = f(xn) ∀n = 0 . . . k.

Le programme suivant calcule l’interpolation de Lagrange, grace a la fonction interp.

18 CHAPITRE 3. GRAPHIQUES

>restart:with(plots):

>f:=exp(x):N:=3:a:=0:b:=1:#parametres

h:=(b-a)/N:L:=[seq(a+k*h,k=0..N)]:

g:=unapply(f,x):Pf:=interp(L,map(g,L),x):

seq(subs(x=L[k],Pf-f),k=1..N+1);

plot(f-Pf,x=a..b);

>G1:=plot(f,x=a..b,color=blue):G2:=plot(Pf,x=a..b,color=red):

display([G1,G2]);

Que representent h, le premier et le deuxieme graphique ? Essayer avec d’autres parametres.Modifier le programme pour pouvoir faire une animation suivant le nombre de points dediscretisation.

Exercice 16. : La marche de l’ivrogneSupposons qu’un ivrogne marche dans une rue droite et fait un pas a chaque seconde :

tantot vers la gauche et tantot vers la droite de maniere aleatoire. On va aussi supposer qu’ilpeut rester immobile. Les 100 premiers pas de l’ivrogne peuvent se modeliser ainsi :

> hasard:=rand(-1..1):

> positionivrogne:=0:

> for k from 1 to 100 do

a:=hasard():

positionivrogne:= positionivrogne + a:

enddo;

> positionivrogne;

Voir l’aide sur la fonction rand() si necessaire. Modifions le programme precedent afin deconserver en memoire chacune des positions de l’ivrogne :

> hasard:=rand(-1..1):

> positionivrogne:=0:

> for k from 1 to 100 do

a:=hasard():

positionivrogne:= positionivrogne + a:

position[k]:=positionivrogne:

enddo;

> positionivrogne;

> l:=[seq([n,position[n]],n=1..100)]:

> plot(l,0..100);

Modeliser une marche aleatoire dans le plan. On stockera les positions successives del’ivrogne pour en tracer un graphique. Quelle est alors la distance parcourue par l’ivrogne ?Quelle distance le separe de son point d’origine ?

Chapitre 4

Quelques complements

4.1 Resolution d’equations differentielles

On souhaite simuler le deplacement x(t) d’une masse accrochee a un ressort. Par applica-tion du theoreme de Newton, on obtient l’equation differentielle :

md2

dt2x(t) + α

d

dtx(t) + kx(t) = 0

Maple possede differents outils permettant la resolution d’equations differentielles, comme lacommande dsolve ou encore la fonction odeplot pour la visualisation des solutions (voirl’aide sur ces deux fonctionnalites).Dans un premier temps, on definit l’equation differentielle. Il existe plusieurs manieres dedefinir une derivee. On utilisera de preference les commandes D ou diff. La derivee d’unefonction f(x) est alors : diff(f,x) ou D(f). La derivee de f en x=0 est D(f)(0). La deriveeseconde s’ecrit par exemple diff(f(f,x,x) ou encore diff(f,x$2) (d’autres formulationssont donnees dans l’aide).L’equation differentielle est donnee ainsi :

ressort:={m*diff(x(t),t,t)+alpha*diff(x(t),t)+k*x(t)=0};

Puis les differents parametres sont fixes : la masse m, le coefficient de frottement α et laraideur du ressort k :

m:=2:alpha:=0.5:k:=5:

On definit egalement les conditions initiales. A l’instant initial, le ressort a une longueur l(soit x(0) = l) et une vitesse nulle (soit dx(0)

dt= 0). De maniere a changer plus facilement les

conditions initiales, on peut definir une fonction CI telle que :

CI:=(a,b)->{x(0)=a, D(x)(0)=b};

On constatera que l’equation differentielle et ses conditions initiales sont definies comme desensembles (entoures de {}), la commande dsolve necessitant cette syntaxe.Enfin on peut resoudre l’equation differentielle :

sol:=dsolve(ressort union CI(0.5,0), x(t), numeric);

19

20 CHAPITRE 4. QUELQUES COMPLEMENTS

L’option numeric indique que la solution de l’equation est approchee par une methodenumeriqueGrace a la commande odeplot, on peut representer le mouvement du ressort dans le temps :

odeplot(sol, [t, x(t)], 0..10, numpoints=400);

et aussi modeliser l’etat du systeme dans l’espace des phases :

odeplot(sol, [x(t), diff(x(t),t)], 0..10, numpoints=400);

Exercice 17 (Le pendule simple rigide). On souhaite simuler le mouvement d’un pendulesimple. On rappelle que l’equation differentielle regissant le mouvement est :

d2

dt2θ(t) + 2f

d

dtθ(t) + w2

0 sin(θ(t)) = 0

ou w0 est la pulsation propre du pendule et f le coefficient de frottement (on donnera w0 = 1et f = 0.1).De plus on suppose qu’a l’instant initial, le pendule est forme un angle de 1.5rad avec l’axevertical et que la vitesse angulaire vaut 2.Comme precedemment, resoudre l’equation differentielle et donner une representation gra-phique de la trajectoire et de l’etat du systeme dans l’espace des phases.

Exercice 18 (Attracteurs de Lorenz). On considere un fluide chauffe (par exemple, de l’airau dessus d’un radiateur). L’air chaud etant moins dense que l’air froid, il monte. En mon-tant, il se refroidit et redescend. Le mouvement du fluide s’organise autour de rouleaux ditsde convection. D’apres le modele de Lorenz, ces rouleaux sont paralleles et tournent en sensinverse l’un de l’autre.La position (x(t), y(t), z(t)) d’un element du fluide est decrite par le systeme differentiel sui-vant :

ddt

x(t) = s(y(t) − x(t))ddt

y(t) = rx(t) − y(t) − x(t)z(t)ddt

z(t) = x(t)y(t) − bz(t)

ou s, r et b dependent du volume chauffe et du mode de chauffage (on choisit s = 10, r = 28,b = 8

3).On souhaite visualiser la trajectoire d’un element. Pour ce faire :

1. Utiliser le package DEtools, qui offre plus de fonctionnalites quant a la manipulationd’equations differentielles

2. Definir le systeme d’equations differentielles (comme une suite, et non plus comme unensemble, i. e., on ne met pas les accolades) et stocker cette suite dans la variable Lorenz

3. Definir les conditions initiales (egalement comme une suite) en posant x(0) = y(0) =z(0) = 1 et stocker cette suite dans la variable CI

4. Utiliser la fonction DEplot3d pour representer la trajectoire :

DEplot3d({Lorenz},[x(t), y(t), z(t)], t=0..100, stepsize=0.01, [[CI]],

orientation=[-35,75], linecolor=t, thickness=1);

4.2. PARTIEL JANVIER 2007 21

4.2 Partiel janvier 2007

Exercice 19. Reecrire les fonctions suivantes en MAPLE c© :- abs, la valeur absolue d’un reel.- max, qui determine le maximum entre deux reels.- Heaviside, la fonction de Heaviside qui vaut 0 quand x < 0 et 1 quand x ≥ 0.

Ecrire une version simplifiee de sum qui prenne en argument une fonction f et un entier net qui retourne

∑ni=1 f(i).

Comment calculer en MAPLE c© limx→0sin x

x?

Exercice 20. On donne la procedure

fact:=proc(n::nonnegint)

local resu,y;

y:=n;

while y>0 do

resu:=resu*y;

y:=y-1;

end do;

return resu;

end proc;

Pourquoi cette procedure ne retourne-t-elle pas n! (la factorielle de n) ? (justifier)Modifier cette procedure pour que celle-ci retourne n! si n est pair et −n! si n est impair.Donner une version de la factorielle en utilisant l’instruction for.

Exercice 21. On definit les polynomes de Chebyshev par la formule suivante pour n ≥ 0 :

Tn(x) = cos(n arccos(x)).

On demontre que ces polynomes verifient la relation de recurrence suivante :

Tn(x) = 2xTn−1(x) − Tn−2(x).

En utilisant cette relation, ecrire une procedure recursive qui permette de calculer Tn(x).

Exercice 22. Definissez a l’aide des commandes maple la fonction f suivante :

f(t) =

∞∑

n=1

2(−1)n+1 sin(nt)

n

Quelle ligne de commandes permet de tracer cette fonction sur l’intervalle [−π, π].

Exercice 23. Soit les trois fonctions de trois variables :

f [1](x[1], x[2], x[3]) = x[1] + 2x[2] + 5x[3] − 1f [2](x[1], x[2], x[3]) = x[2]x[3]2 − 2f [3](x[1], x[2], x[3]) = x[3]5 − 5

22 CHAPITRE 4. QUELQUES COMPLEMENTS

On definit la matrice Jacobienne (MJ ) associee a ces trois fonctions par :

(MJ)i,j =df [i]

dx[j]

et le systeme d’equations suivant :

f [1](x, y, z) = 0f [2](x, y, z) = 0f [3](x, y, z) = 0

Le but de l’exercice est d’utiliser la methode de Newton-Raphson pour resoudre ce systemed’equations.La methode de Newton-Raphson est une methode iterative distinee a resoudre les systemesd’equations non-lineaire.

On decrit l’algorithme de la methode de Newton-Raphson comme suit :– Soient (x0, y0, z0) une donnee initiale.– Resoudre le systeme matriciel (S) d’inconnues t(Xn, Yn, Zn) :

MJ(xn, yn, zn)

Xn

Yn

Zn

= −

f [1](xn, yn, zn)f [2](xn, yn, zn)f [3](xn, yn, zn)

,

ou MJ(xn, yn, zn) designe l’evaluation de la matrice Jacobienne MJ en (xn, yn, zn)– (xn+1, yn+1, zn+1) = (xn, yn, zn) + (Xn, Yn, Zn)– arret de l’algorithme si |(xn+1, yn+1, zn+1) − (xn, yn, zn)| < ǫ,

ou ǫ designe un parametre ayant pour vocation a etre petit.

1. Definir en MAPLE c© les trois fonctions f1, f2 et f3 ;

2. Ecrire une procedure qui, prenant pour arguments ces trois fonctions, retourne la ma-trice Jacobienne MJ .

3. Ecrire une procedure qui, prenant pour arguments les trois fonctions , la matrice Jaco-bienne et un triplet (xn, yn, zn), resoud le systeme S.

4. Ecrire finalement une succession de commandes MAPLE c©, utilisant les proceduresprealablement definies, pour resoudre le systeme E par l’algorithme de la methode deNewton-Raphson.

4.3. PARTIEL SEPTEMBRE 2007 23

4.3 Partiel septembre 2007

Exercice 24. 1. Expliquez quelle est la difference entre les commandes suivantes :

(a) > P:=x^3-2*x^2+3*x;

(b) > solve(x^2-x-1,x);

2. Pourquoi les commandes suivantes renvoient-elles un message d’erreur ?

(a) > I:=matrix(3,3,[a,b,c,d,e,f,g,h,i]);

(b) > i:=matrix(3,3,[a,b,c,d,e,f,g,h,i]);

Exercice 25. Ecrire une boucle qui affiche a l’ecran la somme

k∑

n=1

1 + 2 + · · · + n

1n + 2n + · · · + nn

pour les k paires de 1 a 100

Exercice 26. On considere la procedure suivante

>blob:=proc(S)

>global T:

>local i,n,temp:

>n:=nops(S):

>temp:=S[n]:

>for i from n to 2 by -1 do

>T[i]:=S[i-1]:

>end do:

>T[1]:=temp:

>return T:

>end proc;

Quels seront les resultats des commandes suivantes :i. >T:=[1,2,3,4];

>blob(T);

ii. >T:=[1,2,3,4];

>blob(blob(T));

iii. >T:=[1,2,3,4];

>blob(T);

>blob(blob(T));

Exercice 27. Ecrire une procedure SecDeg(a, b, c) qui resout l’equation du second degre acoefficients reels ax2 + bx + c = 0 en distinguant 3 cas selon le signe du discriminant.

Exercice 28. On definit des entiers truc(k, n), ou n est un entier positif ou nul et k est unentier quelconque, par la procedure recursive suivante :

>truc:=proc(k,n)

>option remember:

>local i,n,temp:

24 CHAPITRE 4. QUELQUES COMPLEMENTS

>if (n=0) then

>return k;

>else

>truc(k,n-1)+truc(k-5,n-1);

>end if

>end proc;

Que vaut truc(2, 3).

Exercice 29.

On appelle suite recurrente d’ordre 2 toute suite definie de la maniere suivante

un = aun−1 + bun−2 , n ≥ 2u0 = x0

u1 = x1

ou a, b, x0 et x1 sont des reels donnes (b 6= 0).

1. Ecrire une boucle qui permet de stocker dans une sequence les 101 premiers termesd’une telle suite.

2. On appelle polynome caracteristique associe a la suite le polynome

X2 − aX − b.

Si ce polynome admet deux racines reelles distinctes r1 et r2 alors un est aussi determineexplicitement sous la forme

un = λrn1 + µrn

2

ou λ et µ sont deux reels a determiner a partir des donnees initiales x0 et x1 ; plusprecisement λ et µ sont solutions du systeme

{

λ +µ = x0

λr1 +µr2 = x1.

Donner une succession de commandes MAPLE qui permet :

(a) de determiner les racines du polynome caracteristique (la commande solve(eqn,var)renvoie les solutions de l’equation eqn en fonction de la variable var sous la formed’une structure de liste),

(b) de determiner λ et µ (pour assigner les solutions d’un systeme utiliser la commandeassign(S), ou S designe la solution du systeme),

(c) de verifier si la suite definie de maniere explicite est bien egale (pour les 101premiers termes) a la suite definie par recurrence.

3. Determiner a la main r1, r2, λ et µ pour la suite de Fibonacci et verifier que les deuxformes (explicite et recurrente) correspondent sur u0, u1 et u2.