Python

Dans cet article, on va revenir sur les questions d’informatique du sujet de concours suivant : EDHEC ECS 2022. Les questions de Scilab ont été traduites en Python pour te permettre de t’entraîner en informatique. Tu peux utiliser cet article comme traduction de la partie Scilab du sujet d’origine, ou bien comme un exercice sur les thèmes de Python abordés par le sujet, à savoir : listes, matrices, simulation de variables aléatoires et calcul d’une somme.

Exercice 2

❌ Cet exercice n’est pas faisable en première année.

❓ Énoncé

Compléter la fonction Python suivante pour que, lorsque l’utilisateur entre la commande k(A) où A désigne une matrice carrée, Python affiche le réel \(k=\max\left\{|\lambda|,\lambda\in\text{Sp}(A)\right\}\) :

✏️ Corrigé

L’énoncé nous demande de compléter ce programme en une seule ligne. Pour cela, on va avoir besoin de ces quelques notions de Python.

Premièrement, il faut que tu sois familier avec la notion de liste construite à partir d’une autre.

Par exemple, considérons le programme Python suivant :

Ici, on crée une liste L1 contenant les nombres 1, 2 et 3, puis la liste L2 qui est la liste contenant les carrés de chacun des éléments de L1. Ce programme affichera donc : [1, 4, 9].

Dans le programme précédent, on a choisi la fonction \(x\mapsto x^2\), mais on aurait pu prendre n’importe quelle fonction d’une variable réelle. Prenons un autre exemple :

De même, L4 est la liste contenant l’exponentielle de chacun des éléments de L3. Le programme affichera donc : [1, 2].

Il y a également deux commandes qui nous seront utiles :

  • Si L est une liste de nombres réels, la commande max(L) renvoie le maximum de ses éléments.
  • Lorsqu’on importe « import numpy.linalg as al », la commande al.eigvals(A) renvoie une liste, qui contient les valeurs propres de la matrice A.

On combine toutes ces techniques pour afficher \(\max\left\{|\lambda|,\lambda\in\text{Sp}(A)\right\}\).

Par exemple, on peut proposer le programme suivant :

Exercice 3

✅ Cet exercice est faisable en première année !

❓ Énoncé

Soit \(X\) une variable aléatoire suivant la loi de Bernoulli de paramètre \(p\).

On considère une suite \((X_n)_{n\in\mathbb N^*}\) de variables aléatoires mutuellement indépendantes et suivant toutes la même loi que \(X\).

On suppose que \(N\) est une variable aléatoire telle que \(N-1\) suit la loi de Poisson de paramètre \(\lambda\).

On pose \(S=\sum_{i=1}^NX_i\).

Compléter la fonction Python suivante pour qu’elle permette de calculer la valeur prise par \(S\) :

✏️ Corrigé

Commençons par analyser l’énoncé.

Non seulement \(S\) est une somme dont chacun des termes est une variable aléatoire… mais le nombre de termes \(N\) est également aléatoire.

On va donc commencer par simuler la valeur de \(N\), puis ensuite on pourra simuler \(S\).

Plus précisément, on sait que \(N-1\) suit la loi de Poisson de paramètre \(\lambda\). Or : \(N = (N-1) + 1\).

Ainsi, pour simuler \(N\), il suffit de simuler une loi de Poisson de paramètre \(\lambda\) grâce à la commande rd.poisson(lbda), et de rajouter 1 au résultat final.

Ensuite, pour calculer la somme, on va réutiliser la technique vue dans l’exercice précédent sur les listes, pour faire tenir le calcul de la somme en une ligne.

Il suffit de créer une liste contenant chacun des termes de la somme, puis d’utiliser la commande sum qui renvoie la somme des éléments d’une liste.

Chaque terme de la somme est une simulation de la loi de Bernoulli de paramètre \(p\), autrement dit de la loi binomiale de paramètres \((1,p)\).

On peut donc simuler chaque terme avec la commande rd.binomial(1,p).

Ainsi, le programme suivant convient :

Problème

✅ Cet exercice est faisable en première année.

❓ Énoncé

On pose pour tout réel \(x\), \(\text{sh}(x)=\frac{e^x-e^{-x}}2\). Compléter le script Python suivant pour qu’il permette d’afficher la valeur de \(\sum_{k=1}^n\frac1{\text{sh}(kx)}\) lorsque \(n\) et \(x\) sont entrés par l’utilisateur :

✏️ Corrigé

Cette fois-ci, pas besoin d’utiliser les listes, puisque l’énoncé impose l’utilisation d’une boucle for.

On va donc utiliser la variable S, en lui rajoutant \(\frac1{\text{sh}(kx)}\) pour chaque entier \(k\) compris entre 1 et \(n\).

(Attention : range(1,n+1) s’arrête à \(n\) et non pas \(n+1\)… ce n’est pas une erreur d’énoncé)

On complète donc le programme de la manière suivante :

Conclusion

Voici les principales techniques que tu devrais retenir après ces quelques exercices :

  • Savoir écrire une liste L2 à partir d’une liste L1, ou à partir d’un « range ».
  • Retenir la commande al.eigvals(A), qui donne la liste des valeurs propres de la matrice \(A\). Il peut arriver qu’un sujet de concours utilise les valeurs propres dans un programme Python, c’était le cas à HEC 2023.
  • Savoir reformuler un énoncé pour faciliter le travail en Python (en gros : avoir le réflexe d’écrire \(N = (N-1) + 1\) par exemple).
  • Connaître absolument toutes les commandes pour simuler les lois de variables aléatoires classiques.
  • Savoir faire une somme en une ligne (voir exercice 3) aussi bien qu’avec une boucle for (voir problème).