En partenariat avec
Annale

ECRICOME 2026Maths appliquées

Connectez-vous pour consulter le corrigé.

Accès complet à tous les corrigés avec un abonnement.
Essai gratuit 48h — accès immédiat, sans CB.

ÉcoleECRICOME
Année2026
OptionMaths appliquées
Thème principalAlgèbre, Analyse, Probabilités
ChapitresCalcul matriciel, Diagonalisation, Suites, Fonctions, Calcul intégral, Equations différentielles, Systèmes différentiels, Séries, Formules de Taylor, Intégrales impropres, Statistiques, Espaces probabilisés, Variables aléatoires discrètes, Vecteurs aléatoires discrets, Informatique, Bases de données
Commentaire

Ce sujet est équilibré et conforme aux attendus classiques de la filière ECG.

Il mobilise des outils variés du programme — probabilités discrètes, régression linéaire, développements limités, séries alternées, systèmes différentiels linéaires et matrices nilpotentes — dans des cadres familiers, sans introduire de difficulté technique excessive.

L’exercice 1 combine efficacement probabilités et interprétation statistique, avec un prolongement naturel en SQL qui valorise les compétences transversales attendues dans la filière.

L’exercice 2 propose une étude progressive d'une fonction, menant à une approximation de ln(2) par des méthodes classiques de séries alternées.

Enfin l’exercice 3 articule résolution de systèmes différentiels et exponentielle de matrices nilpotentes, dans un cadre accessible mais structurant.

L’ensemble constitue un sujet progressif, discriminant par la qualité de la rédaction et de l’organisation des raisonnements plus que par la technicité des calculs.

Exercice 1

Soit \(\displaystyle 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,\mathcal{A},\mathbb{P})\).

