Travaux Pratiques Informatique Pour Tous Synthèse de - PCSI-SI

Download Report

Transcript Travaux Pratiques Informatique Pour Tous Synthèse de - PCSI-SI

Travaux Pratiques Informatique Pour Tous
Synthèse de Fourrier
On se propose de tracer les N premières harmoniques, leur somme et leur spectre pour un signal
créneau et un signal triangulaire. La décomposition en série de Fourier d’un signal créneau est :
f(t) = 4/π [sin(ω t)+ 1/3 sin(3 ω t) +...+1/(2p+1)sin((2p+1) ω t)+...]
pour un signal triangulaire :
g(t) = 8/π ² [cos( ω t) + 1/3² cos(3 ω t) +...+1/(2p+1)²cos((2p+1) ω t)+...]
Pour créer la liste des dates auxquelles on évalue les harmoniques et leurs sommes, on pourra
utiliser la fonction linspace de numpy.
On tracera les sommes des N premières harmoniques, avec N valant successivement 3, 5, 10 et 30.
Pour les tracés, on utilisera les fonctions suivantes de matplotlib.pyplot :
title("titre_du_graphique")
plot(liste_abscisse,liste_ordonnee)
xlabel("titre_axe_des_abscisses")
ylabel("titre_axe_des_ordonnees" )
grid()
savefig("nom_de_fichier.pdf")
Commenter l'allure des différents graphiques obtenus.
Travaux Pratiques Informatique Pour Tous
Diagrammes de Bode :
Le but de ce TP est de tracer les diagrammes de Bode de différents filtres vus en électrocinétique.
1) Filtre RC passe-bas
étude préliminaire :
1.1) On considère un filtre RC passe-bas du premier ordre. Rappeler le schéma du montage, et
obtenir une pulsation caractéristique par analyse dimensionnelle. Etudier brièvement ce montage
dans les cas limites de pulsation très basse ou très élevée par rapport à la pulsation caractéristique.
1.2) Calculer la fonction de transfert H en fonction de la fréquence f.
Programmation en python :
1.3) Créer une liste "frequence" de fréquences judicieusement choisies en utilisant par exemple la
fonction logspace de la bibliothèque numpy.
Ecrire un programme qui calcule une liste de nombres complexes correspondant aux valeurs de H
pour les fréquences de la liste "frequence", d'après l'expression obtenue à la question 2.
On pourra utiliser la fonction freqs de la bibliothèque scipy.signal
1.4) Créer une liste des valeurs des modules de H, et une autre liste pour les valeurs des arguments
de H. On pourra utiliser les fonctions absolute et angle de la bibliothèque numpy.
1.5) Tracer les diagrammes de Bode en gain et en phase de ce filtre. On pourra utiliser les fonctions
suivantes de la bibliothèque matplotlib.pyplot :
title("titre_du_graphique")
semilogx()
plot(liste_abscisse,liste_ordonnee)
xlabel("titre_axe_des_abscisses")
ylabel("titre_axe_des_ordonnees" )
grid()
savefig("nom_de_fichier.pdf")
show()
Commenter le diagramme ainsi obtenu.
2) Filtre RC passe-haut
Reprendre les questions précédentes avec un filtre passe-haut du premier ordre
3) Filtre RLC passe-bande
Faire le schéma d'un filtre RLC qui est un coupe-bande ; justifier la nature du filtre par les cas
limites haute et basse fréquence.
Modifier le programme précédent pour tracer son diagramme de Bode pour différentes valeurs du
facteur de qualité. Commenter.
Travaux Pratiques Informatique Pour Tous
Fibre optique à gradient d'indice
Le but de ce TP est d'obtenir et de tracer la trajectoire d'un rayon lumineux dans une fibre optique à
gradient d'indice.
Une fibre optique se présente comme une succession de cylindres concentriques. On va supposer
pour simplifier qu'il y a un cœur cylindrique d'axe (Ox) de rayon 5a (où a est une distance de l'ordre
de 0.1 mm), et 5 enveloppes successives d'épaisseur a. Les distances r à l'axe (Ox) des différents
dioptres sont donc : 5a, 6a, 7a, 8a, 9a et enfin 10a pour le dernier dioptre séparant la fibre de sa
gaine. Un rayon atteignant ce dernier dioptre est perdu.
L'indice de réfraction du cœur est 1.75, et l'indice diminue de 0.05 à chaque couche concentrique en
s'éloignant de l'axe de la fibre. Pour r compris entre 5a et 6a, l'indice est donc de 1.70
On suppose que le rayon lumineux part de l'origine (x = 0, r = 0).
1) Dans un plan contenant (Ox), écrire un programme pour tracer les traces des différents dioptres
(vue en coupe)
2) La trajectoire du rayon lumineux est une ligne brisée. On décide de tracer les N premiers
segments de cette ligne. On a donc besoin des N couples de coordonnées des points d'incidence du
rayon sur les dioptres. Créer deux listes x_incidence et y_incidence, initialisées à zéro avec la
fonction zeros de la bibliothèque numpy, ayant chacune N+1 termes.
Le premier point à introduire est bien sûr l'origine (x=0, r=0) qui est le point de départ du rayon
lumineux.
Calculer les coordonnées du deuxième point (point d'incidence sur le premier dioptre, lorsque le
rayon est au bord du cœur de la fibre).
Tracer le segment reliant ces deux points sur le graphe qui montre les dioptres.
3) Introduire une variable indiquant le sens du rayon sur la vue en coupe (montant ou descendant),
une autre variable indiquant si le rayon est perdu ou au contraire s'il reste confiné par la fibre, et une
troisième variable indiquant dans quel milieu le rayon se propage.
Écrire alors un programme permettant d'obtenir les couples de coordonnées des points d'incidence
successifs. Le programme doit bien sûr s'interrompre si le rayon est perdu, et il faut à chaque
incidence déterminer s'il y a réfraction ou bien réflexion totale.
4) Tracer la trajectoire du rayon lumineux pour différents angles d'incidence initiaux, et commenter
les résultats.
Travaux Pratiques Informatique Pour Tous
Dosage
On se propose de tracer la courbe de dosage d'un diiacide par la soude.
1) Ecrire les lois d'action des masses (lois de l'équilibre chimique) pour les différents équilibres
réalisés dans la solution :
auto-protolyse de l'eau
première acidité, de constante K1
deuxième acidité, de constante K2
On choisira pK1 = 3 et pK2 = 8 pour commencer, puis on modifiera ces valeurs pour voir comment
la courbe de dosage évolue.
Ecrire la conservation de la matière pour l'acide, sous toutes ses formes (diacide, ampholyte,
dibase). On prendra en compte la dilution due à l'ajout d'un volume de soude.
Ecrire l'équation de conservation de la charge (électro-neutralité de la solution), sans oublier les
ions sodium introduits par la soude.
2) Prendre comme variables pour Python les logarithmes des concentrations des différentes espèces
(ions hydronium, ions hydroxydes, diacide, ampholyte, dibase). On pourra créer une liste logc
correspondante à ces logarithmes.
Ecrire le système de 5 équations à 5 inconnues sous la forme fi(logc)=0 pour i allant de 1 à 5.
Créer une fonction qui prend en argument logc, et qui retourne la liste des 5 expressions f i(logc) qui
doivent être nulles.
3) Utiliser la fonction fsolve de scipy.optimize pour résoudre le système, et en déduire le pH, pour
différentes valeurs du volume de soude versée.
Pour tracer la courbe de dosage, on pourra utiliser une boucle for pour résoudre à chaque valeur du
volume de soude versé, et prendre comme estimation initiale pour fsolve les valeurs obtenues à la
résolution du tour de boucle précédent.
4) Tracer les courbes de répartitions des différentes espèces au cours du dosage, et commenter.
Travaux Pratiques Informatique Pour Tous
Pendule simple
But : obtenir l'évolution horaire et le portrait de phase d'un pendule simple sans frottement. Voir les
effets non linéaires, calculer sa période en fonction de l'amplitude. Voir enfin les effets des
frottements.
On considère un pendule constitué d'une tige rigide de masse négligeable accroché en un point O,
qui peut tourner autour de O dans un plan vertical. A l'autre extrêmité de la tige est accroché un
point matériel de masse m. On suppose que le référentiel du laboratoire est galiléen, et on repère la
position du pendule par l'angle Θ que fait la tige avec l'horizontale, orienté dans le sens
trigonométrique direct sur le schéma.
Dans un premier temps, on néglige les frottements.
1) Retrouver l'équation différentielle vérifiée par Θ (t) par la méthode de votre choix.
2) Créer une liste "t" des dates auxquelles on va calculer la position et la vitesse du pendule, avec
par exemple la fonction linspace de la bibliothèque numpy. Créer un array pour les conditions
intiales : position et vitesse angulaire à t = 0.
Créer une fonction qui prend en argument la liste [Θ, dΘ/dt] et t, et qui retourne une liste
[d Θ/dt, d² Θ/dt²]
3) Utiliser la fonction odeint de la bibliothèque scipy.integrate pour obtenir les valeurs de Θ et
dΘ/dt aux dates choisies dans t.
Tracer Θ et dΘ /dt en fonction du temps, puis tracer le portrait de phase du pendule en utilisant
différentes conditions initiales.
On rappelle que pour extraire une liste contenant seulement l'angle Θ de la liste fournie par odeint,
il faut faire une opération de slicing : Θ [:,0]
Commenter les courbes obtenues.
4) On souhaite voir l'évolution de la période du pendule lorsqu'on s'écarte des petites oscillations.
On utilisera UnivariateSpline de la bibliothèque scipy.interpolate pour effectuer un ajustement de
Θ(t), avec le paramètre s=0, puis la méthode roots pour obtenir les dates auxquelles Θ(t)s'annule.
La syntaxe est du type :
f = interpolate.UnivariateSpline(t, y[:,0], s=0)
racines = f.roots()
Tracer la période en fonction de l'amplitude du pendule.
5) Introduire des frottements fluides, et reprendre les questions 1 à 3.
Travaux Pratiques Informatique Pour Tous
Tir dans le champ de pesanteur uniforme
On souhaite obtenir la trajectoire d'un point matériel M lancé avec une vitesse initiale donnée dans
le champ de pesanteur uniforme. On considère le référentiel terrestre comme galiléen. On prend
l'origine au point de départ de M, l'axe (Oz) vers le haut, et (Ox) tel que le vecteur vitesse initial soit
dans le plan (xOz).
On néglige dans un premier temps les frottements.
1) Créer une liste "t" des dates auxquelles on va calculer la position et la vitesse du point matériel,
avec par exemple la fonction linspace de la bibliothèque numpy. Créer un array pour les conditions
intiales : position et vitesse à t = 0 (donc 4 valeurs en tout).
Créer une fonction qui prend en argument la liste [x,z, dx/dt, dz/dt] et t, et qui retourne une liste
[ dx/dt, dz/dt, d²x/dt², d²z/dt²]
2) Utiliser la fonction odeint de la bibliothèque scipy.integrate pour obtenir les valeurs de [x,z,
dx/dt, dz/dt] aux dates choisies dans t.
Tracer la trajectoire de M en utilisant différentes conditions initiales.
On rappelle que pour extraire une liste contenant seulement les valeurs de x de la liste fournie par
odeint, il faut faire une opération de slicing : liste[:,0]
Commenter les courbes obtenues.
3) Reprendre les questions 1 et 2 en prenant en compte des frottements fluides.
4) Reprendre les questions 1 et 2 en prenant en compte des frottements proportionnels au carré de la
vitesse.
Satellite terrestre
On se propose d'étudier le mouvement d'un satellite terrestre. On considère le référentiel
géocentrique comme galiléen. On choisit l'origine du repère cartésien au centre de la Terre, et l'axe
(Oz) parallèle au moment cinétique du satellite, et de même sens.
On introduit les coordonnées cylindro-polaires (r, Θ) du satellite.
1) Ecrire la deuxième loi de Newton appliquée au satellite soumis à la seule force d'attraction
gravitationnelle terrestre. Projeter cette équation sur les vecteurs de la base cylindro-polaire, pour
obtenir deux équations différentielles couplées sur r et Θ.
2) Utiliser la fonction odeint pour résoudre ce système différentiel. Tracer les trajectoires pour
différentes conditions initiales, et commenter les résultats obtenus.
Travaux Pratiques Informatique Pour Tous
Oscillateur harmonique amorti par frottement solide
Le but de ce TP est d'obtenir l'équation horaire d'un oscillateur harmonique horizontal, amorti par
frottement solide.
1) On considère un point matériel M accroché par un ressort (raideur k, longueur à vide l 0) à un
point A fixe. M se déplace sans frottement le long d'un axe (Ox) horizontal, l'origine O étant choisie
à la position d'équilibre de M. Le référentiel du laboratoire est supposé galiléen.
Écrire un programme permettant d'obtenir l'équation horaire x(t) de M, et de tracer x(t) sur un
intervalle judicieusement choisi. Tracer aussi le portrait de phase de cet oscillateur.
On pourra utiliser la fonction « odeint » de la bibliothèque « scipy.integrate »
2) On suppose désormais que M subit un frottement solide. On veut modifier le programme
précédent pour en tenir compte.
Rappeler la loi de Coulomb du frottement solide. Modifier le programme précédent en introduisant
ces frottements dans la résolution de l'équation différentielle.
Introduire ensuite la condition d'arrêt définitif sur M : lorsque M s'arrête, votre programme doit
vérifier s'il peut repartir, ou bien s'il reste définitivement immobile.
Dans un premier temps, on pourra considérer qu'une vitesse nulle (M à l'arrêt) correspond à une
valeur absolue inférieure à une valeur judicieusement choisie. Il faut ensuite tester pour ces points si
l'écart à la position d'équilibre est suffisant pour que M reparte, ou au contraire s'il s'arrête
définitivement.
Dans un deuxième temps, modifier le programme précédent à l'aide de la fonction
« UnivariateSpline » de la bibliothèque « scipy.interpolate », et la méthode « roots ». Ces fonctions
permettent d'obtenir les dates auxquelles la vitesse de M s'annule, et de tester alors la condition
d'arrêt définitif.
Travaux Pratiques Informatique Pour Tous
Incertitudes expérimentales
Le but de ce TP est d'illustrer la méthode statistique d'estimation d'une grandeur et d'évaluation de
l'incertitude élargie pour un intervalle de confiance donné.
Dans un premier temps, on effectue un grand nombre N0 de mesures d'une même tension U et on
calcule la moyenne UO et l'écart-type σ0 de cette distribution.
Ensuite, on regroupe les valeurs de cette distribution en paquets de N mesures consécutives, et on
construit la distribution DN, constituée par les valeurs moyennes de chaque paquet. On montre alors
que la moyenne de cette nouvelle distribution est toujours donnée par U O, mais que son écart-type
décroit en N-0,5 . Plus précisément, la grandeur σ0 N-0,5 est une bonne estimation de l'écart-type de la
distribution DN.
Le but de ce programme est d'automatiser la constitution des paquets de N mesures et d'effectuer
l'analyse statistique finale.
Le fichier « points.txt » mis à votre disposition contient les N0 valeurs obtenues en mesurant la
tension U, avec N0 = 10 000. Ouvrez-le pour vérifier qu'il s'agit d'un fichier texte, et que chaque
valeur est séparée de la suivante par un passage à la ligne.
1) Il faut tout d'abord écrire un programme qui crée une liste contenant les N 0 mesures de U. Vous
pouvez par exemple partir d'une liste vide, créée par la commande :
Liste=[]
Il faut ensuite ouvrir le fichier concerné en lecture seule, avec la commande open. La syntaxe est du
type : fichier=open(FileName,'r')
La lettre « r » signifie « read », pour lecture.
Pour parcourir toutes les lignes du fichier, vous pouvez utiliser « for ligne in fichier: » (le fichier
texte, une fois ouvert, a les propriétés d'un itérateur).
Le passage à la ligne est noté par les caractères « \n » qui suivent chaque valeur numérique dans le
fichier. Il faut se débarasser de ces caractères, avec la méthode strip, et ne pas oublier de convertir
les caractères du fichier texte en nombre à virgule flottante. La commande est donnée ci-dessous :
ligne=float(ligne.strip('\n'))
Pour rajouter la valeur obtenue à la liste des valeurs, la méthode append est utile :
Liste.append(ligne)
Il ne faut pas oublier de fermer le fichier texte qu'on a ouvert en lecture :
fichier.close()
Remarque : si on veut faire l'opération inverse, à savoir partir d'une liste et créer un fichier qui
contient les valeurs contenues dans la liste, séparées les unes des autres par un retour à la ligne, la
syntaxe serait par exemple :
def ListToFile(FileName,Liste):
fichier=open(FileName,'w') #on ouvre le fichier en écriture
N=len(Liste)
for i in range(N):
fichier.write(str(Liste[i])+'\n') #la méthode write permet d'écrire dans le fichier
fichier.close()
A quoi sert la commande str dans l'avant-dernière ligne ? Quel est le nom donné à l'opération
effectuée par le signe + à cette même ligne ? A quoi servent les caractères \n ? A quoi sert la
dernière ligne de commande ?
Travaux Pratiques Informatique Pour Tous
2) Tracer l'histogramme de la fréquence d'apparition des valeurs du fichier points.txt, à l'aide de la
commande « hist » de la bibliothèque matplotlib.pyplot
3) Écrire une fonction qui calcule les moyennes des paquets de N valeurs successives dans le fichier
points.txt ; on commencera par N = 10.
Tracer l'histogramme de la fréquence d'apparition des valeurs prises par ces moyennes de paquets.
Tracer sur le même graphe la gaussienne qui a pour valeur centrale « moy » la moyenne des valeurs
du fichier, et pour écart-type « s » l'écart-type des moyennes des paquets. On pourra utiliser la
fonction suivante :
def Gauss(x,moy,s):
y=1/(s*math.sqrt(2*math.pi))*math.exp(-(x-moy)**2/(2*s**2))
return y
Comparer s avec σ0 N-0,5
Augmenter la valeur de N, et commenter les résultats obtenus en lien avec le cours sur les
incertitudes expérimentales de type A.