# Pour améliorer l'affichage dans ce TP :
%display latex
v.n(b)
pour connaître v
avec b
bits de précision.
On cherche à déterminer la valeur de $(1-i)^k$ pour tout $k≥0$, où $i^2=-1$. La constante $i$ s'obtient avec i
ou I
. Si on a effacé sa valeur (en utilisant i
et I
comme variables), on peut la retrouver avec SR('I')
.
abs(z)
.arg(z)
.all
.var('k')
.
Est-ce que tous les entiers de la forme $2^{2^n}+1$ sont premiers ?
On définit la suite $(u_n)$ par $u_0 = 1$ et $u_{n+1} = \sqrt{1+u_n}$.
On définit la fonction $f(x) = \sin(x)\exp(x)$.
f.limit(...)
.find_root
. Attention, cette fonction ne renvoie qu'une* racine !*
On définit le polynôme $$P(X) = \frac{(X-a)(X-b)}{(c-a)(c-b)} + \frac{(X-a)(X-c)}{(b-a)(b-c)} + \frac{(X-b)(X-c)}{(a-b)(a-c)}-1.$$
a
, b
et c
et le polynôme $P(X)$.
Soit $C$ la courbe du plan définie par $$\begin{cases} x(t) & = t^3-2t\\ y(t) & = t^2-t \end{cases}$$ pour $t\in\mathbb{R}$.
parametric_plot
. Trouver des bornes sur $t$ pour que la représentation soit « intéressante ».solve
. On peut extraire la « partie droite » d'une équation eq
avec eq.rhs()
(rhs = right-hand side).point((x,y), color='...', size='...')
permet de tracer un point de coordonnées $(x,y)$ avec la couleur souhaitée et une taille souhaitée. De même, points(L, ...)
trace une liste de points. On peut superposer des graphiques en effectuant leur somme.
On veut résoudre le problème suivant, posé comme énigme dans le journal Le Monde :
Quel est la taille maximale d'un ensemble $X$ d'entiers compris entre $1$ et $100$ tels que quelque soit $a$ et $b\in X$, $a-b$ n'est pas un carré parfait ?
On modélise le problème par un graphe $G$ dont les sommets sont les entiers entre $1$ et $100$, et il y a une arête entre deux sommets si leur différence n'est pas un carré.
k
puis explorer les méthodes associées à k
en tapant k.<tab>
¹. En général, les méthodes pour tester une propriété s'appellent is_...
.Graph()
), puis ajouter les arêtes définies à la question précédente (G.add_edges(...)
).G.<tab>
une méthode pour calculer une clique maximale. On peut également chercher en faisant par exemple G.cl<tab>
pour avoir toutes les méthodes qui commencent par cl
.¹ <tab>
veut dire « appuyer sur tabulation », il ne faut pas taper ces 5 caractères !
Problème inspiré de : C. Gomez, B. Salvy, et P. Zimmermann, Calcul formel: mode d’emploi ; exemples en Maple. Masson, 1995.
L'objectif du problème est de déterminer une expression pour l'aire de l'intersection des deux cercles rouge et bleu. Les points de la figure sont définis de la manière suivante :
Pour calculer l'aire de l'intersection des deux cercles, on utilise l'idée suivante, illustrée ci-dessous. Le segment $[IJ]$ coupe la zone d'intersection en deux. L'aire de la partie droite s'obtient comme la différence entre l'aire du secteur angulaire $OIJ$ du cercle $C_1$ (zone rouge) et le triangle $OIJ$. Celle de la partie gauche s'obtient comme la différence entre l'aire du secteur angulaire $O_2IJ$ du cercle $C_2$ (zone bleue) et le triangle $O_2IJ$.
Conseil : la série de questions permet d'arriver au résultat souhaité. Bien que ça ne soit pas dit explicitement à chaque fois, il est (très !) conseillé de sauvegarder le résultat de chaque calcul effectué dans une variable afin de le réutiliser plus tard. De manière générale, chaque cellule peut prendre une forme suivante, où res
est le résultat demandé.
var1 = ...
var2 = ...
res = calcul(var1, var2)
res
L'équation d'un cercle $C$ de centre $(x_c,y_c)$ et de rayon $R$ est $(x-x_c)^2+(y-y_c)^2 = R^2$.
eq = ... == ...
pour définir une équation. Remarquez que dans l'affichage, les ==
sont remplacés par un seul $=$.
Tracer une figure représentant les deux cercles $C_1$ (en bleu) et $C_2$ (en rouge) lorsque $R_1 = 10$ et $R_2=4$. Indications :
subs
;implicit_plot
prend en entrée une équation et deux couples (xmin,xmax)
et (ymin,ymax)
et trace les points $(x,y)$ qui vérifient l'équation, pour $x_\min ≤ x ≤ x_\max$ et $y_\min ≤ y ≤ y_\max$ ;implicit_plot
(comme toutes les fonctions de graphiques) admet un argument optionnel color
;implicit_plot(...) + implicit_plot(...)
.
On cherche à trouver les équations des points $I$ et $J$ de la figure, c'est-à-dire les intersections des deux cercles. Par définition, ce sont les points qui vérifient l'équation de $C_1$ et celle de $C_2$.
solve
pour trouver les couples $(x,y)$ qui vérifient les équations des deux cercles.point((x,y))
permet de tracer un point de coordonnées $(x,y)$ et admet beaucoup de paramètres optionnels, dont color
, zorder
(entier pour déterminer quel graphique est au premier plan, au deuxième plan, etc.) et size
(entier qui fixe la taille du point).subs
, on peut définir un dictionnaire d = {R1:10, R2:4}
et écrire eq.subs(d)
plutôt que eq.subs(R1 = 10, R2 = 4)
.
Écrire une fonction dessin
qui prend en paramètre les rayons $R_1$ et $R_2$ et renvoie le graphique représentant le problème, avec les éléments suivants :
line
) ;Faire une version interactive du dessin précédent, à l'aide de la commande suivante (à copier-coller) :
@interact
def _(r1 = slider(1,20),r2 = slider(1,20)):
return dessin(r1, r2)
On commence par calculer l'aire des triangles $T_1 = OIJ$ et $T_2 = O_2IJ$. On rappelle qu'on note $H$ l'intersection de l'axe des abscisses et du segment $IJ$.
simplify
et simplify_...
pour obtenir des expressions aussi simples que possibles.
Afin de calculer les aires des secteurs angulaires, on cherche à déterminer les angles $\theta_1 = \widehat{IOH}$ et $\theta_2 = \widehat{IO_2H}$. On rappelle que dans un triangle $ABC$ rectangle en $B$, l'angle $\theta = \widehat{BAC}$ vérifie $\cos\theta = \frac{AB}{AC}$ (« adjacent / hypothénuse ») et $\sin\theta = \frac{BC}{AC}$ (« opposé / hypothénuse »).
On note $S_1$ le secteur angulaire $OIJ$ du cercle $C_1$, et $S_2$ le secteur angulaire $O_2IJ$ de $C_2$. L'aire d'un cercle de rayon $R$ est $\pi R^2$, et correspond à un secteur angulaire d'angle $2\pi$. De manière proportionnelle, l'aire d'un secteur angulaire d'angle au centre $\theta$ est $\frac{1}{2} r^2\theta = \frac{\theta}{2\pi} \times \pi r^2$.
On cherche maintenant à déterminer quand est-ce que cette aire vaut la moitié de l'aire du cercle $C_1$. Afin de simplifier les calculs, on effectue la remarque suivante : ce qui compte est le ratio entre les rayons $R_1$ et $R_2$, plus que les valeurs des rayons eux-mêmes. On va donc, dans la suite, travailler avec $R_2 = kR_1$ pour un certain $k$.
expr.subs(e1 == e2)
pour remplacer toute l'expression e1
par l'expression e2
dans expr
. Attention : SageMath ne vérifie pas que l'égalité e1 == e2
est vraie, il fait confiance à l'utilisateur !
On cherche maintenant à résoudre le problème présenté à la question précédente : déterminer pour quelles valeurs de $R_1$ et $R_2$, l'aire de l'intersection est égale à la moitié de l'aire de $C_1$.
solve
: le résultat est-il satisfaisant ?
Il est normal que SageMath ne sache pas résoudre l'équation, car elle n'admet pas de solution analytique (c'est-à-dire exprimable avec des fonctions usuelles). On cherche donc à résoudre l'équation de manière approchée, avec find_root
.
find_root
requiert des bornes sur $k$ : quelles sont les valeurs minimales et maximales intéressantes pour la variable $k$ ?
On a vu que pour $k = 0$, l'aire de l'intersection est nulle ; pour $k = 2$, c'est l'aire de $C_1$ tout entier ; et on a calculer $k$ tel que l'aire soit la moitié de celle de $C_1$.
Tracer la courbe de la proportion entre l'aire de l'intersection et l'aire de $C_1$ en fonction de $k$.