Banque PT Modélisation PT 2019Sujet et corrigé
- Équation de propagation des ondes
- Résolution numérique d'équations différentielles (méthode d'Euler, méthode de Runge-Kutta)
- Discrétisation par différences finies
- Réduction des matrices et méthode de la puissance itérée
- Complexité algorithmique et recherche dichotomique
- Analyse dimensionnelle
Téléchargements
- Rapport du jury : non disponible
Présentation du sujet
Modélisation et simulation numérique des figures de Chladni sur une plaque vibranteAfficher ou masquer la section
Présentation du sujet
Le sujet part de l'expérience historique de Chladni pour construire un modèle d'équation d'onde décrivant les vibrations d'une plaque carrée. Il demande ensuite de résoudre ce modèle numériquement en Python, par intégration temporelle puis par discrétisation spatiale et recherche de valeurs propres, avant de confronter les résultats à des mesures expérimentales.
- 1I.1 Introduction du modèle physiqueÉtablit l'équation d'onde bidimensionnelle régissant la vibration de la plaque et sa célérité par analyse dimensionnelle.
- 2I.2 Modes de vibrationRecherche de solutions à variables séparables de l'équation d'onde.
- 3I.3 Simulation numérique temporelleRésolution numérique de l'équation temporelle par les méthodes d'Euler explicite, d'Euler implicite et de Runge-Kutta d'ordre deux, en Python.
- 4I.4 Discrétisation spatiale du problèmeDiscrétisation par différences finies de l'équation spatiale et mise sous forme matricielle du problème aux valeurs propres.
- 5I.5 Méthode de la puissance itéréeÉcriture en Python d'un algorithme de puissance itérée pour obtenir le vecteur propre et la valeur propre principaux d'une matrice.
- 6I.6 Représentation graphiqueExploitation d'un code fourni pour tracer et commenter les modes propres de la plaque.
- 7I.7 Distribution des valeurs propresÉcriture et comparaison d'algorithmes de recherche (recherche brute, dichotomie, masquage Numpy) dans le tableau des valeurs propres, avec analyse de complexité.
- 8I.8 Confrontation du modèle aux expériencesComparaison des fréquences de résonance mesurées à celles prédites par l'équation de dispersion du modèle, puis discussion de modèles alternatifs.
Ces sujets peuvent vous intéresser
Lecture du sujet en ligne
L'énoncé complet, avec les formules et les figures, sans ouvrir le PDF.Afficher ou masquer la section
Lecture du sujet en ligne
Epreuve d'Informatique et Modélisation de Systèmes Physiques
L'usage de calculatrices est interdit.
- La partie modélisation est distribuée au début et à la fin du sujet (I-1, I-2 et I-8). Il est conseillé de ne pas y consacrer plus d'une heure et demie.
- La partie informatique est développée au cœur du sujet (de I-3 à I-7) et sa durée de traitement conseillée est de deux heures et demie.
Les commentaires sont à placer dans le code, ou éventuellement dans la brève introduction qui le précède.
I Figures de Chladni
Introduction historique

.jpg)

I. 1 Introduction du modèle physique (
∼ 10% )

Une analyse du problème utilisant une approche de déformation élastique, permet de considérer que la fonction d'onde
Quelles sont ces principales propriétés?
Citez au moins deux situations physiques distinctes pour lesquelles il existe une équation analogue.
Nous considérons, dans cette seule question, une plaque faite du même matériau, possédant la même épaisseur, et soumises aux mêmes types de conditions aux limites, mais de coté
a) Déterminer, parmi (
b) En déduire la caractéristique temporelle
I. 2 Modes de vibration (
∼ 5% )
b) Pourquoi les solutions acceptables pour
c) Les solutions
I. 3 Simulation numérique temporelle (
∼ 20% )
a) Rappeler, en quelques lignes concises, le principe de la méthode d'Euler pour résoudre une équation différentielle.
b) Mettre l'équation précédente sous la forme d'un système différentiel linéaire du premier ordre et le présenter sous forme matricielle en caractérisant la matrice
Vous pourrez noter de façon réduite
Pour obtenir
a) Exprimer l'équation liant dans ce cas
b) Le code ci-après correspond à l'implémentation de la méthode d'Euler à gauche. Le modifier pour implémenter la méthode d'Euler à droite.
# Constantes paramétriques
npoints=2**10 # indew maximal des tableaux
tporte=5*2*np.pi # durée d affichage
X0 =[1.,0] # conditions unibiales
# Initialrsation des tableaux
t=np linspace(0,tporte,npoints+1) # temps
tau=t[1]-t[0]
X=np.zeros((2,npoints+1),dtype=float) # h et h'
# Algorithme d'Euler
X[:,0]=X0 #initialisation
M=np array([[1,tau],[-tau,1]]) # matrice de l'equatron
for i in range(npoints): # Calcul iteratif
X[:,i+1]=M,dot(X[:,i])
a) A partir du code donné à la question précédente, mettre en place les instructions pour obtenir l'affichage correspondant aux figures présentées ci-après.
Vous veillerez à la présence des légendes des courbes, des axes et des titres.

