\documentclass[10pt]{article} \usepackage[french]{babel} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amssymb} \usepackage[version=4]{mhchem} \usepackage{stmaryrd} \usepackage{mathrsfs} \usepackage{bbold} \usepackage{graphicx} \usepackage[export]{adjustbox} \graphicspath{ {./images/} } \begin{document} CONCOURS D'ADMISSION 2026 \section*{prépas ECG/ECT} \section*{(1)} \section*{Mathématiques Appliquées} \section*{Série ECG} Mardi 14 avril 2026 de 8 hOO à 12h00\\ Durée : 4 heures\\ Candidats bénéficiant de la mesure « Tiers-temps » :\\ 8h00-13h20\\ L'énoncé comporte 11 pages. \section*{INSTRUCTIONS} Tous les feuillets doivent être identifiables et numérotés par le candidat.\\ Aucun document n'est permis, aucun instrument de calcul n'est autorisé. La règle graduée est autorisée.\\ Conformément au règlement du concours, l'usage d'appareils communicants ou connectés est formellement interdit durant l'épreuve.\\ Les candidats sont invités à soigner la présentation de leur copie, à mettre en évidence les principaux résultats, à respecter les notations de l'énoncé et à fournir des raisonnements clairs, précis et concis. Le soin apporté à l'ensemble de la copie et la lisibilité entrent pour une bonne part dans l'évaluation de la copie. Le jury tiendra compte de la qualité rédactionnelle et de la maîtrise orthographique dans le barème de l'épreuve.\\ Si, au cours de l'épreuve, un candidat repère ce qui lui semble être une erreur d'énoncé, il le signale sur sa copie et poursuit sa composition en expliquant les raisons des initiatives qu'il est amené à prendre.\\ Ce document est la propriété d'ECRICOME, le candidat est autorisé à le conserver à l'issue de l'épreuve.\\ Le candidat dispose d'une annexe Python et SQL en pages 9, 10, 11 et 12. Dans les questions faisant intervenir des instructions en langage Python, on prendra soin d'importer les bibliothèques nécessaires lors de leur première utilisation.\\ Pour traiter les questions d'informatique, les candidats sont invités à se référer aux annexes fournies en fin de sujet. Ils ne sont pas limités à l'utilisation des seules fonctions mentionnées dans ces annexes. \section*{EXERCICE 1} Soit \(n\) un entier naturel supérieur ou égal à 2.\\ Toutes les variables aléatoires intervenant dans cet exercice sont définies sur un espace probabilisé \((\Omega, \mathscr{A}, \mathbb{P})\).\\ Un particulier souhaite assurer un nouveau bien. Il consulte pour cela un site internet qui diffuse un classement de \(n\) compagnies d'assurances, de la mieux classée par les utilisateurs (compagnie n°1) à la moins bien classée (compagnie n° \(n\) ). Ce classement ne varie pas d'année en année.\\ La première année, le particulier choisit une compagnie d'assurances au hasard, avec équiprobabilité, parmi les \(n\) compagnies proposées.\\ On note \(X\) la variable aléatoire égale au numéro, dans le classement, de la compagnie choisie.\\ L'année suivante, le particulier choisit au hasard de manière équiprobable une compagnie parmi toutes celles qui sont au moins aussi bien classées que celle qu'il avait choisie l'année précédente (il peut éventuellement être amené à conserver la même compagnie). On note alors \(Y\) la variable aléatoire égale au numéro, dans le classement, de la compagnie choisie pour cette seconde année. \begin{itemize} \item[1.] Identifier la loi de la variable aléatoire \(X\). Donner son espérance et sa variance. \item[2.] Montrer que la loi conjointe du couple \((X, Y)\) est donnée par : \[ \forall(j, k) \in \llbracket 1, n \rrbracket^{2}, \quad \mathbb{P}([X=j] \cap[Y=k])=\left\{\begin{array}{lll} \frac{1}{n j} & \text { si } & k \leqslant j, \\ 0 & \text { si } & k \geqslant j+1 . \end{array}\right. \] \item[3.] En déduire la valeur, en fonction de \(n\), de la somme double suivante : \(\sum_{k=1}^{n} \sum_{j=k}^{n} \frac{1}{j}\). \item[4.] Pour tout entier naturel \(k\) de \(\llbracket 1, n \rrbracket\), exprimer \(\mathbb{P}(Y=k)\) sous la forme d'une somme. \item[5.] (a) Montrer que \(\sum_{k=1}^{n} \sum_{j=k}^{n} \frac{k}{j}=\frac{1}{2} \sum_{j=1}^{n}(j+1)\). \begin{itemize} \item[(b)] Justifier que \(Y\) admet une espérance et montrer que l'espérance de \(Y\) vaut \(\frac{n+3}{4}\). \end{itemize} \item[6.] (a) Justifier que l'espérance de la variable aléatoire \(X Y\) existe et vérifie : \[ \boldsymbol{E}(X Y)=\frac{1}{2 n} \sum_{j=1}^{n} j(j+1) . \] \begin{itemize} \item[(b)] En déduire l'expression de \(\boldsymbol{E}(X Y)\) en fonction de \(n\). \item[(c)] Déterminer la covariance du couple \((X, Y)\) en fonction de \(n\). \end{itemize} \item[7.] Les variables aléatoires \(X\) et \(Y\) sont-elles indépendantes? \item[8.] (a) Écrire une fonction en langage Python nommée simulXY, prenant en argument d'entrée l'entier \(n\), et renvoyant une réalisation du couple de variables aléatoires \((X, Y)\). \begin{itemize} \item[(b)] On considère une série statistique à deux variables \((x, y)\).\\ Expliquer ce que renvoie la fonction Myst suivante qui prend en argument d'entrée la série statistique \((x, y)\) sous forme de tableau Numpy à deux lignes. \begin{verbatim} import numpy as np def Myst(Tab): M=np.cov(Tab) R=M[0,1]/np.sqrt(M[0,0]*M[1,1]) return(R) \end{verbatim} \end{itemize} \end{itemize} \begin{itemize} \item[(c)] On a représenté ci-après plusieurs tracés figurant le nuage de points \(\left(x_{i}, y_{i}\right)_{i \in \llbracket 1,1000 \rrbracket}\) correspondant à 1000 réalisations du couple \((X, Y)\) pour \(n=100\) et le point moyen de la série statistique (i.e. le point de coordonnées \((\bar{x}, \bar{y})\) ) figuré par une croix rouge.\\ Parmi ces tracés figure celui de la droite d'ajustement affine par la méthode des moindres carrés. \end{itemize} Déterminer lequel de ces tracés correspond à la droite d'ajustement affine par la méthode des moindres carrés. Une réponse justifiée est attendue.\\ \includegraphics[max width=\textwidth, alt={}, center]{42a582cf-644e-48df-88c4-d6fffa174d6e-03_1392_1338_700_425} \begin{itemize} \item[9.] On note \(A_{n}\) l'événement : « le particulier choisit la même compagnie d'assurances lors des deux années considérées ». \begin{itemize} \item[(a)] Exprimer l'événement \(A_{n}\) à l'aide des variables aléatoires \(X\) et \(Y\). \item[(b)] Montrer que : \(\mathbb{P}\left(A_{n}\right)=\frac{1}{n} \sum_{j=1}^{n} \frac{1}{j}\). \item[(c)] Montrer que, pour tout entier naturel \(j\) non nul, \(\frac{1}{j+1} \leqslant \ln (j+1)-\ln (j) \leqslant \frac{1}{j}\). \item[(d)] En déduire que \(\frac{\ln (n+1)}{n} \leqslant \mathbb{P}\left(A_{n}\right) \leqslant \frac{1}{n}+\frac{\ln (n)}{n}\). \item[(e)] Montrer que \(\mathbb{P}\left(A_{n}\right) \underset{n \rightarrow+\infty}{\sim} \frac{\ln (n)}{n}\). \end{itemize} \end{itemize} \begin{itemize} \item[10.] Pour répondre aux questions suivantes, on pourra se référer aux commandes SQL rappelées en annexe.\\ Dans une base de données, on dispose d'une table adherent dont chaque enregistrement correspond à un individu assuré, et qui recense les compagnies d'assurances choisies en 2025 et en 2026 par chaque assuré. Ses attributs sont les suivants : \begin{itemize} \item[-] assure (de type INTEGER) : un numéro permettant d'identifier l'assuré. \item[-] id\_2025 (de type INTEGER) : un code permettant d'identifier la compagnie d'assurances à laquelle l'assuré a souscrit en 2025. \item[-] id\_2026 (de type INTEGER) : un code permettant d'identifier la compagnie d'assurances à laquelle l'assuré a souscrit en 2026. \end{itemize} On dispose également d'une table compagnie dont chaque enregistrement correspond à une compagnie et qui associe pour chaque compagnie son nom et son identifiant. Ses attributs sont les suivants : \begin{itemize} \item[-] id (de type INTEGER) : un code permettant d'identifier la compagnie d'assurances. \item[-] nom (de type TEXT) : le nom de la compagnie d'assurances. \end{itemize} Le format de la table adherent est illustré dans le tableau ci-dessous.\\ \\ \begin{tabular}[t]{|l|l|l|} \hline assure & id\_2025 & id\_2026 \\ \hline 1003 & 3 & 3 \\ \hline 1004 & 4 & 2 \\ \hline 1005 & 1 & 1 \\ \hline 1006 & 3 & 4 \\ \hline 1007 & 2 & 4 \\ \hline \end{tabular}\\ \\ Le format de la table compagnie est illustré dans le tableau ci-dessous.\\ \\ \begin{tabular}[t]{|l|l|} \hline id & nom \\ \hline 1 & Assurplus \\ \hline 2 & Garantia \\ \hline 3 & SecurVie \\ \hline 4 & MutuelPro \\ \hline \end{tabular} \begin{itemize} \item[(a)] Écrire une requête SQL permettant d'afficher le nombre d'assurés ayant conservé la même compagnie d'assurances entre 2025 et 2026 . \item[(b)] Expliquer ce que réalise la commande SQL suivante : \begin{verbatim} SELECT assure, nom FROM adherent INNER JOIN compagnie ON adherent.id_2026 = compagnie.id; \end{verbatim} \item[(c)] Dans sa base de données, le site internet qui diffuse les avis sur les compagnies d'assurances dispose d'une table avis, dans laquelle chaque enregistrement correspond à un avis déposé par un utilisateur concernant une compagnie. La table avis est composée des attributs suivants : \begin{itemize} \item[-] id (de type INTEGER) : un numéro permettant d'identifier l'avis. \item[-] usr (de type TEXT) : le nom d'utilisateur de la personne ayant déposé l'avis. \item[-] compagnie (de type INTEGER) : un code permettant d'identifier la compagnie d'assurances évaluée dans l'avis. \item[-] note (de type INTEGER) : la note sur 10 attribuée par l'utilisateur à la compagnie évaluée. \item[-] commentaire (de type TEXT) : l'appréciation déposée par l'utilisateur sur la compagnie. \end{itemize} Le format de la table avis est illustré dans le tableau ci-dessous.\\ \\ \begin{tabular}[t]{|l|l|l|l|l|} \hline id & usr & compagnie & note & commentaire \\ \hline 5001 & alice92 & 1 & 8 & Très bon service ! \\ \hline 5002 & karimBoss & 2 & 6 & Service correct. \\ \hline 5004 & david123 & 3 & 7 & Bon rapport qualité-prix. \\ \hline 5005 & emma\_p & 2 & 5 & Déçue par le service. \\ \hline 5007 & alice92 & 3 & 8 & Très professionnels. \\ \hline 5008 & david123 & 4 & 9 & Service impeccable. \\ \hline \end{tabular}\\ Écrire une requête SQL permettant d'obtenir, pour chaque compagnie d'assurances évaluée, la note moyenne que les utilisateurs lui ont attribuée. On affichera pour chaque enregistrement l'attribut compagnie, ainsi que l'attribut note correspondant désormais à la moyenne de toutes les notes obtenues par la compagnie. \item[(d)] On appelle moyenne la table issue de la requête décrite à la question précédente.\\ Écrire une requête SQL permettant de classer les compagnies d'assurances, de la mieux notée à la moins bien notée. \end{itemize} \end{itemize} \section*{EXERCICE 2} On considère la fonction \(f\) définie par \[ f(x)=\ln \left(\frac{1}{1-x}\right) . \] Partie I \begin{itemize} \item[1.] Déterminer le domaine de définition de \(f\). \end{itemize} Dans les questions qui suivent, on note \(I\) le domaine de définition de \(f\). \begin{itemize} \item[2.] Calculer les limites de \(f\) aux bornes de son domaine de définition. \item[3.] Dresser le tableau de variations de \(f\) sur \(I\). \item[4.] (a) Déterminer le développement limité à l'ordre 2 de \(f\) en 0. \begin{itemize} \item[(b)] En déduire une équation de la tangente à la courbe représentative de \(f\) au point d'abscisse 0 , ainsi que la position relative de la courbe par rapport à sa tangente au voisinage de ce point. \end{itemize} \item[5.] Représenter, dans un même repère orthonormé, l'allure de la courbe représentative de \(f\) et sa tangente au point d'abscisse 0. \end{itemize} Partie II\\ Pour tout entier naturel \(n\) non nul et tout réel \(x\), on pose : \[ S_{n}(x)=\sum_{k=1}^{n} \frac{x^{k}}{k} . \] \begin{itemize} \item[6.] (a) Donner la nature de la série \(\sum_{k \geqslant 1} \frac{1}{k}\). \begin{itemize} \item[(b)] Étudier la monotonie de la suite \(\left(S_{n}(1)\right)_{n \in N^{*}}\). \item[(c)] En déduire que \(\lim _{n \rightarrow+\infty} S_{n}(1)=+\infty\). \end{itemize} \item[7.] Montrer que, pour tout réel \(x\) de ] - 1, 1[, la série \(\sum_{k \geqslant 1} \frac{x^{k}}{k}\) converge absolument. \item[8.] (a) Montrer que les suites \(\left(S_{2 n}(-1)\right)_{n \in N^{*}}\) et \(\left(S_{2 n+1}(-1)\right)_{n \in N^{*}}\) sont adjacentes. \begin{itemize} \item[(b)] En déduire que la suite \(\left(S_{n}(-1)\right)_{n \in N^{*}}\) est convergente.\\ On admet que \(\lim _{n \rightarrow+\infty} S_{n}(-1)=\sum_{k=1}^{+\infty} \frac{(-1)^{k}}{k}=-\ln (2)\). \item[(c)] En utilisant la monotonie des suites \(\left(S_{2 n}(-1)\right)_{n \in N^{*}}\) et \(\left(S_{2 n+1}(-1)\right)_{n \in N^{*}}\), montrer que \[ \forall n \in N^{*}, \quad\left|\ln (2)+S_{2 n}(-1)\right| \leqslant S_{2 n}(-1)-S_{2 n+1}(-1) \] \item[(d)] Montrer que, pour tout entier naturel \(n\) non nul, \(\left|\ln (2)+S_{n}(-1)\right| \leqslant \frac{1}{n}\). \end{itemize} \item[9.] Dans cette question uniquement, \(x\) est un réel strictement supérieur à 1. \begin{itemize} \item[(a)] Déterminer la nature de la série \(\sum_{k \geqslant 1} \frac{x^{k}}{k}\). \item[(b)] En déduire la limite de la suite \(\left(S_{n}(x)\right)_{n \in N^{*}}\). \end{itemize} \end{itemize} Pour tout \(x \in\left[-1,1\left[\right.\right.\), on pose \(S(x)=\lim _{n \rightarrow+\infty} S_{n}(x)=\sum_{k=1}^{+\infty} \frac{x^{k}}{k}\). Partie III\\ Dans toute cette partie, \(a\) désigne un réel fixé dans l'intervalle ] - 1, 1[.\\ Pour tout entier naturel \(n\) non nul, on considère l'intégrale notée \(R_{n}(a)\) définie par : \[ R_{n}(a)=\int_{0}^{a} \frac{(a-t)^{n}}{(1-t)^{n+1}} d t \] On considère à nouveau la fonction \(f\) définie à la Partie I ainsi que la suite \(\left(S_{n}(x)\right)_{n \geqslant 1}\) et la fonction \(S\) définies à la Partie II. \begin{itemize} \item[10.] (a) Déterminer en fonction de \(a\) les valeurs de \(\int_{0}^{a} \frac{1}{1-t} \mathrm{~d} t\) et \(\int_{0}^{a} \frac{1}{(1-t)^{2}} \mathrm{~d} t\). \begin{itemize} \item[(b)] Montrer que \(f(a)=a+R_{1}(a)\).\\ Indication : On pourra écrire \(a-t=(a-1)+(1-t)\). \end{itemize} \item[11.] Montrer par intégration par parties que, pour tout entier naturel \(n\) non nul, \(R_{n}(a)=\frac{a^{n+1}}{n+1}+R_{n+1}(a)\). \item[12.] En utilisant les résultats des questions 10b et 11, montrer que, pour tout entier naturel \(n\) non nul, \[ f(a)=S_{n}(a)+R_{n}(a) . \] Indication : On pourra procéder par récurrence. \item[13.] Dans cette question uniquement, on suppose que \(a \in[0,1[\). \begin{itemize} \item[(a)] Montrer que pour tout réel \(t\) de \([0, a], 0 \leqslant \frac{a-t}{1-t} \leqslant a\). \item[(b)] Montrer que, pour tout entier naturel \(n\) non nul, \(0 \leqslant R_{n}(a) \leqslant \frac{a^{n+1}}{1-a}\). \item[(c)] En déduire que \(f(a)=S(a)\). \end{itemize} \item[14.] (a) En utilisant les résultats des questions précédentes, justifier que, pour tout entier naturel \(n\) non nul, \[ \left|\ln (2)-\sum_{k=1}^{n} \frac{1}{k 2^{k}}\right| \leqslant \frac{1}{2^{n}} . \] \begin{itemize} \item[(b)] Écrire une fonction en langage Python, nommée Val, prenant en argument eps désignant le réel \(\varepsilon\) strictement positif, qui renvoie une valeur approchée de \(\ln (2)\) à \(\varepsilon\) près. \item[(c)] Dans la figure suivante sont représentés les tracés des premiers termes des suites \(\left(S_{n}\left(\frac{1}{2}\right)\right)_{n \in N^{*}}\) et \(\left(-S_{n}(-1)\right)_{n \in N^{*}}\). Identifiez les suites dans cette figure. \end{itemize} \end{itemize} \begin{center} \includegraphics[max width=\textwidth, alt={}]{42a582cf-644e-48df-88c4-d6fffa174d6e-06_569_765_1997_709} \end{center} \section*{EXERCICE 3} Partie I\\ On considère le problème de Cauchy \((\mathscr{C})\) suivant, d'inconnues \(x: \mathbb{R} \longrightarrow \mathbb{R}\) et \(y: \mathbb{R} \longrightarrow \mathbb{R}\) dérivables : \[ (\mathscr{C}) \quad \forall t \in \mathbb{R}, \quad\left\{\begin{array}{l} x^{\prime}(t)=x(t)+y(t) \\ y^{\prime}(t)=-x(t)-y(t) \\ x(0)=1 \\ y(0)=1 \end{array}\right. \] Dans cette partie, on suppose que \(x\) et \(y\) sont solutions de \((\mathscr{C})\).\\ On pose, pour tout \(t\) réel, \(s(t)=x(t)+y(t)\). \begin{itemize} \item[1.] Déterminer une expression de la fonction \(s^{\prime}\). \item[2.] En déduire une relation entre \(x(t)\) et \(y(t)\) pour tout réel \(t\). \item[3.] Déterminer l'unique couple de solutions du problème de Cauchy \((\mathscr{C})\). \end{itemize} Partie II\\ On considère les matrices \(A=\left(\begin{array}{cc}1 & 1 \\ -1 & -1\end{array}\right)\), \(J=\left(\begin{array}{ll}0 & 1 \\ 0 & 0\end{array}\right)\) et \(\mathrm{P}=\left(\begin{array}{cc}1 & 0 \\ -1 & 1\end{array}\right)\). \begin{itemize} \item[4.] Montrer que la matrice \(P\) est inversible et calculer son inverse. \item[5.] Montrer que \(A\) possède une unique valeur propre que l'on déterminera. \item[6.] La matrice \(A\) est-elle diagonalisable? \item[7.] Montrer que \(J=P^{-1} A P\). \end{itemize} Dans la suite de cette partie, on considère le système différentiel \((\mathscr{S})\) défini par : \[ (\mathscr{S}) \quad \forall t \in \mathbb{R}, \quad\left\{\begin{array}{l} x^{\prime}(t)=x(t)+y(t) \\ y^{\prime}(t)=-x(t)-y(t) \end{array}\right. \] Pour toutes fonctions \(x\) et \(y\) dérivables sur \(\mathbb{R}\), on pose, pour tout réel \(t, X(t)=\binom{x(t)}{y(t)}\) et \(X^{\prime}(t)=\binom{x^{\prime}(t)}{y^{\prime}(t)}\).\\ On pose également, pour tout réel \(t, Y(t)=P^{-1} X(t)=\binom{u(t)}{v(t)}\) et \(Y^{\prime}(t)=\binom{u^{\prime}(t)}{v^{\prime}(t)}\). \begin{itemize} \item[8.] Déterminer les états d'équilibre du système \((\mathscr{S})\). \item[9.] Montrer que \(x\) et \(y\) sont solutions de \((\mathscr{S})\) si et seulement si, pour tout réel \(t, Y^{\prime}(t)=J Y(t)\). \item[10.] Déterminer l'ensemble des solutions \(Y(t)=\binom{u(t)}{v(t)}\) du système différentiel \(Y^{\prime}(t)=J Y(t)\). \item[11.] En déduire les solutions du système différentiel \((\mathscr{S})\). \end{itemize} \section*{Partie III} Soit \(n\) un entier naturel non nul.\\ Une matrice de \(\mathscr{M}_{n}(\mathbb{R})\) est dite nilpotente quand il existe un entier naturel \(k\) tel que \(M^{k}=0_{n}\), où \(0_{n}\) désigne la matrice nulle de \(\mathscr{M}_{n}(\mathbb{R})\).\\ On admet que, pour toute matrice \(M\) nilpotente de \(\mathscr{M}_{n}(\mathbb{R})\), il existe un entier naturel \(p\) non nul et inférieur ou égal à \(n\) tel que \(M^{p-1} \neq 0_{n}\) et \(\forall k \geqslant p, M^{k}=0_{n} . p\) est appelé l'indice de nilpotence de \(M\).\\ On considère le système différentiel \((\mathscr{E})\) à \(n\) équations, d'inconnues \(x_{1}, x_{2}, \ldots, x_{n}\) dérivables sur \(\mathbb{R}\), défini par : \[ (\mathscr{E}) \quad \forall t \in \mathbb{R}, \quad X^{\prime}(t)=N X(t), \quad \text { où } \quad X(t)=\left(\begin{array}{c} x_{1}(t) \\ x_{2}(t) \\ \vdots \\ x_{n}(t) \end{array}\right), \quad X^{\prime}(t)=\left(\begin{array}{c} x_{1}^{\prime}(t) \\ x_{2}^{\prime}(t) \\ \vdots \\ x_{n}^{\prime}(t) \end{array}\right) \] et \(N\) est une matrice nilpotente non nulle de \(\mathscr{M}_{n}(\mathbb{R})\). On note \(p\) l'indice de nilpotence de \(N\). \begin{itemize} \item[12.] Écrire une fonction, en langage Python, nommée Nil, qui prend en entrée une matrice \(M\) et qui renvoie \(p\) lorsque la matrice \(M\) est nilpotente d'indice de nilpotence \(p\) et 0 sinon. \item[13.] Montrer que la matrice \(N\) possède une unique valeur propre que l'on déterminera. \item[14.] Justifier par l'absurde que la matrice \(N\) n'est pas diagonalisable. \end{itemize} Pour tout réel \(t\), on définit la matrice \(B(t)\) de \(\mathscr{M}_{n}(\mathbb{R})\) par \[ B(t)=\sum_{k=0}^{p-1} \frac{t^{k}}{k!} N^{k}, \] et la matrice colonne \(X(t)\) de \(\mathscr{M}_{n, 1}(\mathbb{R})\) par \[ X(t)=B(t) X_{0} \] où \(X_{0}\) est une matrice colonne de \(\mathscr{M}_{n, 1}(\mathbb{R})\). \begin{itemize} \item[15.] Justifier que, pour tout réel \(t\), \[ X^{\prime}(t)=\sum_{k=1}^{p-1} \frac{t^{k-1}}{(k-1)!} N^{k} X_{0} . \] \item[16.] En déduire que \(X(t)\) est l'unique solution du problème de Cauchy défini par le système différentiel \((\mathscr{E})\) et la condition initiale \(X(0)=X_{0}\). \item[17.] Recopier et compléter, en langage Python, la fonction suivante qui prend en entrée la matrice N et un réel t et qui renvoie \(B(t)\). \end{itemize} \begin{verbatim} def B(N,t): if Nil(N)==...: return("N n'est pas nilpotente") else: T=np.eye(len(N)) S=T for k in range(....): T=.../...*np.dot(T,...) S=S+T return S \end{verbatim} \section*{Annexe A - Fonctions Python utiles} Manipulation de listes. On suppose que L désigne une liste à n éléments. \begin{itemize} \item[-] L'opérateur de concaténation +, appliqué entre deux listes, renvoie la liste obtenue en plaçant les éléments de la seconde liste à la suite de ceux de la première liste.\\[0pt] Par exemple, [1, 2, 5] + [4, 3] renvoie la liste [1, 2, 5, 4, 3]. \item[-] L'opérateur *, appliqué entre une liste L et un entier n, renvoie la liste obtenue en concaténant n fois la liste L avec elle-même.\\[0pt] Par exemple, [1, 4, 2]*3 renvoie la liste [1, 4, 2, 1, 4, 2, 1, 4, 2]. \item[-] La fonction len prend en argument d'entrée une liste et renvoie le nombre d'éléments dans cette liste. Lorsqu'on applique cette fonction à un tableau Numpy à plusieurs lignes, elle renvoie le nombre de lignes du tableau. \item[-] La commande L. append (x) permet d'inclure l'élément x à la fin de la liste L. \item[-] Pour tout entier i entre 0 et n-1, la commande L.pop(i) retire de la liste L l'élément situé à la position i, et renvoie sa valeur.\\ Par exemple, à l'issue des instructions \begin{verbatim} L = [5, 4, 8, 1] a = L.pop(1) \end{verbatim} \end{itemize} la liste L vaut [5, 8, 1] et la variable a vaut 4.\\ La bibliothèque numpy. \begin{itemize} \item[-] Exemple d'importation : import numpy as np. \item[-] Les opérations +, -, *, /, **, lorsqu'elles sont possibles, peuvent être réalisées entre deux tableaux Numpy de tailles compatibles et agissent alors coefficient par coefficient. \item[-] La fonction np.eye prend en argument d'entrée un entier \(n\) et renvoie la matrice identité sous la forme d'un tableau Numpy. \item[-] La fonction np.zeros prend en arguments d'entrée une liste d'entiers \([n, p]\) et renvoie la matrice de \(n\) lignes et \(p\) colonnes dont tous les coefficients sont nuls sous la forme d'un tableau Numpy. \item[-] Si \(M\) et \(N\) sont deux tableaux Numpy la commande ( \(\mathrm{M}==\mathrm{N}\) ). all() renvoie True si \(M=N\) et False sinon. \item[-] La fonction np.dot prend en argument d'entrée deux tableaux Numpy de nombres \(M\) et \(N\) et renvoie le tableau Numpy correspondant au produit matriciel \(N M\) lorsque celui-ci existe. \item[-] La fonction np.mean prend en argument d'entrée un tableau Numpy de nombres, et renvoie la moyenne des éléments du tableau. \item[-] La fonction np.var prend en argument d'entrée un tableau Numpy de nombres, et renvoie la variance des éléments du tableau. \item[-] La fonction np.std prend en argument d'entrée un tableau Numpy de nombres, et renvoie l'écart-type des éléments du tableau. \item[-] La fonction np.cov prend en argument une série statistique à deux variables \((x, y)\) sous forme de tableau Numpy à deux lignes et renvoie, sous forme de tableau Numpy, la matrice suivante : \[ \left(\begin{array}{cc} v_{x} & s_{x, y} \\ s_{x, y} & v_{y} \end{array}\right), \] où \(v_{x}, v_{y}\) et \(s_{x, y}\) désignent respectivement la variance de la série statistique \(x\), la variance de la série statistique \(y\) et la covariance empirique de la série statistique double \((x, y)\). \end{itemize} La bibliothèque matplotlib.pyplot . \begin{itemize} \item[-] Exemple d'importation : import matplotlib.pyplot as plt. \item[-] La fonction plt.plot prend en arguments d'entrée deux listes de même longueur ou deux tableaux Numpy x et y à une ligne et de même longueur, et renvoie une figure constituée de la ligne brisée joignant les points du plan de coordonnées \(\left(x_{i}, y_{i}\right)\), où \(x_{i}\) et \(y_{i}\) sont respectivement les coefficients des tableaux/listes x et y. \item[-] La fonction plt.show, employée sans argument d'entrée, permet l'affichage d'une figure préalablement tracée, par exemple avec les fonctions plt.plot. \end{itemize} Le module numpy.random. \begin{itemize} \item[-] Exemple d'importation : import numpy.random as rd. \item[-] La fonction rd.randint prend deux entiers \(n\) et \(p\) (avec \(p>n\) ) en arguments d'entrée et renvoie une réalisation aléatoire de la loi uniforme discrète sur \(\llbracket n, p-1 \rrbracket\). \end{itemize} Le module numpy.linalg. \begin{itemize} \item[-] Exemple d'importation : import numpy.linalg as al. \item[-] La fonction al.inv prend un tableau Numpy \(M\) en argument d'entrée et renvoie l'inverse de \(M\) (au sens matriciel) sous la forme d'un tableau Numpy lorsqu'il existe et lève une erreur sinon. \item[-] La fonction al.matrix\_power prend un tableau Numpy \(M\) et un entier \(k\) en argument d'entrée et renvoie la matrice \(M^{k}\) sous la forme d'un tableau Numpy lorsque \(M\) est carrée et lève une erreur sinon. \end{itemize} \section*{Annexe B - Commandes SQL} La commande ORDER BY. La commande ORDER BY, placée en fin de requête et suivie d'un nom de colonne, permet de trier les résultats demandés dans l'ordre croissant des valeurs de la colonne spécifiée, ou dans l'ordre alphabétique s'il s'agit de données de type TEXT.\\ On peut ajouter le mot-clé DESC à la fin de la commande pour trier les données dans l'ordre décroissant.\\ Exemple : Une table etablissement contient les données suivantes concernant plusieurs établissements scolaires, leur nombre d'élèves et la ville où ils se situent. \begin{center} \begin{tabular}[t]{|l|l|l|l|} \hline identifiant & nom & nombre\_eleves & ville \\ \hline 1 & Edouard Herriot & 887 & Livry-Gargan \\ \hline 2 & Diderot & 220 & Lyon \\ \hline 3 & Edouard Herriot & 808 & Lyon \\ \hline 4 & Louise Michel & 653 & Champigny-sur-Marne \\ \hline 5 & Diderot & 1200 & Paris \\ \hline \end{tabular} \end{center} \begin{itemize} \item[-] Pour afficher les données en triant les noms d'établissement dans l'ordre alphabétique, on peut utiliser la requête suivante : \begin{verbatim} SELECT * FROM etablissement ORDER BY nom; \end{verbatim} \item[-] Pour afficher les noms des établissements dans l'ordre décroissant de nombre d'élèves, on peut utiliser la requête suivante : \begin{verbatim} SELECT nom FROM etablissement ORDER BY nombre_eleves DESC; \end{verbatim} \end{itemize} La fonction COUNT(). La fonction d'agrégation COUNT() permet de connaître le nombre d'enregistrements d'une table, vérifiant éventuellement une certaine condition.\\ Nous donnons ci-dessous deux exemples d'utilisation de la fonction COUNT(), en considérant une table nommée ma\_table comportant deux colonnes colonne\_1 et colonne\_2. \begin{itemize} \item[-] La requête suivante renvoie le nombre total d'enregistrements dans ma\_table : \begin{verbatim} SELECT COUNT(*) FROM ma_table; \end{verbatim} \item[-] La requête suivante renvoie le nombre d'enregistrements de ma\_table vérifiant la condition cond : \begin{verbatim} SELECT COUNT(*) FROM ma_table WHERE cond; \end{verbatim} \end{itemize} La fonction d'agrégation AVG(). La fonction AVG() permet de calculer la moyenne des valeurs d'une colonne dans une table. Par exemple, si on considère la table nommée table contenant les enregistrements suivants : \begin{center} \begin{tabular}[t]{|l|l|l|l|} \hline colonne\_1 & colonne\_2 & colonne\_3 & colonne\_4 \\ \hline 1 & 69 & Lyon & 4 \\ \hline 2 & 31 & Toulouse & 8 \\ \hline 3 & 54 & Nancy & 5 \\ \hline 4 & 64 & Saint-Jean-de-Luz & 17 \\ \hline 5 & 44 & Nantes & 6 \\ \hline \end{tabular} \end{center} alors la requête suivante \begin{verbatim} SELECT AVG (colonne_4) FROM table WHERE colonne_1 <= 3; \end{verbatim} affiche la moyenne des valeurs de colonne\_4 des trois premiers enregistrements : 5.6667 c'est-à-dire \(\frac{4+8+5}{3}\).\\ La commande GROUP BY. La commande GROUP BY permet de regrouper tous les enregistrements dont la valeur d'un attribut donné est identique, en appliquant une fonction à chaque groupe d'enregistrements.\\ Exemple : Une table etablissement contient les données suivantes concernant plusieurs établissements scolaires, leur nombre d'élèves et la ville où ils se situent. \begin{center} \begin{tabular}[t]{|l|l|l|l|} \hline identifiant & nom & nombre\_eleves & ville \\ \hline 1 & Pierre-Gilles de Gennes & 598 & Paris \\ \hline 2 & Diderot & 220 & Lyon \\ \hline 3 & Edouard Herriot & 808 & Lyon \\ \hline 4 & Paul Valéry & 525 & Paris \\ \hline 5 & Edouard Herriot & 887 & Livry-Gargan \\ \hline 6 & Diderot & 1200 & Paris \\ \hline \end{tabular} \end{center} On peut calculer le nombre d'établissements dans chaque ville à l'aide de la requête suivante : \begin{verbatim} SELECT ville, COUNT(*) FROM etablissement GROUP BY ville; \end{verbatim} On obtient alors le résultat suivant : \begin{center} \begin{tabular}[t]{|l|l|} \hline ville & COUNT(*) \\ \hline Livry-Gargan & 1 \\ \hline Lyon & 2 \\ \hline Paris & 3 \\ \hline \end{tabular} \end{center} On peut de plus renommer les colonnes de cette nouvelle table : \begin{verbatim} SELECT ville, COUNT(*) AS nombre_etab FROM etablissement GROUP BY ville; \end{verbatim} On obtient alors le résultat suivant : \begin{center} \begin{tabular}[t]{|l|l|} \hline ville & nombre\_etab \\ \hline Livry-Gargan & 1 \\ \hline Lyon & 2 \\ \hline Paris & 3 \\ \hline \end{tabular} \end{center} La commande INNER JOIN. La commande INNER JOIN permet de réaliser la jointure de deux tables. Cette commande retourne les enregistrements lorsqu'il y a au moins une ligne dans chaque table qui correspond à la condition.\\ Exemple : Une table etablissement contient pour plusieurs établissements scolaires leur identifiant, leur nom et la ville où ils se situent. \begin{center} \begin{tabular}[t]{|l|l|l|} \hline ident & nom & ville \\ \hline 1 & Pierre-Gilles de Gennes & Paris \\ \hline 2 & Diderot & Lyon \\ \hline 3 & Edouard Herriot & Lyon \\ \hline 4 & Paul Valéry & Paris \\ \hline 5 & Edouard Herriot & Livry-Gargan \\ \hline 6 & Diderot & Paris \\ \hline \end{tabular} \end{center} Une seconde table effectifs contient pour plusieurs établissements scolaires leur identifiant et leur nombre d'élèves. \begin{center} \begin{tabular}[t]{|l|l|} \hline ident & eleves \\ \hline 1 & 598 \\ \hline 2 & 220 \\ \hline 3 & 808 \\ \hline 4 & 525 \\ \hline 5 & 887 \\ \hline 6 & 1200 \\ \hline \end{tabular} \end{center} On peut alors créer une table contenant pour chaque établissement son nom et son nombre d'élèves : \begin{verbatim} SELECT nom, eleves FROM etablissement INNER JOIN effectifs ON etablissement.ident = effectifs.ident; \end{verbatim} On obtient alors le résultat suivant : \begin{center} \begin{tabular}[t]{|l|l|} \hline nom & eleves \\ \hline Pierre-Gilles de Gennes & 598 \\ \hline Diderot & 220 \\ \hline Edouard Herriot & 808 \\ \hline Paul Valéry & 525 \\ \hline Edouard Herriot & 887 \\ \hline Diderot & 1200 \\ \hline \end{tabular} \end{center} \begin{center} \includegraphics[max width=\textwidth, alt={}]{42a582cf-644e-48df-88c4-d6fffa174d6e-12_78_81_2010_993} \end{center} \end{document}