Un particulier souhaite assurer un nouveau bien. Il consulte pour cela un site internet qui diffuse un classement de \(\displaystyle n\) compagnies d’assurances, de la mieux classée par les utilisateurs (compagnie \(\displaystyle \mathrm{n}^{\circ} 1\)) à la moins bien classée (compagnie \(\displaystyle \mathrm{n}^{\circ} 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 \(\displaystyle n\) compagnies proposées.

On note \(\displaystyle 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 \(\displaystyle Y\) la variable aléatoire égale au numéro, dans le classement, de la compagnie choisie pour cette seconde année.

  1. Identifier la loi de la variable aléatoire \(\displaystyle X\). Donner son espérance et sa variance.

  2. Montrer que la loi conjointe du couple \((\displaystyle X, Y )\) est donnée par : \[\forall(j, k) \in \left[\!\left[1, n\right]\!\right]^{2}, \ \mathbb{P}([X=j] \cap[Y=k])= \begin{cases} \displaystyle \frac{1}{n j} & \text { si } k \leqslant j \\ \hfill 0 \hfill & \text { si } k \geqslant j+1 \rule[0pt]{0pt}{20pt}\end{cases}\]

  3. En déduire la valeur, en fonction de \(\displaystyle n\), de la somme double suivante : \(\displaystyle \sum_{k=1}^{n} \sum_{j=k}^{n} \frac{1}{j}\).

  4. Pour tout entier naturel \(\displaystyle k\) de \(\displaystyle \left[\!\left[1, n\right]\!\right]\), exprimer \(\displaystyle \mathbb{P}(Y=k)\) sous la forme d’une somme.

    1. Montrer que \(\displaystyle \sum_{k=1}^{n} \sum_{j=k}^{n} \frac{k}{j}=\frac{1}{2} \sum_{j=1}^{n}(j+1)\).

    2. Justifier que \(\displaystyle Y\) admet une espérance et montrer que l’espérance de \(\displaystyle Y\) vaut \(\displaystyle \frac{n+3}{4}\).

    1. Justifier que l’espérance de la variable aléatoire \(\displaystyle X Y\) existe et vérifie : \[\mathbb{E}(X Y)=\frac{1}{2 n} \sum_{j=1}^{n} j \left( j+1 \right)\]

    2. En déduire l’expression de \(\displaystyle \mathbb{E}(X Y)\) en fonction de \(\displaystyle n\).

    3. Déterminer la covariance du couple \((\displaystyle X, Y )\) en fonction de \(\displaystyle n\).

  5. Les variables aléatoires \(\displaystyle X\) et \(\displaystyle Y\) sont-elles indépendantes?

    1. Écrire une fonction en langage Python nommée simulXY, prenant en argument d’entrée l’entier \(\displaystyle n\), et renvoyant une réalisation du couple de variables aléatoires \(\displaystyle (X, Y)\).

    2. On considère une série statistique à deux variables \(\displaystyle (x, y)\).

      Expliquer ce que renvoie la fonction Myst suivante qui prend en argument d’entrée la série statistique \((\displaystyle x, y )\) sous forme de tableau numpy à deux lignes.

      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)
    3. On a représenté ci-après plusieurs tracés figurant le nuage de points \(\displaystyle \left(x_{i}, y_{i}\right)_{i \in \left[\!\left[1,1000\right]\!\right]}\) correspondant à 1000 réalisations du couple \((\displaystyle X, Y )\) pour \(\displaystyle n=100\) et le point moyen de la série statistique (i.e. le point de coordonnées \(\displaystyle (\overline{x}, \overline{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.

      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.

  6. On note \(\displaystyle A_{n}\) l’événement: « le particulier choisit la même compagnie d’assurances lors des deux années considérées ».

    1. Exprimer l’événement \(\displaystyle A_{n}\) à l’aide des variables aléatoires \(\displaystyle X\) et \(\displaystyle Y\).

    2. Montrer que: \(\displaystyle \mathbb{P}\left(A_{n}\right)=\frac{1}{n} \sum_{j=1}^{n} \frac{1}{j}\).

    3. Montrer que, pour tout entier naturel \(\displaystyle j\) non nul, \(\displaystyle \frac{1}{j+1} \leqslant \ln (j+1)-\ln (j) \leqslant \frac{1}{j}\).

    4. En déduire que \(\displaystyle \frac{\ln (n+1)}{n} \leqslant \mathbb{P}\left(A_{n}\right) \leqslant \frac{1}{n}+\frac{\ln (n)}{n}\).

    5. Montrer que \(\displaystyle \mathbb{P}\left(A_{n}\right) \underset{n \rightarrow+\infty}{\sim} \frac{\ln (n)}{n}\).

  7. Pour répondre aux questions suivantes, on pourra se référer aux commandes 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:

    • assure (de type INTEGER) : un numéro permettant d’identifier l’assuré.

    • id_2025 (de type INTEGER) : un code permettant d’identifier la compagnie d’assurances à laquelle l’assuré a souscrit en 2025.

    • id_2026 (de type INTEGER) : un code permettant d’identifier la compagnie d’assurances à laquelle l’assuré a souscrit en 2026.

    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 :

    • id (de type INTEGER) : un code permettant d’identifier la compagnie d’assurances.

    • nom (de type TEXT) : le nom de la compagnie d’assurances.

    Le format de la table adherent est illustré dans le tableau ci-dessous.

    assure id_2025 id_2026
    1003 3 3
    1004 4 2
    1005 1 1
    1006 3 4
    1007 2 4

    Le format de la table compagnie est illustré dans le tableau ci-dessous.

    id nom
    1 Assurplus
    2 Garantia
    3 SecurVie
    4 MutuelPro
    1. É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.

    2. Expliquer ce que réalise la commande SQL suivante :

      SELECT assure, nom
      FROM adherent INNER JOIN compagnie
      ON adherent.id_2026 = compagnie.id;
    3. 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 :

      • id (de type INTEGER) : un numéro permettant d’identifier l’avis.

      • usr (de type TEXT) : le nom d’utilisateur de la personne ayant déposé l’avis.

      • compagnie (de type INTEGER) : un code permettant d’identifier la compagnie d’assurances évaluée dans l’avis.

      • note (de type INTEGER) : la note sur 10 attribuée par l’utilisateur à la compagnie évaluée.

      • commentaire (de type TEXT) : l’appréciation déposée par l’utilisateur sur la compagnie.

      Le format de la table avis est illustré dans le tableau ci-dessous.

      id usr compagnie note commentaire
      5001 alice 92 1 8 Très bon service!
      5002 karimBoss 2 6 Service correct.
      5004 david123 3 7 Bon rapport qualité-prix.
      5005 emma_p 2 5 Déçue par le service.
      5007 alice 92 3 8 Très professionnels.
      5008 david123 4 9 Service impeccable.

      É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.

    4. 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.

Exercice 2

On considère la fonction \(\displaystyle f\) définie par \[f(x)=\ln \! \left(\frac{1}{1-x}\right)\]

Partie I

  1. Déterminer le domaine de définition de \(\displaystyle f\).

    Dans les questions qui suivent, on note \(\displaystyle I\) le domaine de définition de \(\displaystyle f\).

  2. Calculer les limites de \(\displaystyle f\) aux bornes de son domaine de définition.

  3. Dresser le tableau de variations de \(\displaystyle f\) sur \(\displaystyle I\).

    1. Déterminer le développement limité à l’ordre 2 de \(\displaystyle f\) en 0.

    2. En déduire une équation de la tangente à la courbe représentative de \(\displaystyle f\) au point d’abscisse 0, ainsi que la position relative de la courbe par rapport à sa tangente au voisinage de ce point.

  4. Représenter, dans un même repère orthonormé, l’allure de la courbe représentative de \(\displaystyle f\) et sa tangente au point d’abscisse 0.

Partie II

Pour tout entier naturel \(\displaystyle n\) non nul et tout réel \(\displaystyle x\), on pose : \[S_{n}(x)=\sum_{k=1}^{n} \frac{x^{k}}{k}\]

    1. Donner la nature de la série \(\displaystyle \sum_{k \geqslant 1} \frac{1}{k}\).

    2. Étudier la monotonie de la suite \(\displaystyle \left(S_{n}(1)\right)_{n \in \mathbb{N}^{*}}\).

    3. En déduire que \(\displaystyle \lim _{n \rightarrow+\infty} S_{n}(1)=+\infty\).

  1. Montrer que, pour tout réel \(\displaystyle x\) de \(\displaystyle ]-1,1[\), la série \(\displaystyle \sum_{k \geqslant 1} \frac{x^{k}}{k}\) converge absolument.

    1. Montrer que les suites \(\displaystyle \left(S_{2 n}(-1)\right)_{n \in \mathbb{N}^{*}}\) et \(\displaystyle \left(S_{2 n+1}(-1)\right)_{n \in \mathbb{N}^{*}}\) sont adjacentes.

    2. En déduire que la suite \(\displaystyle \left(S_{n}(-1)\right)_{n \in \mathbb{N}^{*}}\) est convergente.

      On admet que \(\displaystyle \lim _{n \rightarrow+\infty} S_{n}(-1)=\sum_{k=1}^{+\infty} \frac{(-1)^{k}}{k}=-\ln (2)\).

    3. En utilisant la monotonie des suites \(\displaystyle \left(S_{2 n}(-1)\right)_{n \in \mathbb{N}^{*}}\) et \(\displaystyle \left(S_{2 n+1}(-1)\right)_{n \in \mathbb{N}^{*}}\), montrer que \[\forall n \in \mathbb{N}^{*}, \ \left| \ln (2)+S_{2 n}(-1) \right| \leqslant S_{2 n}(-1)-S_{2 n+1}(-1)\]

    4. Montrer que, pour tout entier naturel \(\displaystyle n\) non nul, \(\displaystyle \left|\ln (2)+S_{n}(-1)\right| \leqslant \frac{1}{n}\).

  2. Dans cette question uniquement, \(\displaystyle x\) est un réel strictement supérieur à 1.

    1. Déterminer la nature de la série \(\displaystyle \sum_{k \geqslant 1} \frac{x^{k}}{k}\).

      Pour tout \(\displaystyle x \in [-1,1 [\), on pose \(\displaystyle S(x)=\lim _{n \rightarrow+\infty} S_{n}(x)=\sum_{k=1}^{+\infty} \frac{x^{k}}{k}\).

    2. En déduire la limite de la suite \(\displaystyle \left(S_{n}(x)\right)_{n \in \mathbb{N}^{*}}\).

Partie III

Dans toute cette partie, \(\displaystyle a\) désigne un réel fixé dans l’intervalle \(\displaystyle ]-1,1[\).

Pour tout entier naturel \(\displaystyle n\) non nul, on considère l’intégrale notée \(\displaystyle R_{n}(a)\) définie par : \[R_{n}(a)=\int_{0}^{a} \frac{(a-t)^{n}}{(1-t)^{n+1}} \,\mathrm{d}t\]

On considère à nouveau la fonction \(\displaystyle f\) définie à la Partie I ainsi que la suite \(\displaystyle \left(S_{n}(x)\right)_{n \geqslant 1}\) et la fonction \(\displaystyle S\) définies à la Partie II.

    1. Déterminer en fonction de \(\displaystyle a\) les valeurs de \(\displaystyle \int_{0}^{a} \frac{1}{1-t} \,\mathrm{d}t\) et \(\displaystyle \int_{0}^{a} \frac{1}{(1-t)^{2}} \,\mathrm{d}t\).

    2. Montrer que \(\displaystyle f(a)=a+R_{1}(a)\).

      Indication : On pourra écrire \(\displaystyle a-t=(a-1)+(1-t)\).

  1. Montrer par intégration par parties que, pour tout entier naturel \(\displaystyle n\) non nul \[R_{n}(a)=\frac{a^{n+1}}{n+1}+R_{n+1}(a)\]

  2. En utilisant les résultats des questions 10b et 11, montrer que, pour tout entier naturel \(\displaystyle n\) non nul \[f(a)=S_{n}(a)+R_{n}(a).\]

    Indication : On pourra procéder par récurrence.

  3. Dans cette question uniquement, on suppose que \(\displaystyle a \in[0,1[\).

    1. Montrer que pour tout réel \(\displaystyle t\) de \(\displaystyle [0, a]\), \(\displaystyle 0 \leqslant \frac{a-t}{1-t} \leqslant a\).

    2. Montrer que, pour tout entier naturel \(\displaystyle n\) non nul, \(\displaystyle 0 \leqslant R_{n}(a) \leqslant \frac{a^{n+1}}{1-a}\).

    3. En déduire que \(\displaystyle f(a)=S(a)\).

    1. En utilisant les résultats des questions précédentes, justifier que, pour tout entier naturel \(\displaystyle n\) non nul, \[\left|\ln (2)-\sum_{k=1}^{n} \frac{1}{k 2^{k}}\right| \leqslant \frac{1}{2^{n}}\]

    2. Écrire une fonction en langage Python, nommée Val, prenant en argument eps désignant le réel \(\displaystyle \varepsilon\) strictement positif, qui renvoie une valeur approchée de \(\displaystyle \ln (2)\) à \(\displaystyle \varepsilon\) près.

    3. Dans la figure suivante sont représentés les tracés des premiers termes des suites \(\displaystyle \left(S_{n}\left(\frac{1}{2}\right)\right)_{n \in \mathbb{N}^{*}}\) et \(\displaystyle \left(-S_{n}(-1)\right)_{n \in \mathbb{N}^{*}}\). Identifiez les suites dans cette figure.

Exercice 3

Partie I

On considère le problème de Cauchy \(\displaystyle (\mathscr{C})\) suivant, d’inconnues \(\displaystyle x: \mathbb{R} \longrightarrow \mathbb{R}\) et \(\displaystyle y: \mathbb{R} \longrightarrow \mathbb{R}\) dérivables : \[\forall t \in \mathbb{R}, \ \begin{cases} x^{\prime}(t)=x(t)+y(t) \tag{$\mathscr{C}$}\\ y^{\prime}(t)=-x(t)-y(t) \\ x(0)=1 \\ y(0)=1 \end{cases}\]

Dans cette partie, on suppose que \(\displaystyle x\) et \(\displaystyle y\) sont solutions de \(\displaystyle (\mathscr{C})\).

On pose, pour tout \(\displaystyle t\) réel, \(\displaystyle s(t)=x(t)+y(t)\).

  1. Déterminer une expression de la fonction \(\displaystyle s^{\prime}\).

  2. En déduire une relation entre \(\displaystyle x(t)\) et \(\displaystyle y(t)\) pour tout réel \(\displaystyle t\).

  3. Déterminer l’unique couple de solutions du problème de Cauchy \(\displaystyle (\mathscr{C})\).

Partie II

On considère les matrices \(\displaystyle A= \begin{pmatrix} 1 & 1 \\ -1 & -1 \end{pmatrix}\), \(J= \begin{pmatrix} 0 & 1 \\ 0 & 0 \end{pmatrix}\) et \(\displaystyle \mathrm{P}= \begin{pmatrix} 1 & 0 \\ -1 & 1 \end{pmatrix}\).

  1. Montrer que la matrice \(\displaystyle P\) est inversible et calculer son inverse.

  2. Montrer que \(\displaystyle A\) possède une unique valeur propre que l’on déterminera.

  3. La matrice \(\displaystyle A\) est-elle diagonalisable ?

  4. Montrer que \(\displaystyle J=P^{-1} A P\).

Dans la suite de cette partie, on considère le système différentiel \((\displaystyle \mathscr{S} )\) défini par :

\[\forall t \in \mathbb{R}, \ \begin{cases} x^{\prime}(t)=x(t)+y(t) \tag{$\mathscr{S}$}\\ y^{\prime}(t)=-x(t)-y(t) \end{cases}\]

Pour toutes fonctions \(\displaystyle x\) et \(\displaystyle y\) dérivables sur \(\displaystyle \mathbb{R}\), on pose, pour tout réel \(t\) \[X(t)= \begin{pmatrix} x(t) \\ y(t) \end{pmatrix} \quad \text{et} \quad X^{\prime}(t)=\begin{pmatrix} x'(t) \\ y'(t) \end{pmatrix}\]

On pose également, pour tout réel \(\displaystyle t, Y(t)=P^{-1} X(t)=\begin{pmatrix} u(t) \\ v(t) \end{pmatrix}\) et \(\displaystyle Y^{\prime}(t)=\begin{pmatrix} u'(t) \\ v'(t) \end{pmatrix}\).

  1. Déterminer les états d’équilibre du système \((\displaystyle \mathscr{S} )\).

  2. Montrer que \(\displaystyle x\) et \(\displaystyle y\) sont solutions de \(\displaystyle (\mathscr{S})\) si et seulement si, pour tout réel \(\displaystyle t, Y^{\prime}(t)=J Y(t)\).

  3. Déterminer l’ensemble des solutions \(\displaystyle Y(t)=\begin{pmatrix} u(t) \\ v(t) \end{pmatrix}\) du système différentiel \(\displaystyle Y^{\prime}(t)=J Y(t)\).

  4. En déduire les solutions du système différentiel \((\displaystyle \mathscr{S} )\).

Partie III

Soit \(\displaystyle n\) un entier naturel non nul.

Une matrice de \(\displaystyle \mathcal{M}_{n}(\mathbb{R})\) est dite nilpotente quand il existe un entier naturel \(\displaystyle k\) tel que \(\displaystyle M^{k}=0_{n}\), où \(\displaystyle 0_{n}\) désigne la matrice nulle de \(\displaystyle \mathcal{M}_{n}(\mathbb{R})\).

On admet que, pour toute matrice \(\displaystyle M\) nilpotente de \(\displaystyle \mathcal{M}_{n}(\mathbb{R})\), il existe un entier naturel \(\displaystyle p\) non nul et inférieur ou égal à \(\displaystyle n\) tel que \(\displaystyle M^{p-1} \neq 0_{n}\) et \(\displaystyle \forall k \geqslant p\), \(M^{k}=0_{n}. p\) est appelé l’indice de nilpotence de \(\displaystyle M\).

On considère le système différentiel \((\displaystyle \mathscr{E} )\) à \(\displaystyle n\) équations, d’inconnues \(\displaystyle x_{1}, x_{2}, \ldots, x_{n}\) dérivables sur \(\displaystyle \mathbb{R}\), défini par : \[\forall t \in \mathbb{R}, \quad X^{\prime}(t)=N X(t), \quad \text { où } \quad X(t)=\begin{pmatrix} x_{1}(t) \\ x_{2}(t) \\ \vdots \\ x_{n}(t) \end{pmatrix}, \quad X^{\prime}(t)= \begin{pmatrix} x_{1}^{\prime}(t) \\ x_{2}^{\prime}(t) \\ \vdots \\ x_{n}^{\prime}(t) \end{pmatrix} \tag{$\mathscr{E}$}\]

et \(\displaystyle N\) est une matrice nilpotente non nulle de \(\displaystyle \mathcal{M}_{n}(\mathbb{R})\). On note \(\displaystyle p\) l’indice de nilpotence de \(\displaystyle N\).

  1. Écrire une fonction, en langage Python, nommée Nil, qui prend en entrée une matrice \(\displaystyle M\) et qui renvoie \(\displaystyle p\) lorsque la matrice \(\displaystyle M\) est nilpotente d’indice de nilpotence \(\displaystyle p\) et 0 sinon.

  2. Montrer que la matrice \(\displaystyle N\) possède une unique valeur propre que l’on déterminera.

  3. Justifier par l’absurde que la matrice \(\displaystyle N\) n’est pas diagonalisable.

Pour tout réel \(\displaystyle t\), on définit la matrice \(\displaystyle B(t)\) de \(\displaystyle \mathcal{M}_{n}(\mathbb{R})\) par

\[B(t)=\sum_{k=0}^{p-1} \frac{t^{k}}{k!} N^{k},\]

et la matrice colonne \(\displaystyle X(t)\) de \(\displaystyle \mathcal{M}_{n, 1}(\mathbb{R})\) par

\[X(t)=B(t) X_{0}\]

\(\displaystyle X_{0}\) est une matrice colonne de \(\displaystyle \mathcal{M}_{n, 1}(\mathbb{R})\).

  1. Justifier que, pour tout réel \(\displaystyle t\),

\[X^{\prime}(t)=\sum_{k=1}^{p-1} \frac{t^{k-1}}{(k-1)!} N^{k} X_{0}.\]

  1. En déduire que \(\displaystyle X(t)\) est l’unique solution du problème de Cauchy défini par le système différentiel \((\displaystyle \mathscr{E} )\) et la condition initiale \(\displaystyle X(0)=X_{0}\).

  2. 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 \(\displaystyle B(t)\).

    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

Annexe A - Fonctions Python utiles

Manipulation de listes. On suppose que L désigne une liste à n éléments.

  • 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.

    Par exemple, [1, 2, 5] + [4, 3] renvoie la liste [1, 2, 5, 4, 3].

  • 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.

    Par exemple, [1, 4, 2] *3 renvoie la liste [1, 4, 2, 1, 4, 2, 1, 4, 2].

  • 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.

  • La commande L. append(x) permet d’inclure l’élément x à la fin de la liste L.

  • 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

L = [5, 4, 8, 1]
a = L.pop(1)

la liste L vaut \(\displaystyle [5,8,1]\) et la variable a vaut 4.

La bibliothèque numpy.

  • Exemple d’importation : import numpy as np.

  • 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.

  • La fonction np.eye prend en argument d’entrée un entier \(\displaystyle n\) et renvoie la matrice identité sous la forme d’un tableau numpy.

  • La fonction np.zeros prend en arguments d’entrée une liste d’entiers \(\displaystyle [n, p]\) et renvoie la matrice de \(\displaystyle n\) lignes et \(\displaystyle p\) colonnes dont tous les coefficients sont nuls sous la forme d’un tableau numpy.

  • Si \(\displaystyle M\) et \(\displaystyle N\) sont deux tableaux numpy la commande (M==N).all() renvoie True si \(\displaystyle M=N\) et False sinon.

  • La fonction np.dot prend en argument d’entrée deux tableaux numpy de nombres \(\displaystyle M\) et \(\displaystyle N\) et renvoie le tableau numpy correspondant au produit matriciel \(\displaystyle N M\) lorsque celui-ci existe.

  • La fonction np.mean prend en argument d’entrée un tableau numpy de nombres, et renvoie la moyenne des éléments du tableau.

  • La fonction np.var prend en argument d’entrée un tableau numpy de nombres, et renvoie la variance des éléments du tableau.

  • 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.

  • La fonction np.cov prend en argument une série statistique à deux variables \((\displaystyle x, y )\) sous forme de tableau numpy à deux lignes et renvoie, sous forme de tableau numpy, la matrice suivante : \[\begin{pmatrix} v_{x} & s_{x, y} \\ s_{x, y} & v_{y} \end{pmatrix}\]

    \(\displaystyle v_{x}, v_{y}\) et \(\displaystyle s_{x, y}\) désignent respectivement la variance de la série statistique \(\displaystyle x\), la variance de la série statistique \(\displaystyle y\) et la covariance empirique de la série statistique double \(\displaystyle (x, y)\).

La bibliothèque matplotlib.pyplot.

  • Exemple d’importation : import matplotlib.pyplot as plt.

  • 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 \(\displaystyle \left(x_{i}, y_{i}\right)\), où \(\displaystyle x_{i}\) et \(\displaystyle y_{i}\) sont respectivement les coefficients des tableaux/listes x et y.

  • 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.

Le module numpy.random.

  • Exemple d’importation : import numpy.random as rd.

  • La fonction rd.randint prend deux entiers \(\displaystyle n\) et \(\displaystyle p\) (avec \(\displaystyle p>n )\) en arguments d’entrée et renvoie une réalisation aléatoire de la loi uniforme discrète sur \(\displaystyle \left[\!\left[n, p-1\right]\!\right]\).

Le module numpy.linalg.

  • Exemple d’importation : import numpy.linalg as al.

  • La fonction al.inv prend un tableau numpy \(\displaystyle M\) en argument d’entrée et renvoie l’inverse de \(\displaystyle M\) (au sens matriciel) sous la forme d’un tableau numpy lorsqu’il existe et lève une erreur sinon.

  • La fonction al.matrix_power prend un tableau numpy \(\displaystyle M\) et un entier \(\displaystyle k\) en argument d’entrée et renvoie la matrice \(\displaystyle M^{k}\) sous la forme d’un tableau numpy lorsque \(\displaystyle M\) est carrée et lève une erreur sinon.

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.

identifiant nom nombre_eleves ville
1 Edouard Herriot 887 Livry-Gargan
2 Diderot 220 Lyon
3 Edouard Herriot 808 Lyon
4 Louise Michel 653 Champigny-sur-Marne
5 Diderot 1200 Paris
  • Pour afficher les données en triant les noms d’établissement dans l’ordre alphabétique, on peut utiliser la requête suivante :

    SELECT * FROM etablissement
    ORDER BY nom;
  • Pour afficher les noms des établissements dans l’ordre décroissant de nombre d’élèves, on peut utiliser la requête suivante :

    SELECT nom FROM etablissement
    ORDER BY nombre_eleves DESC;

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.

  • La requête suivante renvoie le nombre total d’enregistrements dans ma_table :

    SELECT COUNT(*) FROM ma_table;
  • La requête suivante renvoie le nombre d’enregistrements de ma_table vérifiant la condition cond :

    SELECT COUNT(*) FROM ma_table
    WHERE cond ;

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 :

colonne_1 colonne_2 colonne_3 colonne_4
1 69 Lyon 4
2 31 Toulouse 8
3 54 Nancy 5
4 64 Saint-Jean-de-Luz 17
5 44 Nantes 6

alors la requête suivante

SELECT AVG(colonne_4)
FROM table
WHERE colonne_1 <= 3;

affiche la moyenne des valeurs de colonne_4 des trois premiers enregistrements : 5.6667 c’est-à-dire \(\displaystyle \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.

identifiant nom nombre_eleves ville
1 Pierre-Gilles de Gennes 598 Paris
2 Diderot 220 Lyon
3 Edouard Herriot 808 Lyon
4 Paul Valéry 525 Paris
5 Edouard Herriot 887 Livry-Gargan
6 Diderot 1200 Paris

On peut calculer le nombre d’établissements dans chaque ville à l’aide de la requête suivante :

SELECT ville, COUNT(*)
FROM etablissement
GROUP BY ville;

On obtient alors le résultat suivant :

ville COUNT \(\displaystyle (*)\)
Livry-Gargan 1
Lyon 2
Paris 3

On peut de plus renommer les colonnes de cette nouvelle table :

SELECT ville, COUNT(*) AS nombre_etab
FROM etablissement
GROUP BY ville;

On obtient alors le résultat suivant :

ville nombre_etab
Livry-Gargan 1
Lyon 2
Paris 3

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.

ident nom ville
1 Pierre-Gilles de Gennes Paris
2 Diderot Lyon
3 Edouard Herriot Lyon
4 Paul Valéry Paris
5 Edouard Herriot Livry-Gargan
6 Diderot Paris

Une seconde table effectifs contient pour plusieurs établissements scolaires leur identifiant et leur nombre d’élèves.

ident eleves
1 598
2 220
3 808
4 525
5 887
6 1200

On peut alors créer une table contenant pour chaque établissement son nom et son nombre d’élèves :

SELECT nom, eleves
FROM etablissement INNER JOIN effectifs
ON etablissement.ident = effectifs.ident;

On obtient alors le résultat suivant :

nom eleves
Pierre-Gilles de Gennes 598
Diderot 220
Edouard Herriot 808
Paul Valéry 525
Edouard Herriot 887
Diderot 1200

Tu veux le corrigé détaillé ?

Le corrigé pas à pas, les aides et les explications sont disponibles dans la plateforme.

error: Ce contenu est protégé !