c) Sans modifier le principe de l'algorithme utilisé, nous pouvons néanmoins obtenir les courbes ci-après. Quelle est, selon vous, la modification apportée au code précédent? Et quel en est l'inconvénient?

b) L'analyse est faite sur la durée
c) La simulation numérique dans des conditions identiques à la méthode d'Euler nous fournit les graphes ci-après. Ils semblent correspondre aux attendus usuels.
Peut-on conclure à l'adéquation de la méthode de Runge-Kutta d'ordre deux? Argumentez votre réponse.

Nous implémentons désormais le code ci-après :
\# Constantes parametriques
npoints $=2 * * 10$ \# index maximal des tableaux
tporte $=100 * 2 * \mathrm{np} . \mathrm{pi}$. I durée di af fichage
$\mathrm{XO}=[1,0] \quad$ \# condutions anitiales
\# Initialisation des tableaum
$\mathrm{t}=\mathrm{np} .1$ inspace ( 0, tporte, npoints $\dagger 1$ ). \# temps
tau=t[1]-t[0]
$\mathrm{X}=\mathrm{np}$ zeros $((2$, npoints +1$)$, dtype $=1$ oat $) \quad \#$ et $h^{\prime}$
\# Algorithme XXX
$\mathrm{X}[:, 0]=\mathrm{XO}$ \#anitialisation
A=np.array([[0,1],[-1,-tau]]) \# matrice de couplage
$\mathrm{M}=\mathrm{np} . \mathrm{identity}(2)+\mathrm{tau} * \mathrm{~A}$ \# matrice d'évolution
for i in range (npoints): \# Galcul itératif
$X[:, i+1]=M \cdot \operatorname{dot}(X[:, i])$
a) A partir du code déployé, donnez les équations itératives permettant la mise en œuvre de la simulation.
b) Quel est l'ordre de cette méthode?

I. 4 Discrétisation spatiale du problème (
∼ 15% )
Nous nous proposons de résoudre numériquement cette équation en utilisant une discrétisation et la méthode des différences finies. Nous introduisons, pour cela, un maillage de la plaque étudiée, de pas régulier, uniforme
12^∘ ) Équation adimensionnée
Que devient le pas de discrétisation initial dans ce nouveau jeu de variables?
.jpg)
Nous étudions la situation d'un point du maillage loin des bords. Nous supposons que ce dernier de cordonnées (

b) Faire de même avec tous les points cardinaux du maillage et démontrer la formule approchée suivante :
Les bords de la plaque doivent être considérés différemment selon les conditions aux limites que nous désirons imposer. Il nous faut gérer les configurations types suivantes que nous désignerons respectivement par les termes de côté vertical, côté horizontal et de coins.
.jpg)

.jpg)
Dans notre cas, nous allons considérer que les points de la périphérie doivent être traités comme des points centraux, en associant aux points manquants de la distribution des valeurs nulles.
a) En déduire la formule approchée de (4) pour le côté vertical (
b) En déduire la formule approchée de (4) pour le côté horizontal (
c) En déduire la formule approchée de (4) pour le coin (
d) Quelles sont les conditions aux limites retenues dans ce cas?
Nous introduisons le vecteur
Nous utilisons l'ensemble des vecteurs
a) Combien y-a-t-il de modes propres possibles?
b) Nous nous plaçons dans le cas où
c) Généralisation
d) La matrice
Nous supposons que le code qui génère la matrice
def genereM(A):
"""Fonction dont l'objectif est de renvoyer M
à partir de A""""
return M # renvoie la matrice M
I. 5 Méthode de la puissance itérée (
∼ 10% )
Le recours à une fonction max native de python est interdit pour cette question.
def normeM(M):
""Fonction dont l'objectlf est de renvoyer
la norme de M à partir de Mu""
return r # norme de M
def normevecteur(F):
return Fn # wecteur norme
def puissanceiter(M,p):
return Fp # pième vecteur
Nous allons donc itérer le processus de calcul précédent jusqu'à ce que la suite
def iterstabilise(M,er):
return F vecteur stabolisê
Ce code va donc posséder un variant et un invariant de boucle. Après avoir rappelé les définitions de ces deux grandeurs, identifiez les dans le code que vous avez produit.
a) Le vecteur
b) En déduire l'expression de la fréquence propre en Hertz du mode correspondant en fonction de
I. 6 Représentation graphique (
∼ 5% )
-- Le tableau des valeurs propres est un tableau 1D où les valeurs propres sont ordonnées par ordre croissant, il est nommé valprope.
- Le tableau des vecteur propres est un tableau 2D où les vecteurs propres sont stockés selon l'indexation des valeurs propres, il est nommé vecteurprope. Le
i^(ième) vecteur propre s'obtient par vecteurpropre[i, : ] .
#turarries complementarres
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
def graphe(Z):
n=Z. shape [0]
X=Y = np.arange(n)
X, Y = np.meshgrid(X, Y)
fig = plt.figure(0,figsize=(10,8))
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z,rstride=1,cstride=1,
cmap=cm.spectral_r, linewidth=0, antialiased=False)
ax.set_zlim(-1, 1)
fig.colorbar(surf, shrink=0.5, aspect=10)
plt.tight_layout()
fig1=plt.figure(1,figsize=(6,6))
cont=plt.contour(Z,np.arange(21)/10-1,cmap=cm.spectral_r)
plt.clabel(cont, cont.levels, inline=True,
fmt= '%1.1f', fontsize=10)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Courbes de niveau')
plt.tight_layout()
plt.show()
def transforme(F):
return Z # matrice des valeurs U
I. 7 Distribution des valeurs propres (
∼ 15% )
a) Si le tableau n'était pas ordonné, quelle serait la complexité asymptotique d'une telle recherche?
b) Écrire le code permettant une telle recherche pour la valeur
def recherchebrute(valpropre,v,er):
return r # booléen
d) Rappelez le détail d'un algorithme de dichotomie.
e) Écrire l'algorithme correspondant pour la valeur
def recherchedicho(valpropre,v):
return r # booldén

