Mathématiques
Document disponible au format: PDF, Postscript, DVI, Text, LaTeX.
1 TP: Prise en main (2H)
L'objectif de ce TP est de reprendre des exercices précédemment faits
en TD, afin de découvrir ce qu'un système de calcul formel est
capable, ou pas, de faire.
Exercice 1
-
Calculer 1+1, 2*2, 230, 10!, 5/9.
Que constate-t'on?
- Calculer √2, puis (√2)2 (indication: consulter
l'aide avec ?sqrt). En calculer des approximations numériques
(cf. ?float). Faire varier la précision en jouant avec
DIGITS := 200. Puis réinitialiser à 10 chiffres de précision.
- Calculer sin(3.14), sin(π), sin(π/3) (cf. ?sin,
?PI). Que constate-t'on?
Exercice 2
-
Essayer la commande:
(f+g) ( x + y ). Comparer avec
(f+g) * (x+y). Conclusion?
- Développer (x+3)(x−2) (cf. ?
expand), et stocker le
résultat dans une variable p (cf. ?:=).
- Refactoriser le résultat (cf. ?
factor).
- Utiliser solve pour retrouver les racines de p.
- Factoriser x2−2 et chercher ses racines.
- Factoriser p := x7−3x2+x+1 et chercher ses racines.
Interpréter.
- Évaluer p en x=0, x=2, x=π, x=y2 (cf. ?
|).
- Tracer le graphe de la fonction x↦ p(x) de R dans
R (cf. ?
plot::Function2d). En utilisant ce graphe et
la fonctionnalité de zoom, donner le nombre de racines de p.
- Calculer numériquement les racines de p (cf. ?
solve,
?
float).
Exercice 3
-
Calculer arccos(1), arccos(−1), arccos(√2/2),
arccos(−x).
- Calculer la dérivée de arccos, puis en tracer le graphe
(cf. ?
diff, ?
plot::Function2d)
- Calculer la dérivée par rapport à x des expressions suivantes:
-
3sin(x)+x5 − 1/(1+x2+3x5)
- f(x) + g(x)
- f(x) g(x)
- f(x)/g(x)
- (f∘ g) (x) (cf. ?@)
- Calculer symboliquement puis numériquement les intégrales
suivantes (cf. ?
int):
-
∫x=0π/2 cos(x)/1+sin(x) dx.
- ∫x=01 dx/ex2 + 1.
Que constate-t'on?
- Calculer les primitives des expressions suivantes, puis les
redériver pour vérifier le résultat:
-
x2.
- 1/4 ex + e−x + 4.
- 1/ex2 + 1.
Que constate-t'on?
Exercice 4
Résoudre en fonction de m le système d'équations:
|
⎧
⎪
⎨
⎪
⎩ |
−mx |
−3y |
−z |
|
= m |
|
(m+1)y |
+ (m+1)z |
|
=0 |
|
3y |
+ (m+1)z |
|
= 0 |
|
6y |
+ 2z |
+ mt |
= m+1 |
|
|
.
|
2 TP Algèbre linéaire 2 (1H30)
L'objectif de ce TP est de voir quelques applications de la
diagonalisation de matrices, en particulier pour l'étude des
suites récurrentes. Comme d'habitude, c'est à vous de déterminer, au
cas par cas, quels calculs il vaut mieux faire à la machine ou à la
main. Les exercices sont de difficulté croissante.
Exercice 5
La première application concerne la modélisation de la dynamique des
populations, telle qu'étudiée en écologie. Le cas d'école que nous
allons considérer n'est pas nouveau, puisqu'il a été proposé en 1202
par Leonardo Pisano comme problème récréatif dans un de ses
ouvrages, le Liber Abaci.
Possédant initialement un couple de lapins, combien de couples
obtient-on en douze mois si chaque couple engendre tous les mois
un nouveau couple à compter du second mois de son existence ?
Nous allons considérer un modèle très simple, dans lequel on notera
fn le nombre nombre de paires de lapins en fin de n-ième mois,
dans une population idéale telle que:
-
le premier mois, il y a juste une paire de lapereaux,
- les lapereaux ne sont pubères qu'à partir du deuxième mois,
- chaque mois, toute paire susceptible de procréer engendre
effectivement une nouvelle paire de lapereaux,
- les lapins ne meurent jamais.
-
Donner la relation de récurrence satisfaite par la suite fn.
- Donner le surnom de Leonardo Pisano.
- Nous souhaitons maintenant calculer fn pour n
relativement grand. Pour cela, nous allons mettre le problème sous
forme matricielle en notant pour n>=2,
Fn:=().
-
Donner F2, et déterminer une matrice M telle que
Fn+1=M Fn pour n≥ 2.
- À l'aide d'une boucle
for, calculer f1026 et
f65636.
- Calculer F1026=M1024 F2 et F65638=M65636 F2.
À votre avis, comment s'y prend la machine?
- Pouvez-vous l'égaler en utilisant uniquement des
produits de matrices?
- Évaluer le nombre d'opérations arithmétiques (+, * sur les
coefficients des matrices) nécessaires pour calculer M2n.
- Utiliser la commande
time pour comparer le temps de
calcul de M220 et de float(M)220. Interpréter.
- Calculer numériquement f220, f223,
f224. Interpréter.
- Nous cherchons maintenant donner une formule exacte pour
fn. Pour cela, on va diagonaliser la matrice M.
-
Vérifier que M2−M−I2=0. Comparer avec le résultat de
linalg::minimalPolynomial(M,z).
- Soit v un vecteur non nul et λ un réel tels que
Mv=λ v. Montrer que λ2−λ−1=0. En déduire
les deux valeurs λ1<λ2 de λ possibles
(cf.
solve; expérimenter avec
op pour
extraire les valeurs du résultat de
solve). Donner
leurs valeurs numériques (cf.
float).
- Chercher deux vecteurs non nuls v1 et v2 tels que
Mv1=λ1 v1 et Mv2=λ2 v2. On pourra utiliser
la commande
linalg::nullspace, en remarquant que
l'équation Mv=λ v est équivalente à (M−λ I2) v =
0.
- λ1 et λ2 sont les valeurs propres de
M, et v1 et v2 des vecteurs propres correspondants.
comparer avec le résultat des commandes:
linalg::eigenvalues(M) et
linalg::eigenvectors(M).
- Soit B la base canonique de R2, et B' la base (v1,
v2). Donner la matrice de passage P de B à B'. Vérifier
que P est inversible (cf.
linalg::det), puis
calculer la matrice de passage de B' à B.
- Calculer au moyen des formules usuelles de changement de
base la matrice M' dans B' de l'application qui a pour
matrice M dans la base B (attention: le symbole ' dénote la
dérivation; utiliser par exemple M1 pour nommer M').
Essayer les commandes
expand,
simplify,
radsimp pour simplifier le résultat. Interpréter.
- Calculer M'n. En déduire Mn, puis une formule close pour
fn.
- Utiliser cette formule pour calculer de manière exacte puis
numériquement quelques valeurs de fn pour n grand (voir
?radsimp).
Exercice 6
La deuxième application concerne le test automatique de programmes
informatiques. À quelques simplifications près, le modèle que l'on
va étudier est utilisé dans le monde industriel (voir
http://www.lri.fr/~gouraud/recherche.fr.html), et les
questions que l'on va rencontrer sont significatives des problèmes
rencontrés dans le monde du test.
Dans ce modèle, un programme est décrit par un graphe de contrôle.
Par exemple, le programme suivant:
decompositionBinaire :=
proc(nombre)
begin
resultat := [];
while nombre>0 do
if nombre mod 2 = 1 then
resultat := append(resultat,1);
nombre := nombre-1
else
resultat := append(resultat,0)
end_if;
nombre := nombre div 2;
end_while;
resultat;
end_proc:
sera décrit par le graphe suivant:
Une trace d'exécution est alors une suite de sommets consécutifs
allant du sommet a au sommet h dans ce diagramme. Par exemple, en
appliquant ce programme au nombre 5, on obtient la trace
(a,b,c,d,e,g,b,c,f,g,b,c,d,e,g,b,h). Vous pouvez le vérifier à la
main, ou en utilisant la commande
debug(decompositionBinaire(5)). La longueur d'une trace est
le nombre de sommets parcourus, soit 17 dans l'exemple précédent.
Le principe de cette méthode de test est d'étudier les traces
d'exécutions possibles, et de déterminer si elles sont correctes.
Ici, notre objectif est simplement de compter le nombre hk de
traces d'exécutions de longueur n, afin de déterminer jusqu'à
quelle longueur on peut envisager de faire du test exhaustif. En
particulier, on ne se préoccupera pas ici des valeurs des variables
du programme. Formellement, le problème est de compter les chemins
dans un graphe orienté.
-
Lister toutes les traces d'exécutions de longueur inférieure à
17.
- On considère le vecteur
Vn:= |
⎛
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎝ |
|
⎞
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎠ |
|
(1) |
où cn compte le nombre de traces d'exécutions du sommet a au
sommet c de longueur n, et similairement pour an,...,hn
-
Calculer les vecteurs V0, V1, V2, V3, V4.
- Donner une formule de récurrence permettant d'exprimer gn
en fonction de an−1,...,hn−1. Exprimer de même les
autres coordonnées de Vn.
- Déterminer une matrice M telle que Vn=MVn−1.
- Calculer le nombre de traces d'exécutions de longueur
1024. Évaluer très grossièrement le temps nécessaire pour
tester toutes ces traces, sur un ordinateur à 2GHz (on admettra
que le traitement de chaque sommet prend environ 100 cycles
d'horloge).
- Pour donner une formule approximative pour hn, on va
procéder comme dans l'exercice précédent en diagonalisant la
matrice M.
-
Calculer les valeurs propres de M à l'aide de la commande
linalg::eigenvalues(M). Interprétation? Calculer le
polynôme minimal de M avec
linalg::minimalPolynomial
- Pour simplifier, nous nous contenterons de faire un calcul
numérique approché, en considérant la matrice de flottants
float(M).
- Calculer numériquement les vecteurs propres de M.
- En déduire une base B' de Rn dans laquelle M est
diagonale.
- Calculer les matrices de changement de base.
- Calculer la matrice M' correspondant à M dans cette
nouvelle base.
- Calculer M'n, puis Mn, puis Vn puis hn.
- Donner une approximation de hn sous la forme an.
- Jusqu'à quelle valeur de n peut-on raisonnablement faire
du test exhaustif?
- Analyse de données
Plot de nuage de points
Objectif: constater dans la pratique que les vecteurs propres de la
matrice d'inertie d'un objet mécanique donnent ses axes principaux
de rotation. À faire en 2D, puis en 3D, avec une centaine de
points.
Application à l'analyse de donnée: représenter un nuage de points
par un patatoïde. => infos sur les corrélations.
En principe, on se ramène à des variables réduites pour avoir une
bonne métrique malgré les unités différentes.
Exemple (pour lequel les unités sont homogènes; donc on peut
prendre la métrique euclidienne). Voir TP d'Albane.
3 TP: Géométrie
Le calcul matriciel est un outil fondamental en géométrie. En
particulier, il donne des notations compactes et puissantes pour le
graphisme 2D et 3D. Dans ce TP, nous allons explorer comment utiliser
les matrices pour implanter des transformations géométriques
naturelles comme les rotations, les symétries ou les projections.
Tout au long de ce TP, nous visualiserons l'effet des transformations
sur le polygone suivant, dont chaque sommet est décrit par un vecteur
de R21:
points := [matrix(point)
$ point in [[ 0, 1755], [1980, 180], [2070, 1260], [3150, 720],
[2340, 3240], [4095, 1125], [3060, 3735], [4860, 1260],
[4050, 900], [4590, 900], [7650, 2070], [6300, 1890],
[5130, 1395], [3645, 4275], [3735, 4320], [5175, 1485],
[5445, 1620], [4950, 3105], [5355, 3285], [6795, 2250],
[7695, 2295], [4590, 4860], [4365, 4725], [4860, 3915],
[4590, 3780], [3915, 4455], [2790, 3780], [3060, 2880],
[2070, 3645], [1710, 2655], [2970, 990], [1440, 2295],
[1845, 450], [1035, 2160]]];
Pour visualiser le polygône, utiliser:
plot(plot::Polygon2d(points))
Si vous avez des talents de graphistes, merci de nous proposer
d'autres polygones esthétiques pour les TP de l'année prochaine!
Exercice 7
Soit M une matrice M de dimension 2× 2, et ϕ
l'application linéaire de R2 dans R2 correspondante. Notre
objectif est d'interpréter géométriquement la transformation ϕ
lorsque cela est possible.
Considérons d'abord la matrice:
M := matrix ( [ [ 0,1],
[ 1,0] ]):
Étant donné un vecteur v de R2, l'image ϕ(v) de v par
ϕ peut être obtenue en calculant
M*v. Calculer l'image
des vecteurs de la base canonique de R2.
Pour visualiser l'image du polygone par ϕ, il suffit donc de faire:
plot(plot::Polygon2d([ M*v $ v in points]))
-
Quelle est la transformation géométrique effectuée par ϕ?
- Même question pour les matrices suivantes:
M := matrix ( [ [-1, 0],
[ 0,-1]])
M := matrix ( [ [ 4, 0],
[ 0, 1]])
M := matrix ( [ [ 1, 0],
[ 0, 1]])
M := matrix ( [ [ 1, 0],
[ 0,-1]])
- L'animation suivante permet de visualiser l'effet de la matrice
M := matrix ( [ [ 1, 0],
[ 0, 1/2^n]])
lorsque n tend vers l'infini.
plot(plot::Polygon2d([ matrix([[1,0],[0,1/2^n]])*v $ v in points], n=1..10))
Quelle est la transformation géométrique pour la matrice limite
M := matrix ( [ [ 1, 0],
[ 0, 0]])
- Chercher la matrice de l'application linéaire ϕ qui
effectue une homothétie (zoom) de facteur 2, et plus généralement
de facteur lambda. Vérifier le résultat en visualisant le
polygone transformé.
- En vous inspirant de l'exemple précédent, construire une
animation où le polygone grossit progressivement.
- Chercher la matrice de l'application linéaire ϕ qui
effectue une rotation d'un quart de tour dans le sens
trigonométrique.
- Chercher la matrice de l'application linéaire ϕ qui
effectue une rotation d'angle θ dans le sens
trigonométrique (indication: chercher l'image par ϕ des
vecteurs de la base canonique).
- Construisez une animation où le polygone tourne autour du
point de coordonnées (0,0).
- Même chose, en faisant grossir progressivement le polygone au
fur et à mesure qu'il tourne.
- Chercher la matrice de l'application linéaire ϕ qui
envoie le vecteur b1:=
sur 2b1, et b2:=
sur 1/2 b2 (indication: donner la matrice de ϕ dans la
base (b1,b2), puis appliquer les formules de changement de
base pour obtenir sa matrice M dans la base canonique).
Exercice 8
Toutes les transformations que nous avons rencontrées pour l'instant
sont linéaires
; en particulier le vecteur 0 reste inchangé.
-
Quelle opération matricielle pourrait-on utiliser pour décaler
le polygone de 1000 points vers la gauche?
- Plus généralement pour effectuer une translation le long d'un
vecteur de coordonnées (x,y)?
- Construire une animation où le polygone part vers la droite de
plus en plus vite.
- Ce que nous venons de faire, c'est de nous placer dans une
classe plus grande de transformations: les transformations
affines. Celles si sont de la forme v ↦ M v + u, où M
est une matrice 2× 2, et u un vecteur de R2.
- Chercher la transformation affine correspondant à la rotation
d'angle 45 degrés autour du centre du polygone.
- Construire une animation où le polygone tourne, grossit et se
déplace simultanément.
Exercice 9
Nous voulons maintenant animer le polygone en 3D. Afin de comprendre
la mécanique interne, nous n'utiliserons pas les possibilités
natives de
MuPAD. Pour simplifier, nous nous contenterons
ici de perspective cavalière.
-
Pour plonger le polygone dans R3, nous pouvons utiliser
l'application linéaire de R2 dans R3 qui envoie les deux
vecteurs de la base canonique de R2 sur les deux premiers
vecteurs de R3. Donner la matrice de cette application
linéaire.
- Réciproquement, pour visualiser un objet en 3D sur l'écran
(qui n'a que deux dimensions), il faut faire une projection de
R3 dans R2. Nous supposerons que l'observateur regarde
depuis le haut, de sorte que la projection se fera sur le plan des
x et y. Donner la matrice de cette application linéaire.
- Calculer le produit des deux matrices correspondant au
plongement de R2 dans R3 suivi de la projection de R3
dans R2. Interprétation?
- Afficher le polygone après plongement puis projection.
- Donner la matrice de la rotation de R3 d'angle θ
autour de l'axe des x. Indication: faire un dessin, et chercher
l'image des vecteurs de la base canonique. Afficher le polygone
après plongement, rotation de 45 degrés puis projection. Animer le
résultat pour θ variant de 0 à 359 degrés.
Exercice 10
Probablement trop ambitieux.
4 TP: Polynômes 1 (1H30)
L'objectif de ce TP est d'explorer plusieurs façons d'approximer une
fonction f de R dans R par une fonction plus simple.
Exercice 11
Soit f := x ↦ sin(x). Tracer son graphe avec
f := sin:
plot(plot::Function2d(f))
Notre objectif est de construire des fonctions simples qui
approximent f aux alentours d'un point x0.
-
Chercher une constante a0 telle que la fonction constante
g := a0 approxime au mieux f aux environs de 0. Tracer son
graphe par dessus celui de f avec
plot(plot::Function2d(g(x)), plot::Function2d(g(x)))
Zoomer le graphique.
- Chercher une fonction affine g := a0 + a1 x qui approxime
au mieux f aux environs de x0:=0. La comparer graphiquement
avec f.
- Chercher une fonction affine g := a0 + a1 (x−x0) qui
approxime au mieux f aux environs de x0 := π/4 (π se
note
PI).
xmin := -2*PI:
xmax := 2*PI:
plot(plot::Function2d(sin(x), x=xmin..xmax),
plot::Function2d(f(x0) + f'(x0)*(x-x0), x=xmin..xmax, x0=xmin..xmax),
ViewingBoxYRange=-2..2)
Exercice 12
- Approximation d'une fonction par un polynôme: interpolation / DL / Padé?
Objectif: leur faire passer la notion de DL
5 TP: Polynômes 2 (1H30)
Exercice 13
Un vieux pirate est sur son lit de mort. Dans sa jeunesse il a
enfoui un Fabuleux Trésor dans la lagune interminable de l'Ile de la
Tortue, quelque part à l'est du Grand Cocotier. Il a réuni ses dix
lieutenants préférés pour leur transmettre l'information secrète
indispensable: la distance entre le Grand Cocotier et le Trésor.
Connaissant bien ses lieutenants, et dans un étonnant dernier
sursaut de justice, il ne voudrait pas qu'une conjuration de
quelques uns d'entre eux assassines les autres pour empocher seuls
le trésor. En tenant cependant compte de la mortalité habituelle du
milieu, il souhaite donner une information secrète à chacun de ses
lieutenants pour que sept survivants puissent toujours retrouver
ensemble le trésor, mais pas moins. Comment peut-il s'y prendre?
-
« The art of doing mathematics consists in finding that
special case which contains all the germs of generality » – David
Hilbert
Autrement dit, la première chose à faire pour attaquer ce genre de
problème est de le généraliser pour des paramètres quelconques, et
de commencer par essayer de comprendre ce qu'il se passe pour de
petites valeurs des paramètres. Ici, les paramètres naturels sont
le nombre n de lieutenants, et le nombre k de survivants. Que
peut on dire pour n≤ 1? pour k≤ 1?
- Étudions maintenant le cas n=k=2. Soit b la distance
secrète. Le pirate choisit au hasard un coefficient a qu'il
garde secret, et considère la fonction f(x) = ax+b. Puis il
choisit au hasard deux points d'évaluation x1:=−3 et x2:=7
qu'il annonce publiquement. Enfin, il dit en secret au premier
pirate que f(x1) = 5 et au deuxième pirate que f(x2) = 7.
Les deux pirates se mettent ensemble; retrouver la valeur de b.
Est-ce que le premier pirate aurait pu la retrouver tout seul?
- Généralisation pour n=10 et k=7: choisir une valeur
secrète b. Tirer au hasard les coefficients d'un polynôme f(x)
= a6 x6 +...+a1 x + b de degré 6 et dont le terme constant
est b. Tirer au hasard dix points d'évaluation x1,...,x10
distincts et non nuls, et calculer f(x1),...,f(x10). À
l'aide de la commande
interpolate, et en utilisant
uniquement x1,...,x7 et f(x1),...,f(x7) retrouver la
valeur de b. Pour se mettre en condition réelle, donner à chaque
étudiant du TP un couple (xi, f(xi)), et laissez les retrouver
ensemble la valeur secrète.
- 1
- Rappel:
matrix(1,2) permet de construire
le vecteur de R2 de coordonnées (1, 2); pour comprendre la
notation $, essayer
f(x) $ x in [a,b,c,d].
Mathématiques
TP de mathématiques /
IUT d'Orsay, Cours de Mathématiques /
Nicolas M. Thiéry
Dernière modification: Mer 23 Mai 2007 14:32:07