Université Louis Pasteur L1 Math-info/Math-Eco Travaux Dirigés de Maple 2007-2008 2 Table des matières 1 Une introduction et sa suite 1.1 Accès . . . . . . . . . . . . . 1.2 Instruction(s), exécution(s) et 1.3 Sauvegarde de fichier . . . . . 1.4 Aide . . . . . . . . . . . . . . 1.5 Quelques suites avec Maple . . . . . . 5 5 5 7 7 7 . . . . . . . . 9 9 11 11 11 12 12 13 14 . . . . . . 15 15 15 16 16 17 17 4 Polynômes 4.1 Recherche de racines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Autres exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 20 21 5 Développements limités 5.1 Dérivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Opérations sur les D. L. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Autres exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 23 23 24 6 Etude de fonctions 25 . . . . . . résultat(s) . . . . . . . . . . . . . . . . . . 2 Variables, fonctions, tableaux et 2.1 Les variables . . . . . . . . . . 2.2 Les fonctions . . . . . . . . . . 2.2.1 Fonctions et expressions 2.2.2 Procédures . . . . . . . 2.3 Les tableaux . . . . . . . . . . 2.3.1 La commande array . . 2.3.2 Les listes . . . . . . . . 2.4 Boucles et tests . . . . . . . . . 3 Graphiques 3.1 La commande plot . . . . . . 3.1.1 Des fonctions . . . . . 3.1.2 Un ensemble de points 3.1.3 Faire une animation . 3.2 Autres commandes . . . . . . 3.3 Exercices . . . . . . . . . . . . . . . . . . . . . . boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 TABLE DES MATIÈRES Chapitre 1 Une introduction et sa suite Maple est un logiciel de calcul formel : il peut traiter des données numériques (entier, réels, complexes...) de précision arbitraire et aussi des données symboliques (polynômes,expressions...). Ce logiciel est également doté de capacités graphiques. 1.1 Accès Maple est un logiciel (payant). Il est installé sur un système (linux, mac, windows). Il y a plusieurs 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 préfèrera la version 7 qui est moins lourde. On y accède en cliquant sur Application pédagogique puis Mathematiques et enfin Maple 7 (s’il y a écrit Mapple 7, c’est une erreur d’orthographe : Maple vient du Canada et veut dire érable, dont la feuille est d’ailleurs l’emblême de ce pays ; rien-à-voir avec une pomme, donc ; cliquez quand même sur l’icône, mais ne faites pas la faute d’orthographe !). 1.2 Instruction(s), exécution(s) et résultat(s) Après un certain temps, vous voyez apparaı̂tre une interface graphique avec un fichier nommé Untitled(1) et un curseur qui attend que vous tapiez votre première instruction : >2+2; N’oubliez pas le ;, car il signifie la fin de l’instruction et que le résultat sera affiché. Ne rajouter par l’invite de commande > : il est déjà écrit et correspond à un bloc d’instructions qui est exécuté dès que l’on appuie sur la touche entree. A la place du ;, on peut aussi utiliser le :. Dans ce cas l’instruction sera exécutée, mais non affichée. Cela peut être pratique si l’on ne veut pas que l’ordinateur affiche plein de résultats intermédiaires qui ne sont pas utiles. Lorsque l’on appuie sur la touche shift entree, on va à la ligne sans exécuter. Cela permet d’écrire un bloc d’instructions de manière plus claire et évite de devoir appuyer de nombreuses fois sur la touche entree pour arriver au résultat final. Le résultat de la dernière instruction est donné par % et celui de l’avant-dernier résultat est donné par %% (on peut aussi avoir le résultat de l’avant-avant-dernière opération par %%%). Pour bien comprendre comment les instructions sont exécutées, écrivez : 5 6 CHAPITRE 1. UNE INTRODUCTION ET SA SUITE >1:1: >%+%%; Vous devez voir affiché 2. Revenez au deuxième bloc et réappuyez sur entree. 3 est alors affiché. Recommencez un certain nombre de fois. Vous êtes en train d’afficher les nombres successifs de la suite de Fibonacci définie par u1 = 1, u2 = 1, un+1 = un + un−1 , n = 2, . . . Revenez maintenant au premier bloc, appuyez sur entree, puis allez au deuxième bloc et appuyez sur entree. Quel est le résultat affiché, pourquoi ? Pour éviter d’avoir à répétér les mêmes instructions, on peut utiliser une boucle >1:1:for i to 10 do %+%%;od; i est une variable qui va de 1 (valeur par défaut) à 10 ; tout ce qui est écrit entre le do et le od va donc être exécuté 10 fois. A la sortie de la boucle (après le od), la variable i vaut 11. C’est le ; après le od qui dicte s’il y a écriture ou non. Faites plusieurs essais, en changeant les ; en : et vice-versa, pour bien comprendre. Pour afficher seulement le 100 ième terme de la suite de Fibonacci, on peut donc écrire >1:1:for i to 98 do %+%%;od:%; Une des particularités de Maple est que ce logiciel utilise des valeurs exactes et non approchées. Ainsi si l’on tape >3/2;sqrt(2);Pi; √ on n’obtient guère d’informations sur la valeur numérique de 3/2, 2 ou P i (pensez bien à mettre une majuscule). Pour forcer à évaluer numériquement, on peut remplacer les entiers utilisés par des réels. Cela se fait en écrivant 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 défaut, MAPLE utilise 10 chiffres significatifs ; on peut changer cette valeur en écrivant par exemple >Digits:=20: Cela veut dire que l’on a affecté 20 à Digits, la variable interne (i.e. définie dans Maple, comme Pi), et cela se traduit par le fait que les calculs vont se faire avec une précision de 20 chiffres significatifs. Nous voyons donc que Maple nous permet de faire des calculs avec une précision arbitraire, ce qui n’est pas le cas pour la plupart des langages de programmation tels que C, Fortran, Scilab ou Matlab. √ , Exercice 1. Le nombre d’or est donné par 1+2 5 . Il est aussi donné comme la limite de uun+1 n où (un ) est la suite de Fibonacci précédement décrite. Ecrivez des instructions pour observer ce phénomène numériquement. 1.3. SAUVEGARDE DE FICHIER 1.3 7 Sauvegarde de fichier Vous avez tapé quelques lignes de Maple et vous voulez garder la trace de ce que vous avez fait. Vous voulez également rajouter des commentaires, i. e. du texte non exécuté par Maple. Un commentaire s’écrit avec #. Ainsi toute la fin de ligne après ce symbole ne sera plus lue par Maple. Votre feuille Maple peut se présenter ainsi de la manière 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 version de Maple utilisée (pour Maple7, c’est .mws). Utilisez toujours la meme version pour un meme fichier ; ainsi si on passe de la version 7 à la version 9.5, il est possible que le fichier ne soit plus lisible en version 7 par la suite. Sous linux/mac, il est aussi possible d’utiliser Maple sans mode graphique : les commandes Maple sont enregistrées dans un fichier (par exemple tp1.maple) et exécutées dans un terminal par maple -q tp1.maple Un intérêt est que l’exécution est plus rapide, car en mode graphique, l’exécution peut être très ralentie, notamment lors de l’ouverture de la session Maple. Par contre, on perd l’interactivité qui peut être retrouvée en lançant maple et non xmaple depuis un terminal. Dans ce cas néanmoins, on ne peut pas faire de sauvegardes. Enfin, en mode non graphique, il est plus difficile d’obtenir des figures (qui sont affichées avec des caractères dans le terminal). On peut parer à cet inconvénient en créant par exemple des fichiers jpg. N’oubliez pas de sauvegarder régulièrement votre fichier. 1.4 Aide Le logiciel Maple peut être vu comme une grosse calculatrice et offre de nombreuses possibilités. N’hésitez pas à consulter l’aide (en anglais : cela ne doit pas vous rebuter !). On peut obtenir de l’aide sur un mot, en tapant ? suivi du mot (tout attaché et sans ;). Par exemple, pour tracer une fonction ?plot 1.5 Quelques suites avec Maple Exercice 2. Une grenouille assoifée cherche une mare pour se désalterer. Son premier saut la porte 1 mètre plus loin. Comme elle se fatigue à chaque saut, le suivant ne fait que 90% de la longueur précédente. Sachant que la mare la plus proche est à 9 mètres de son point de départ, arrivera-t-elle à l’atteindre ? si oui, en combien de sauts ? Exercice 3. La fonction rand() renvoie un entier positif à 12 chiffres (au plus), choisi de manière aléatoire. Pour N assez grand, calculer la moyenne obtenue de N appels de cette fonction. Que remarque-t-on ? 8 CHAPITRE 1. UNE INTRODUCTION ET SA SUITE Exercice 4. Les polynômes de Chebyshev sont définis par la formule de récurrence 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 algébriques. Ainsi, par exemple > simplify(2*x*(2*x^2-1)-x); donne pour résultat 4x3 − 3x. En utilisant la fonction simplify, calculer alors T9 . Vérifier le résultat à l’aide de la commande >orthopoly[T](9,x); P Exercice 5. Calculer N k=0 exp(1). 1 k! , pour N = 5, 10, 20 et comparer avec une valeur approchée de Exercice 6. La formule de Machin fut découverte en 1706 et relie le nombre π à la fonction arctangente : π 1 1 = 4 arctan − arctan . 4 5 239 P k x2k+1 D’autre part, on a arctan(x) = ∞ k=0 (−1) 2k+1 . En déduire un algorithme pour calculer une valeur approchée de π, en n’utilisant que des opérations élémentaires (+, −, ∗, /), et comparer avec une valeur numérique de P i. On pourra tester différentes valeurs de la variable Digits. Chapitre 2 Variables, fonctions, tableaux et boucles Dans le chapitre précédent, nous avons vu que Maple nous permet de faire des calculs numériques de précision arbitraire, en réglant la variable Digits convenablement. Nous avons aussi aperçu que les calculs peuvent être faits sur des objets plus formels tels que les polynômes. Pour l’instant les calculs ont été faits dans la foulée grâce à l’utilisation des résultats précédents obtenus par les symboles %,%% et %%%. Cela a déjà permis de faire de nombreux calculs sur les suites, mais reste néanmoins limité, car pour faire un calcul on peut avoir besoin d’autres valeurs que celles que l’on vient juste d’utiliser ! Nous allons maintenant donc introduire d’autres notions qui vont permettre de faire des calculs plus évolués : les variables, les fonctions, les tableaux et les boucles. 2.1 Les variables Nous avons déjà rencontré quelques variables : Pi,Digits, l’indice de boucle i. Contrairement à d’autres langages de programmation, comme le C ou le Fortran, les variables ne sont pas déclarées à l’avance et l’utilisateur n’a pas besoin de préciser le type (réel,entier,caractère, pointeur...). Il existe des variables prédéfinies : >Pi,Digits,I; I est le nombre complexe i (on a i2 = −1). Certaines de ces variables peuvent être modifiées (comme Digits) et d’autres non (comme I et Pi). Les autres variables sont définies à partir du moment où elles sont affectées. L’affectation d’une variable se fait par l’instruction := (comme nous l’avons déjà vu pour la variable Digits). >a:=1:a; La valeur 1 est mise dans la variable a. Il peut parfois être intéressant de libérer une variable, c’est-à-dire d’enlever la valeur qu’elle contenait. Cela se fait à l’aide de la fonction unassign. >a:=1:a;unassign(’a’):a; Ainsi, dans cet exemple, a redevient une variable formelle (on pourrait ainsi définir par exemple des polynômes en fonction de a, comme cela avait été fait pour les polynômes de 9 10 CHAPITRE 2. VARIABLES, FONCTIONS, TABLEAUX ET BOUCLES Chebychev). Pour réinitialiser toutes les variables et tout ce qui a été fait auparavant, on utilise la commande >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 été nécessaire d’utiliser ici une variable temporaire w. Lorsque l’on cherche à résoudre un problème, celui-ci va généralement dépendre de quelques paramètres (paramètres physiques, de simulation,. . .), qu’il est important de bien identifier. Il est conseillé de définir ces variables paramètres une fois pour toutes au début, pour la clarté et afin de pouvoir les modifier facilement. Exemple 1. On souhaite comparer l’erreur obtenue pour le calcul de Z π Z 1 sin(x)dx. exp(x)dx, 0 0 par la méthode des rectangles et la méthode des trapèzes. L’intégrale exacte pour l’exponentielle est donnée par >int(exp(x),x=0..1):evalf(%); La méthode des rectangles d’une fonction f sur un intervalle [a, b] est donnée par la formule N −1 b−a b−a X ), f (a + k N N k=0 tandis que la méthode des trapèzes est donnée par N −1 X b−a b−a ) . f (a) + f (b) + 2 f (a + k 2N N k=1 On peut écrire 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/décommentant la deuxième ligne (i.e. en laissant ou en enlevant le premier # de la deuxième ligne), on peut passer de la première à la deuxième intégrale. 2.2. LES FONCTIONS 2.2 2.2.1 11 Les fonctions Fonctions et expressions Supposons que l’on veuille définir la fonction f (x) = x2 + 1, afin de calculer par exemple son intégrale, comme dans l’exemple précédent. Pour cela, il y a deux manières de faire : soit on écrit >f:=x->x^2+1: et dans ce cas, pour évaluer la fonction en un point, par exemple pour x = 0.1, on écrit >f(0.1): soit, on considère l’expression >f:=x^2+1: et dans ce cas, pour évaluer l’expression en x = 0.1, on écrit >subs(x=0.1,f); Remarquons que l’on peut passer d’une forme à 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 changer la définition (on aurait pu écrire par exemple f :=y->y^ 2 ;). Ceci n’est pas vrai pour une expression où il faut faire attention que la variable utilisée soit libre (on peut toujours libérer une variable avec unassign, comme nous l’avons déjà vu). En général, on préfèrera les expressions qui sont des objets plus simples. Exercice 7. Modifier l’Exemple 1, pour pouvoir traiter le calcul de Z 1 Z 1 1 exp(−x2 )dx. dx, 2 1 + x −1 −1 On traitera le cas où l’on utilise des fonctions et le cas où l’on utilise des expressions. 2.2.2 Procédures Lorsque l’on veut faire plusieurs calculs avec des paramètres différents, il peut être intéressant d’englober le calcul dans une procédure. Cet objet se présente de la manière 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 définit la fonction ; toto est le nom, f,N sont des variables paramètres qui sont utilisées dans la procédure, i et tmp sont des variables locales c’est-à-dire qu’elles n’existent qu’ à l’intérieur de la procédure. Le dernier résultat avant la fin de la procédure (matérialisé par end proc :) est ce qui sera renvoyé par la procédure lors de l’appel. Pour le deuxième >, on appelle la fonction avec différents paramètres. Exercice 8. Ecrire une procédure rect(f,a,b,N) et trap(f,a,b,N) qui calcule l’intégrale d’une fonction f sur un intervalle [a, b], avec respectivement la méthode des rectangles et des trapèzes. La tester pour différents paramètres. 2.3 Les tableaux On a vu que pour l’on pouvait calculer les termes d’une suite à l’aide de variables. Considérons maintenant la suite définie de la manière suivante : 1 c1 = , 7 k−1 k−1 X 1 X 5k + 9 jcj ck−j + − cj , ck = 6 3 j=1 j=1 k ≥ 2. Nous voyons que pour calculer le kième terme ck , nous avons besoin de tous les termes précédents ck−1 , . . . , c1 . Nous avons donc besoin de stocker ces valeurs une fois qu’elles sont calculées. 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 réservé des variables c1 , . . . , cN que l’on pourra affecter par la suite. On peut écrire ainsi : c[6]:=1: Notons que les variables peuvent être de n’importe quel type ; en particulier, l’espace occupé par les variables non encore affectées n’est pas alloué, mais sera alloué lors de l’affectation. Remarque 1. Lorsque l’on connait la taille des objects, on peut parfois réserver à l’avance la place mémoire. Cela peut augmenter les performances pour le temps d’accès au tableau. Néanmoins, on ne connait pas toujours la place occupée par les variables (par exemple, certains entiers peuvent être très grands et nécessiteront donc beaucoup de stockage). Le lecteur intéressé pourra consulter l’aide sur la commande rtable. Un intérêt de la commande array est que l’on peut faire commencer et terminer les indices où l’on souhaite. Ainsi, on peut écrire >deb:=-10:fin:=15:c:=array(deb..fin): On peut également indicer les tableaux en plusieurs dimensions >N:=10:M:=12:L:=array(1..N,1..M): 2.3. LES TABLEAUX 13 L’accès se fait alors par L[i,j]. Pour calculer la suite précédente, on peut donc écrire. 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 utilisé ici la commande add qui fait la somme des éléments de la liste (on aurait aussi pu utiliser la commande for) et on a utilisé from, pour faire commencer k par 2 et non la valeur 1 par défaut. Pour afficher tous les éléments du tableau, on peut écrire >eval(L); 2.3.2 Les listes On peut aussi définir des tableaux par des listes de la manière suivante : L:=[1,4,7]; Un intérêt est la déclaration qui est plus simple. On peut aussi accéder au nombre d’éléments à l’aide de la commande nops >nops(L); La fonction nops compte le nombre d’opérandes de l’ objet L et les opérandes sont données par la fonction op. L’affichage de toute la liste se fait tout simplement en écrivant >L; Attention, dans une liste, les indices commencent par 1 : >L:=[3,6,7]:L[1];op(1,L); La valeur 3 est ici affichée, puisque c’est le premier élément de la liste, qui est aussi la première opérande de L. Notons aussi qu’une liste est une séquence entre crochets et pour générer une séquence, il est commode 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 initiales dans une liste et on souhaite avoir le résultat sous forme d’une liste. De manière générale (aussi en voyant l’exercice précédent), on préferera utiliser array pour des grands tableaux et des listes pour des petits tableaux (qui peuvent être une liste de paramètres à tester, que l’on mettra de préférence au début du programme ). Remarquons aussi la commande map qui applique une fonction à une liste (ou un array) : >N:=10:L:=[seq(k/N,k=0..N)]:f:=x->exp(x):fL:=map(f,L): 14 2.4 CHAPITRE 2. VARIABLES, FONCTIONS, TABLEAUX ET BOUCLES Boucles et tests Pour diverses raisons, on peut avoir besoin d’exécuter une instruction que sous certaines conditions. Prenons l’exemple de la recherche dichotomique. On se donne une fonction continue sur un intervalle [a, b] tel que f (a) > 0 et f (b) < 0. On sait alors qu’il existe une racine de f sur l’intervalle [a, b], c’est-à-dire un nombre x ∈ [a, b] tel que f (x) = 0. La recherche dichotomique permet alors de trouver une racine notée x dans cet intervalle. On regarde le signe de f ((a + b)/2), afin de savoir si x ∈ [a, (a + b)/2] ou si x ∈ [(a + b)/2, b]. On recommence ensuite ce procédé jusqu’à l’obtention d’un intervalle assez petit pour avoir une bonne approximation de x. On peut alors définir la procédure 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 utilisé l’instruction conditionnelle if, la boucle while. Notez la syntaxe : if (..) then .. else .. fi: while (..) do .. od: On a aussi utilisé l’instruction error suivie d’une chaı̂ne de caractères qui est le message d’erreur. Lorsque l’on est dans cette situation, le message d’erreur est renvoyé et le reste de la procédure n’est pas exécuté (on sort de la procédure). Le symbole après ”intervalle” signifie que l’on va à la ligne. On a aussi utilisé le signe logique and (et). Dans ce contexte, on pourra aussi utiliser les symboles ou, différent, égal, négation : or,<>,=,not En particulier, on ne confondra pas le symbole = de test d’égalité entre deux objets avec le symbole := qui est l’affectation d’une variable. Exercice 10. Grâce à la fonction précédente, trouver une approximation de l’unique solution de l’équation tan(x) = x, pour x ∈]π/2, 3π/2[. Modifier le code précédent pour pouvoir traiter le cas où f (a) < 0 et tester sur un exemple. Comparer avec le résultat obtenu par fsolve. Chapitre 3 Graphiques Dans le chapitre précédent, nous avons vu les principales bases pour faire un calcul. Avec certains paramètres d’entrée, on est capable de faire une suite d’instructions qui aboutit à un résultat qui se présente généralement sous la forme d’un ou plusieurs nombres ou d’une expression formelle (comme un polynôme). Pour répondre à un problème donné, le résultat peut se présenter come une suite importante de nombres qu’il est alors commode de visualiser à l’aide d’un outil graphique. Nous allons voir ici comment visualiser de résultats en 1D, 2D, 3D et comment faire des animations. Un autre point est de savoir comment stocker des informations. 3.1 3.1.1 La commande plot 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 deuxième cas, il s’agit de la forme fonction. On peut aussi visualiser plusieurs graphiques en même temps ; cela peut être extrêmement 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 utilisées pour bien distinguer les courbes, grâce aux couleurs et à la légende. Exercice 11. A l’aide de la fonction plot, localiser le 5ième zéro strictement positif de la fonction x − tan(x), à 10−2 près ; vérifier le résultat avec fsolve. Un autre moyen de dessiner deux courbes en même temps est d’utilise la fonction display qui fait partie de la libraire plots. Pour cela, on charge d’abord la librairie en écrivant >with(plots): Puis, on définit les deux graphiques de chaque courbe avant de créer la graphique qui contiendra 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 être utilisé si on connait la fonction cherchée seulement en un nombre fini de points. Pour cela, la commande est la suivante >plot([[0,0.5],[1,0.2]]); Ainsi les points (0, 0.5) et (1, 0.2) sont reliés par un segment (on peut ne tracer que les points en rajoutant l’option style=point). Exercice 12. Tracer sur un même graphique la fonction sin avec une résolution de 10 points et de 20 points, avec une légende. Comparer avec plot(sin,0..2*Pi,adaptive=false,numpoints=10); On peut également tracer des courbes paramétrées de la forme (x(t), y(t)) ; par exemple, pour dessiner le cercle de centre (0, 0) et de rayon 1, on écrit plot([cos(t),sin(t),t=0..2*Pi],scaling=constrained); L’option est mise pour que les axes soient les mêmes (sinon, on aurait une ellipse !). 3.1.3 Faire une animation Il peut être intéressant de vouloir dessiner l’évolution d’un graphique ; cela s’obtient facilement avec la fonction display, en rajoutant l’option insequence=true : on définit tout d’abord la liste d’images et on appelle ensuite la fonction display que l’on applique à cette suite. En cliquant sur l’image, on voit ensuite apparaı̂tre des boutons play, pause,. . . qui permettent de contrôler l’animation. Prenons l’exemple de la cycloide : il s’agit du mouvement d’un point fixé à un cercle qui roule sans glisser sur une droite. Regardez ce que fait ce code et cherchez à comprendre toutes les instructions. 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/épicycloides 1. Tracez un cercle de rayon 1 et de centre (0, 0). 2. Soit R 6= 0 un nombre et t ∈ [0, 2π]. On considère le cercle de rayon |R| et de centre ((R + 1) cos(t), (R + 1) sin(t)). Que représente ce cercle par rapport au cercle de la question 1, suivant le signe de R ? Que se passe-t-il lorsque t varie ? Faites une animation. 3. On considère la courbe définie 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). 17 3.2. AUTRES COMMANDES Rajoutez cette courbe à l’animation précédente. 4. Comme dans le cas de la cycloide, rajoutez le point rouge. Exercice 14. On cherche un nombre L > 0 vérifiant L= gT 2 2πd tanh , 2π L avec g = 9.81, tandis que T et d sont des paramètres qui varient. 1. Pour un jeu de paramètres T, d, trouvez L à l’aide de la fonction dicho (que l’on pourra légèrement modifier). 2. Calculez l’erreur maximale commise par rapport à la solution ”exacte” obtenue à l’aide de fsolve. 3. Pour une valeur de T donnée, faı̂tes une représentation de L en fonction de d. 4. Pour une valeur de d donnée, faı̂tes une représentation de L en fonction de T . 5. Superposez plusieurs graphiques précédents pour des valeurs de T différentes. 3.2 Autres commandes Il existe de nombreuses autres possibilités pour faire des graphiques : implicitplot,plot3d. Il peut être utile également de sauvegarder des informations dans un fichier pour pouvoir les utiliser plus tard, soit avec le même logiciel ou même 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 être utiles si l’on veut par exemple utiliser Maple sans mode graphique et avoir quand même la possibilité de visionner des graphiques (sans animations néanmoins). interface(plotdevice=ps,plotoutput=‘toto.ps‘); with(plots): plotsetup(ps); plot(sin,x=0..2*Pi); quitplotsetup(): system("xv toto.ps&"): la dernière ligne permet de visualiser le fichier ps avec le logiciel xv (qui doit être installé). 3.3 Exercices Exercice 15. Polynômes de Lagrange Etant donnés un intervalle I = [a, b], une fonction f définie sur I et un ensemble de k + 1 points {xn }n=0...k avec xn ∈ I ∀n = 0 . . . k ; on définit l’interpolée de Lagrange de f sur l’ensemble {xn }n=0...k comme l’unique fonction polynômiale P de degré inférieur ou égal à k vérifiant P (xn ) = f (xn ) ∀n = 0 . . . k. Le programme suivant calcule l’interpolation de Lagrange, grâce à 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 représentent h, le premier et le deuxième graphique ? Essayer avec d’autres paramètres. Modifier le programme pour pouvoir faire une animation suivant le nombre de points de discrétisation. Exercice 16. : La marche de l’ivrogne Supposons qu’un ivrogne marche dans une rue droite et fait un pas à chaque seconde : tantôt vers la gauche et tantôt vers la droite de manière aléatoire. On va aussi supposer qu’il peut rester immobile. Les 100 premiers pas de l’ivrogne peuvent se modéliser 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 nécessaire. Modifions le programme précédent afin de conserver en mémoire 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); Modéliser une marche aléatoire dans le plan. On stockera les positions successives de l’ivrogne pour en tracer un graphique. Quelle est alors la distance parcourue par l’ivrogne ? Quelle distance le sépare de son point d’origine ? Chapitre 4 Polynômes Les polynômes sont des objets très utiles et for bien maniables avec un logiciel de calcul formel. Rappelons qu’un polynôme s’écrit sous la forme P (x) = n X ak xk . k=0 En Maple on peut ainsi écrire n:=10:a:=array(0..n):P:=add(a[k]*x**k,k=0..n): L’accès au coefficient en xk se fait par coeff(P,x,k). Pour rassembler les termes suivant la variable x (si le polynôme dépend aussi d’autres variables), on peut utiliser collect(P,x). ENfin, on a aussi accès au degré d’un polynôme par la commande degree(P,x). P Exercice 17. On rappelle la formule du binôme de Newton (x + y)n = nk=0 Cnk xk y n−k . 3 . 1.En utilisant la fonction coeff, en déduire la valeur de C10 2. Vérifier en comparant le résultat avec binomial(10,3) ; 3. Ecrire une procédure qui à une expression f en x et a un entier n associe le polynôme de Bernstein défini par n X B(f )(x) = Cnk f (k/n)xk (1 − x)n−k . k=0 4. Tester la procédure précédente avec la fonction sin(2πx) et faire une animation pour différentes valeurs de n. 4.1 Recherche de racines On sait que tout polynôme peut se factoriser dans C. Néanmoins, il n’est pas toujours possible d’avoir une expression avec des formules et il peut alors être préférable de chercher une approximation numérique. La commande solve(P) permet de trouver les racines de P de manière algébrique ; elle ne fournit pas de renseignements si on n’a pas de solution avec des formules. On préferera alors utiliser la commande fsolve(P) qui fournit une approximation numérique ou alors evalf(fsolve(P)). Exercice 18. On considère le polynôme P (x) = x5 + x − 1. Trouver ses racines. Essayer ensuite avec le polynôme Q(x) = x5 + x13 − 1. 19 20 CHAPITRE 4. POLYNÔMES Exercice 19. On définit les polynômes de Chebyshev par la relation Pn (cos(θ)) = cos(nθ). 1. Afficher les 10 premiers polynômes de Chebyshev. On pourra utiliser la commande expand(cos(nx)). 2. Quelles sont les racines de Pn ? 3. Calculer les racines de Pn , n ≤ 13 avec Maple, en utilisant soit la valeur exacte, si c’est possible, soit une valeur approchée. 4. Vérifier si les racines sont bien calculées. On pourra utiliser la commande sort qui range une liste dans l’ordre. Exercice 20. Etant donné un polynôme P = a0 + a1 X + · · · + an X n , on définit son polynôme symétrique par Q = an + an−1 X + · · · + a0 X n . 1. Définir Q à partir de P . 2. En déduire les racines du polynôme symétrique de Chebyshev pour n = 5. Exercice 21. Ellipse de Steiner Soit P = 2x3 − 3x2 − x − 3. 1. Trouver les racines de P et de P ′ . On note A, B et C les images des racines de P et E et F les racines de P ′ . 2. Montrer qu’il existe une ellipse passant par les milieux des côtés du triangle ABC, tangente aux trois côtés de ce triangle et dont les foyers sont E et F (on pourra utiliser solve, subs, op, simplify, Im, Re, diff). 3. Faire un dessin (on pourra utiliser polygonplot, implicitplot et display). 4. Essayer avec un autre polynôme. 4.2 Interpolation Les polynômes sont souvent utilisées pour faire des interpolations de données. On s’intéresse ici à l’interpolation de Lagrange. Soient a < b des réels et N un entier strictement positif. Etant donné une fonction f définie en N + 1 points xk = a + k(b − a)/N, k = 0, . . . , N (on note fk = f (xk ), k = 0, . . . , N ), il existe un unique polynôme PN de degré inférieur ou égal à N tel que PN (xi ) = f (xi ), i = 0, . . . , N. On peut construire le polynôme sous la forme de Newton de la manière suivante : P0 = f0 , Pk = Pk−1 + f [x0 , . . . , xk ] k−1 Y j=0 (x − xj ), où l’on a utilisé les différences divisiées définies par f [x0 , . . . , xk ] = 1, . . . , N et f [x0 ] = f0 . k = 1, . . . , N, f [x1 ,...,xk ]−f [x0 ,...,xk−1 ] , xk −x0 k= Exercice 22. 1. Ecrire une procédure qui étant données deux listes L = [x0 , . . . , xN ] et f L = [f0 , . . . , fN ] renvoie le polynôme d’interpolation de Lagrange PN . 2. Pour vérifier, comparer avec la fonction interp. On prendra f = exp(−(x − 0.5)2 ), a = 0, b = 1 et N = 30. 3. Une autre manière de vérifier le résultat est de vérifier que le polynôme trouvé vérifie bien les conditions d’interpolation. Faire la vérification pour une liste formelle à 3 éléments. 21 4.3. AUTRES EXERCICES 4.3 Autres exercices Exercice 23. On veut trouver les racines du polynôme P défini par P (x) = 1− x2 + 3x4 − 5x7 et vérifier que pour chaque point trouvé xi , on a P (xi ) = 0, à une erreur d’arrondi près. Exercice 24. Calcul de dérivées et de racines 1. Soit f la fonction définie par f (x) = exp(−x2 ). Calculer f1 , f2 et f3 , les 3 premières dérivées de f . 2. On pose hn = exp(x2 )fn , pour n = 1, 2, 3. Calculer h1 , h2 et h3 . 3. Calculer les racines des polynômes h1 , h2 et h3 . 4. Calculer l’intégrale de h3 − h2 sur l’intervalle [−1, 1]. (on pourra utiliser la fonction int). Exercice 25. Un polynôme de deux variables On définit le polynôme P par P (x) = x4 + (3 − 4a)x3 + (−9a + 6a2 + 2)x2 + (−4a3 − 4a + 9a2 )x + 2a2 − 3a3 + a4 1. Factoriser P et calculer ses racines. 2. Développer P (x), en donnant le résultat suivant les puissances décroissantes de a (on pourra utiliser les fonctions expand et collect). √ 3. On suppose pour cette question que a = −1. Calculer l’image de 1 + 3 par P . 4. Calculer l’intégrale de P entre −1 et 1 en fonction de a. n 1 x d e dxn (e−x xn ). Exercice 26. Polynômes de Laguerre On définit Ln (x) = n! 1. Calculer Li , i = 0,R . . . , 10. ∞ 2. Vérifier que l’on a 0 e−x Li (x)Lj (x)dx = 0, i 6= j = 0, . . . , 10. 3. Vérifier que les zéros de Li+1 sont compris entre les zéros de Li pour i = 0, . . . , 9. Exercice 27. On considère une fonction polynomiale P de degré inférieur ou égal à 3 : P (x) = a + bx + cx2 + dx3 , R1 R1 et on cherche à trouver a, b, c, d de telle sorte que I0 = 0 P (x)dx = 1, I1 = 0 xP (x)dx = 0, R1 R1 I2 = 0 x2 P (x)dx = 0 et I3 = 0 x3 P (x)dx = 0. 1. Donner l’instruction Maple pour définir P . 2. Donner les instructions Maple pour calculer I0 , I1 , I2 et I3 . 3. Donner les instructions Maple pour trouver a, b, c, d en utilisant la fonction solve (on admettra qu’il existe une unique solution à ce problème). 4. Trouver alors le polynôme P en utilisant subs et le résultat précédent. Aide : pour les questions 3 et 4, voici un exemple d’utilisation de la fonction solve : > solve({x+y=2,x-y=0},{x,y}); {y = 1, x = 1} Exercice 28. On cherche les valeurs de (a, b, c) telles que pour tout t ∈ R, on ait : (a2 − 1)t2 + b(1 − tac − bt2 ) = a(1 − ct2 ) + 1 − 2c2 t (1) 1. Comment affecter en Maple cette égalité à la variable eg ? 2. Que vaut nops(eg) ? 3. En utilisant op, construire une expression P faisant intervenir t, a, b, c, qui soit un polynôme en l’indéterminée t tel que (1) ⇔ P (t) = 0. 4. Quel seront les résultats des commandes suivantes : 22 CHAPITRE 4. POLYNÔMES collect(P,t);coeff(P,t,2);coeff(P,t,1);coeff(P,t,0); 5. Comme P doit avoir une infinité de racines, P est forcément le polynôme nul. Quel est alors le système à résoudre ? Comment le résoudre en Maple ? On pourra utiliser la commande solve. Exercice 29. Résolution des équations du 3ième degré. On considère l’équation z 3 + az 2 + bz + c = 0. 1. Faire le changement de variable z = x − a/3 et trouver p et q en fonction de a, b et c tels que x3 + px + q = 0. 2. La méthode de Cardan consiste alors à poser x = u + v. Vérifier que si u3 + v 3 = −q, u3 v 3 = −p3 /27, alors on a x3 + px + q = 0. 3. Trouver une équation du second degré dont X1 = u3 et X2 = v 3 sont solutions. 4. Résoudre l’équation précédente suivant le signe de ∆ = q 2 + 4p/27. it/3 Etant donné un nombre complexe z = ρeit , avec ρ > 0 et 0 ≤ t < 2π, on note z 1/3 = ρ1/3 √e . 3 2 2 Les racines de x + px + q = 0 sont alors u + v, ju + j v et j + jv, avec j = (−1 + i 3)/2, 1/3 1/3 u = X1 et v = X2 . On souhaite maintenant tester ces formules avec Maple. 5. On prend a = 3, b = 1 et c = 4. Calculer p et q. 6. Définir A et B solutions de l’équation du second degré définie dans 3.. On fera un test suivant la valeur de ∆. 7. Définir u et v. 8. Calculer alors les racines de R(z) = z 3 + az 2 + bz + c et vérifier que ce sont bien des racines. 9. Comparer avec la fonction solve. 10. Tester avec d’autres paramètres a, b et c. Chapitre 5 Développements limités On rappelle que si f est une fonction suffisamment régulière au voisinage de 0 on a f (x) = n X f (k) (0) k=0 5.1 k! xk + o(xn ). Dérivation La dérivation de fonctions se fait à l’aide de la commande diff. P:=x^3+1:diff(P,x); Exercice 30. Ecrire une procédure qui a une expression et à un entier n renvoie le développement limité jusqu’à l’ordre n en 0 de l’expression. Exercice 31. Retrouver les développements limités de sin(x), cos(x), sinh(x), cosh(x), exp(x) au voisinage de 0. Exercice 32. Calculer la limite de (tan(sin(x)) − sin(tan(x)))/x7 , lorsque x tend vers 0. 5.2 Opérations sur les D. L. L’utiliser de la formule de Taylor pour les D.L est coûteuse. Il est souvent préférable de faire des opérations sur les D.L. Exercice 33. Ecrire une procédure rond(f,g,N) qui à partir du D.L de f à l’ordre N et du D.L de g à l’ordre N en 0 et tels que g(0) = 0 donne le D.L de f og à l’ordre N . Exercice 34. Calculer à nouveau la limite de (tan(sin(x)) − sin(tan(x)))/x7 On définit f0 (x) = tan(x) et g0 (x) = sin(x) et fi+1 (x) = fi (gi (x)), gi+1 (x) = gi (fi (x)), i = 0, . . . , 4. Calculer la limite de (f5 (x) − g5 (x))/x15 lorsque x tend vers 0. Comparer le résultat avec l’utilisation de taylor(f5-g5,x,16) et de limit((f5-g5)/x**15,x=0). 23 24 5.3 CHAPITRE 5. DÉVELOPPEMENTS LIMITÉS Autres exercices Exercice 35. Calculer le développement limité de la fonction à l’ordre n au voisinage de a : 1 (i) f(x) = (1 + x)( x ) , n = 4, a = 0 (ii) g(x) = cos(x)3 , n = 8, a = 0 (iii) k(x) = (1 + x)β , n = 6, a = 0 Exercice 36. Trouver un équivalent de la fonction au voisinage de a et calculer sa limite en a : 1 1 − 2, a = 0 (i) sin(x)2 x ex − esin(x) (ii) ,a=0 x2 Exercice 37. Trouver le développement limité à l’ordre 6 de la fonction arcsin en 0 - directement, - à partir de celui de sin et - à partir de la dérivée de arcsin. Exercice 38. Calculer les développements limités de la fonction cos à l’ordre 6 au voisinage des points i) a = 0, ii) a = 1, iii) a = π. Faire un tracé simultané de cos et de ses développements limités. Qu’observez-vous ? Exercice 39. Trouver un polynôme P (n) tel que (n6 + 3n2 )1/6 − (P (n))1/3 soit équivalent à 1 au voisinage de n = ∞. n3 Chapitre 6 Etude de fonctions Exercice 40. Raccord C 3 1. Trouver une fonction qui vaut 1 sur l’intervalle [0, 1], qui vaut 0 sur l’intervalle [2, 3] et qui de classe C 3 sur l’intervalle [0, 3]. 2. Faire une représentation graphique de cette fonction et vérifier graphiquement que les raccords sont bien C 3 . Exercice 41. Fonction d’échelle Soient a, b, c des réels. On cherche à construire une fonction φ qui vérifie φ(x) = aφ(2x − 1) + bφ(2x) + cφ(2x + 1), avec φ(0) = 1 et telle qu’il existe M > 0 tel que pour |x| > M , on a φ(x) = 0. On suppose en outre que φ(−1) = φ(1) = 0. 25