Nous pouvons alors prévoir les risques de mise en résonance de l'ouvrage. Toute résonance engendrera des oscillations de fortes amplitudes qui risquent d'amener les matériaux à sortir de leur plage de linéarité, endommageant ainsi durablement l'ouvrage.
a) Nous désirons disposer d'une fonction nous renvoyant sous forme de tableau 1D Numpy toutes les valeurs propres de la plaque dans un intervalle délimité ouvert par valmin et valmax. Écrire le code permettant une telle recherche et utilisant la dichotomie de la question précédente.
def rechercheplagedicho(valpropre, valmin, valmax):
return valselect # tableautD
def valsearch(valpropre,valmin,valmax):
mask=(valpropre>valmin) * (valpropre<valmax)
return valpropre[mask]
d) En pratique, ce code s'avère près d'une centaine de fois plus rapide que celui de dichotomie. Comment pouvez-vous expliquer ce constat?
I. 8 Confrontation du modèle aux expériences (
∼ 20% )
| Nombre | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| valeur propre en ratio
|
2 | 5 | 5 | 8 | 10 | 10 | 13 | 13 | 17 | 17 | 18 | 20 | 20 |
| fréquence en ratio
|
1 | 2,5 | 2,5 | 4 | 5 | 5 | 6,5 | 6,5 | 8,5 | 8,5 | 9 | 10 | 10 |
a) En considérant les formes d'ondes introduites, établir l'équation de dispersion liant la fréquence temporelle de l'onde
b) Application numérique.
c) La distribution des premières fréquences de résonance est elle conforme à celle prévue par l'équation de dispersion? (Une réponse argumentée est attendue)
d) Que pouvez-vous en conclure sur la pertinence du modèle utilisé ?
Un étudiant suggère d'utiliser le modèle régit par l'équation d'onde ci-après :
b) Quelle est la dimension de la constante
Un étudiant suggère d'utiliser le modèle régit par l'équation d'onde ci-après :
b) Par analyse dimensionnelle, proposez une expression de la constante
c) Quelle est l'équation de dispersion correspondant à cette équation d'onde pour les formes d'ondes introduites dans cette section?
d) La distribution des fréquences obtenue expérimentalement est elle conforme à celle prévue par cette nouvelle équation de dispersion?
e) Supposons que ce modèle soit plus pertinent que celui décrit par l'équation (1), montrer que, même dans ce cas, la recherche des solutions numériques de l'équation (3) reste adéquate.
26^∘ ) Dégénérescence des modes.
b) La prise en compte des fréquences d'index 2 et 3 nous permet de proposer une solution
II Annexe : Rappel Python
L'objectif est de familiariser les étudiants avec un environnement de simulation numérique. Cet environnement doit permettre d'utiliser des bibliothèques de calcul numérique et leur documentation pour développer et exécuter des programmes numériques. On veillera à faire aussi programmer par les étudiants les algorithmes étudiés. Aucune connaissance des fonctions des bibliothèques n'est exigible des étudiants. Au moment de l'élaboration de ces programmes d'enseignement, l'atelier logiciel Scilab ou le langage de programmation Python, avec les bibliothèques Numpy/Scipy, sont les environnements choisis.
En accord avec les exigences officielles, les fonctions et procédures spécifiques de la bibliothèque Numpy, dont nous avons l'usage, sont rappelées dans la présente annexe.
Les fonctions attendues dans le sujet n'utiliseront pas la récursivité.
Elles ne doivent disposer dans leur code d'implémentation que d'un seul return.
Les éventuelles procédures n'en auront, bien sur, aucun.
II. 1 Librairies utilisées
# - * - coding:Utf-8 -*
##ibrarimes utilisées et alias
import numpy as np
import matplotlib.pyplot as plt
import numpy.random as rd
II. 2 Usage courant de Numpy
## commandes de base
# definir un tableau nul de tarlle nxp
A=np.zeros(shape=(n,p))
# définir un tableau identité de taille nxn
B=np.eye(n)
# défintr un tableau nempli de 1 unvformément nop
C=np.ones(shape=(n,p))
# obtenir les dimensions d'un tableau A = nop
n,p=A.shape # usage de l'attribut shape
# obtenir le nombre d'élements d'un tableau A
nb_elements=A.size # usage de l'attribut size
## Opérations élémentaires sur les tableaux
# Addibron d'un scalarre y a chaque terme du tableau
j=1
D=A+j
# multiplication par un scalaire k
k=2
D=k*D
# additron, soustrotion, prodututerme à terme
AddBC=B+C
SubBC=B-C
ProdBC=B*C
## Opératrons "matricuelles" courantes
# produit matriciel B x C
PmatBC=B.dot(C)
# Tranposée dut tableau C
C.T
# Lecture de la cellule [%,j] du tableau C à 2 dimensions
i,j=1,2
r=C[i,j]
II. 3 Manipulation et copies de tableaux
# Alias
F = C # F et C référencent le même tableau
## Copie d'un tableau
F=C.copy() # F réference une copre du tobleau C
## Rejormage
% un tableau peut être réorganisé par la méthode reshape
E=np.ones(9) 犎 vecteur 1D de neuf 1
print(E)
[ 1. 1. 1. 1. 1. 1. 1. 1. 1.]
F=E.reshape(3,3) # reforme E en tableau 2D 303
print(F)
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1, 1, 1,]]
G=F.flatten() % renvore le tableau sous forme 1D
print (G)
[ 1.1.1.1.1.1.1.1.1.]
$\mathrm{a}=\mathrm{np}$. arange (4) .reshape $(2,2)$
array([[0, 1],
[2, 3]])
$\mathrm{b}=4+\mathrm{np}$. arange (4) .reshape $(2,2)$
array([[4, 5],
[6, 7]])
np.concatenate((a,b))
array ([[0, 1],
[2, 3],
[4, 5] ,
[6, 7]])
np.concatenate((a,b),axis=0)
array ([[0, 1],
$[2,3]$,
[4, 5] ,
[6, 7]])
np.concatenate((a,b),axis=1)
array ( $[[0,1,4,5]$,
[2, 3, 6, 7]])
II. 4 Utilisation du générateur aléatoire - numpy.random
import numpy.random as rd # Appel de la librarrie
# tableau 1D comportant 10 éléments
print (rd.rand(10))
>>> [0.16653536 0.37216705 0.56565704 0.62948842 0.65555812 0.38543034
0.1486412 0.52610282 0.4686787 0.81558018]
# tableau 2D comportant 3X2 ézénents
print(rd.rand(3,2))
>>> [[0.98992966 0.58907376]
[0.6404654}0.53852321
[0.12416014 0.28279454]}
Questions fréquentes
4 questionsSur quels chapitres porte le sujet de modélisation banque PT 2019 (figures de Chladni) ?Afficher ou masquer la section
Questions fréquentes
4 questionsSur quels chapitres porte le sujet de modélisation banque PT 2019 (figures de Chladni) ?
Il porte sur l'équation d'onde, les méthodes numériques de résolution d'équations différentielles, la discrétisation par différences finies et la recherche de valeurs propres par puissance itérée, le tout en programmation Python avec Numpy.
Quelles parties du sujet banque PT 2019 sont indépendantes ?
L'énoncé distingue une partie modélisation physique (I.1, I.2, I.8) et une partie informatique centrale (I.3 à I.7) qui peuvent être abordées séparément, la partie informatique étant conseillée pour deux heures et demie sur les quatre heures de l'épreuve.
Quels résultats de cours faut-il connaître pour traiter ce sujet ?
Il faut connaître le principe des méthodes d'Euler et de Runge-Kutta pour intégrer une équation différentielle, la méthode des différences finies, ainsi que la notion de vecteur et valeur propres d'une matrice.
Ce sujet demande-t-il d'écrire du code Python ?
Oui, de nombreuses questions demandent d'écrire ou de compléter des fonctions Python utilisant la bibliothèque Numpy, par exemple pour la méthode de la puissance itérée ou la recherche dichotomique dans un tableau de valeurs propres.
Pas de description pour le moment
