Travaux Dirigés de Maple

publicité
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
Téléchargement