Correction des exercices

Exercice 1. (dilution)

On sait que :

\[F=\dfrac{C_m}{C_f} \hspace{1cm}\text{et}\hspace{1cm} V_m = \dfrac{V_f}{F}\]
Cm =  30  # (g/L) concemtration massique solution mère
Cf =  10  # (g/L) concentration massique solution fille
Vf = 500  # (mL)  Volume solution fille

F = Cm/Cf       # (--) Calcul du facteur de dilution
Vm = Vf/F       # (mL) Calcul de Vm
Veau = Vf-Vm    # (mL) Calcul de Veau (volume d'eau à compléter)


# AFFICHAGE
print("Prélever ", round(Vm,0), " mL de solution mère.")
print("Puis ajouter", round(Veau,0), "mL d'eau pour obtenir", round(Vf,0), "mL de solution fille")
print("Le facteur de dilution est de", round(F,2))

Ou avec l'affichage du texte avec la méthode format du type str.

Cm =  30  # (g/L) concemtration massique solution mère
Cf =  10  # (g/L) concentration massique solution fille
Vf = 500  # (mL)  Volume solution fille

F = Cm/Cf       # (--) Calcul du facteur de dilution
Vm = Vf/F       # (mL) Calcul de Vm
Veau = Vf-Vm    # (mL) Calcul de Veau (volume d'eau à compléter)


# AFFICHAGE
print("Prélever {:.0f} mL de solution mère.".format(Vm))
print("Puis ajouter {:.0f} mL d'eau pour obtenir {:.0f} mL de solution fille".format(Veau, Vf))
print("Le facteur de dilution est de {:.1f}".format(F))

Exercice 2. (distance focale)

f_prim = [19.1, 18.9, 18.7, 19.0, 18.9, 19.2, 18.8, 18.7] # Listes des mesures

nb = len(f_prim)  # Nombre de mesures

moyenne = sum(f_prim)/len(f_prim)  # Moyenne

maximum = max(f_prim)  # Maximum
minimum = min(f_prim)  # Minimum

f_prim.pop(0)   # supprime la première mesure
f_prim.pop()    # supprime la dernière mesure (-1 par défaut)

# OU
#f_prim = f_prim[1:-1] # supprime la première et la dernière

Exercice 3. (célérité son)

c = [335, 338, 341, 339, 340, 336, 343, 337, 341, 339, 337] # (m/s) célérité son

somme = 0
for i in range(len(c)):
    somme = somme + c[i]

moyenne = somme/len(c)
print("Moyenne =", moyenne)

Exercice 4. (vitesse)

A partir d'une liste v vide au départ.

t = [0. , 0.04, 0.08, 0.12, 0.16, 0.20, 0.24, 0.28, 0.32, 0.36, 0.40, 0.44, 0.48] # (s)
z = [1.66, 1.61, 1.53, 1.45, 1.35, 1.23, 1.10, 0.96, 0.79, 0.61, 0.42, 0.21, 0. ] # (m)

v = []
for i in range(1, len(t)-1):
    V = -(z[i+1]-z[i-1])/(t[i+1]-t[i-1])   # (m/s) Calcul la vitesse en cours
    v.append(round(V,2))                   # (m/s) Mémorisation de la vitesse

print(v)
>>> %Run
[1.62, 2.0, 2.25, 2.75, 3.13, 3.37, 3.88, 4.38, 4.62, 5.0, 5.25]

Attention à la taille de la liste v à la fin !

Ou à partir d'une liste v initialisée par N zéros.

t = [0. , 0.04, 0.08, 0.12, 0.16, 0.20, 0.24, 0.28, 0.32, 0.36, 0.40, 0.44, 0.48] # (s)
z = [1.66, 1.61, 1.53, 1.45, 1.35, 1.23, 1.10, 0.96, 0.79, 0.61, 0.42, 0.21, 0. ] # (m)

N = len(t)  # Taille de la liste
v = [0]*N   # Création d'une liste de 0 de taille N

for i in range(1, N-1):
    v[i] = round(-(z[i+1]-z[i-1])/(t[i+1]-t[i-1]), 2)   # (m/s) Calcul la vitesse en cours

print(v)
>>> %Run
[0, 1.62, 2.0, 2.25, 2.75, 3.13, 3.37, 3.88, 4.38, 4.62, 5.0, 5.25, 0]

Exercice 5. (énergies)

z = [1.61, 1.53, 1.45, 1.35, 1.23, 1.10, 0.96, 0.79, 0.61, 0.42, 0.21] # (m)
v = [1.58, 1.95, 2.27, 2.69, 3.12, 3.49, 3.91, 4.38, 4.65, 4.91, 5.23] # (m/s)

Epp, Ec, Em = [], [], []  # Initialisations des tableaux

m = 55E-3  # (kg)   Masse de la balle
g = 9.81   # (m/s²) Accélération de pesanteur

for i in range(len(z)):
    EPP = m*g*z[i]             # Calcul l'énergie potentielle de pesanteur en cours
    EC = 0.5*m*v[i]**2         # Calcul l'énergie cinétique en cours
    Epp.append(round(EPP,3))   # Complète le tableau Epp
    Ec.append(round(EC,3))     # Complète le tableau Ec
    Em.append(round(EPP+EC,3)) # Complète le tableau Em

# AFFICHAGE
print("Epp (J) :", Epp)
print("Ec  (J) :", Ec)
print("Em  (J) :", Em)
>>> %Run
Epp (J) : [0.869, 0.826, 0.782, 0.728, 0.664, 0.594, 0.518, 0.426, 0.329, 0.227, 0.113]
Ec  (J) : [0.069, 0.105, 0.142, 0.199, 0.268, 0.335, 0.42, 0.528, 0.595, 0.663, 0.752]
Em  (J) : [0.937, 0.93, 0.924, 0.927, 0.931, 0.928, 0.938, 0.954, 0.924, 0.89, 0.866]

Exercice 6. (énergies)

z = [1.61, 1.53, 1.45, 1.35, 1.23, 1.10, 0.96, 0.79, 0.61, 0.42, 0.21] # (m)
v = [1.58, 1.95, 2.27, 2.69, 3.12, 3.49, 3.91, 4.38, 4.65, 4.91, 5.23] # (m/s)

m = 55E-3  # (kg)   Masse de la balle
g = 9.81   # (m/s²) Accélération de la pesanteur

Epp = [m*g*Z for Z in z]         # Tableau des énergies potentielles de pesanteur
Ec  = [0.5*m*V**2 for V in v]    # Tableau des énergies cinétiques
Em  = [Epp[i]+Ec[i] for i in range(len(z))]  # Tableau des énergies mécaniques

# AFFICHAGE
print("Epp (J) :", Epp)
print("Ec  (J) :", Ec)
print("Em  (J) :", Em)
>>> %Run
Epp (J) : [0.8686755000000002, 0.8255115000000002, 0.7823475000000001, 0.7283925000000001, 0.6636465000000001, 0.5935050000000002, 0.5179680000000001, 0.4262445000000001, 0.32912550000000007, 0.22661100000000003, 0.11330550000000002]
Ec  (J) : [0.06865100000000002, 0.10456874999999999, 0.14170475, 0.19899275, 0.26769600000000005, 0.33495275, 0.42042275000000007, 0.527571, 0.5946187500000001, 0.66297275, 0.7522047500000002]
Em  (J) : [0.9373265000000002, 0.9300802500000002, 0.9240522500000001, 0.9273852500000002, 0.9313425000000002, 0.9284577500000002, 0.9383907500000002, 0.9538155000000001, 0.9237442500000002, 0.88958375, 0.8655102500000003]

ou

z = [1.61, 1.53, 1.45, 1.35, 1.23, 1.10, 0.96, 0.79, 0.61, 0.42, 0.21] # (m)
v = [1.58, 1.95, 2.27, 2.69, 3.12, 3.49, 3.91, 4.38, 4.65, 4.91, 5.23] # (m/s)

m = 55E-3  # (kg)   Masse de la balle
g = 9.81   # (m/s²) Accélération de la pesanteur

Epp = [m*g*z[i] for i in range(len(z))]      # Tableau des énergies potentielles de pesanteur
Ec  = [0.5*m*v[i]**2 for i in range(len(v))] # Tableau des énergies cinétiques
Em  = [Epp[i]+Ec[i] for i in range(len(z))]  # Tableau des énergies mécaniques

# AFFICHAGE
print("Epp (J) :", Epp)
print("Ec  (J) :", Ec)
print("Em  (J) :", Em)
>>> %Run
Epp (J) : [0.8686755000000002, 0.8255115000000002, 0.7823475000000001, 0.7283925000000001, 0.6636465000000001, 0.5935050000000002, 0.5179680000000001, 0.4262445000000001, 0.32912550000000007, 0.22661100000000003, 0.11330550000000002]
Ec  (J) : [0.06865100000000002, 0.10456874999999999, 0.14170475, 0.19899275, 0.26769600000000005, 0.33495275, 0.42042275000000007, 0.527571, 0.5946187500000001, 0.66297275, 0.7522047500000002]
Em  (J) : [0.9373265000000002, 0.9300802500000002, 0.9240522500000001, 0.9273852500000002, 0.9313425000000002, 0.9284577500000002, 0.9383907500000002, 0.9538155000000001, 0.9237442500000002, 0.88958375, 0.8655102500000003]

Exercice 7. (nombre de dilutions)

Cm = 1.0          # (g/L) Concentration solution mère
Cf = 1.0e-3       # (g/L) Concentration solution fille

Nb = 0            # Nombre de dilution (initialisation)
while Cm>Cf:
    Nb = Nb + 1   # Incrémentation
    Cm = Cm/10    # Dilution par 10

print("Il faut réaliser", Nb, "dilutions !")
>>> %Run
Il faut réaliser 3 dilutions !

La boucle doit s'arrêter quand Cm est égale ou inférieure à Cf !

Exercice 8. (avancement)

a, b, c, d = 1, 2, 3, 2                   # coefficients stoechiométiques
n_A, n_B, n_C, n_D = 0.5, 0.5, 0, 0       # (mol) Quantités de matière initiales

x = 0           # Initialisation de l'avancement
dx = 0.01       # Pas de l'avancement

while (n_A>0 and n_B>0) :
    x = x + dx         # Incrémentation de l'avancement
    n_A = n_A - a*dx   # Décrémentation de n_A (réactif)
    n_B = n_B - b*dx   # Décrémentation de n_B (réactif)
    n_C = n_C + c*dx   # Incrémentation de n_C (produit)
    n_D = n_D + d*dx   # Incrémentation de n_D (produit)

# AFFICHAGE
print("xf = ", x)
print("n(A) = ", n_A)
print("n(B) = ", n_B)
print("n(C) = ", n_C)
print("n(D) = ", n_D)
>>> %Run
xf =  0.25000000000000006
n(A) =  0.24999999999999978
n(B) =  -1.734723475976807e-16
n(C) =  0.7500000000000004
n(D) =  0.5000000000000001

Exercice 9. (dilution)

def dilution(Cm, Cf, Vf):
    return Vf*Cf/Cm            # Calcul de Vm

def dilution2(Cm, Cf, Vf):
    Vm = Vf*Cf/Cm              # Calcul de Vm
    Veau = Vf-Vm               # Calcul de Veau (volume d'eau à compléter)
    F = Cm/Cf                  # Calcul du facteur de dilution
    return Vm, Veau, F
>>> %Run
>>> dilution(30, 5, 100)
16.666666666666668
>>> Vm = dilution(30, 5, 100)
>>> Vm
16.666666666666668
>>> dilution2(30, 5, 100)
(16.666666666666668, 83.33333333333333, 6.0)
>>> Vm, Veau, F = dilution2(30, 5, 100)
>>> Vm
16.666666666666668
>>> Veau
83.33333333333333
>>> F
6.0

Exercice 10. (pH)

from math import log10

def potentiel_hydrogene(C_H3O_plus, C0 = 1):
    return -log10(C_H3O_plus)/C0

def concentration_ion_hydronium(pH):
    return 10**(-pH)

L'argument C0 fixé à 1 par défaut est optionnel.

>>> %Run
>>> potentiel_hydrogene(1E-5)
5.0
>>> potentiel_hydrogene(2E-5)
4.698970004336019
>>> potentiel_hydrogene(2E-5, C0=10)  # N'a pas de sens ici !
0.4698970004336019
>>> concentration_ion_hydronium(7)
1e-07
>>> concentration_ion_hydronium(6.8)
1.584893192461114e-07

Exercice 11. (énergies)

import numpy as np

z = np.array([1.61, 1.53, 1.45, 1.35, 1.23, 1.10, 0.96, 0.79, 0.61, 0.42, 0.21]) # (m)
v = np.array([1.58, 1.95, 2.27, 2.69, 3.12, 3.49, 3.91, 4.38, 4.65, 4.91, 5.23]) # (m/s)

m = 55e-3  # (kg)   Masse de la balle
g = 9.81   # (m/s²) Accélération de la pesanteur

Epp = m*g*z
Ec = 0.5*m*v**2
Em = Epp + Ec

# AFFICHAGE
print("Epp (J) :", Epp)
print("Ec  (J) :", Ec)
print("Em  (J) :", Em)
  • Les opérateurs sur les tableaux Numpy s'appliquent sur les éléments du même indice !

  • Pas besoin de faire des boucles avec les tableaux Numpy

>>> %Run
Epp (J) : [0.8686755 0.8255115 0.7823475 0.7283925 0.6636465 0.593505  0.517968
0.4262445 0.3291255 0.226611  0.1133055]
Ec  (J) : [0.068651   0.10456875 0.14170475 0.19899275 0.267696   0.33495275
0.42042275 0.527571   0.59461875 0.66297275 0.75220475]
Em  (J) : [0.9373265  0.93008025 0.92405225 0.92738525 0.9313425  0.92845775
0.93839075 0.9538155  0.92374425 0.88958375 0.86551025]

Exercice 12. (positions et vecteurs vitesse)

import matplotlib.pyplot as plt

x = [.014, .014, .014, .009, .009, .005, .005, .001, .001, .001, .003] # (m)
z = [1.61, 1.53, 1.45, 1.35, 1.23, 1.10, 0.96, 0.79, 0.61, 0.42, 0.21] # (m)
v = [1.58, 1.95, 2.27, 2.69, 3.12, 3.49, 3.91, 4.38, 4.65, 4.91, 5.23] # (m/s)


# FIGURE
plt.plot(x, z, "r+")
for i in range(len(x)):
    plt.quiver(x[i], z[i], 0, -v[i], angles='xy', scale_units='xy', scale=30,  color='blue', width=0.005)
plt.title("Chute d'une balle")
plt.xlabel("x (m)")
plt.xlim(-1,1)
plt.ylabel("y (m)")
plt.ylim(-0.2,1.8)
plt.grid()
plt.show()
histogramme

Exercice 13. (positions et vecteurs vitesse)

import matplotlib.pyplot as plt

# DONNEES
t = [0.0, 0.0667, 0.1334, 0.2001, 0.2668, 0.3335, 0.4002, 0.4669, 0.5336, 0.6003, 0.667, 0.7337, 0.8004, 0.8671, 0.9338]
x = [0.003, 0.141, 0.275, 0.410, 0.554, 0.686, 0.820, 0.958, 1.089, 1.227, 1.359, 1.490, 1.599, 1.705, 1.801]
y = [0.746, 0.990, 1.175, 1.336, 1.432, 1.505, 1.528, 1.505, 1.454, 1.355, 1.207, 1.018, 0.797, 0.544, 0.266]

# INITIALISATION
N = len(t)         # Taille
vx = [0]*N         # Liste de N zéros
vy = [0]*N         # Liste de N zéros

# CALCULS
for i in range(1, N-1):
    vx[i] = (x[i+1]-x[i-1])/(t[i+1]-t[i-1])  # Calcul de la composante vx
    vy[i] = (y[i+1]-y[i-1])/(t[i+1]-t[i-1])  # Calcul de la composante vy

# AFFICHAGE
print("vx :", vx)
print("vy :", vx)

# FIGURE
plt.plot(x, y, "r+")
for i in range(1, N-1):
    plt.quiver(x[i], y[i], vx[i], vy[i], angles='xy', scale_units='xy', scale=20,  color='blue', width=0.005)
plt.title("Lancé d'une balle")
plt.xlabel("x (m)")
plt.xlim(0,2)
plt.ylabel("y (m)")
plt.ylim(0,1.8)
plt.grid()
plt.show()
histogramme
>>> %Run Exo13.py
vx : [0, 2.038980509745128, 2.0164917541229386, 2.0914542728635683, 2.0689655172413794, 1.9940029985007486, 2.0389805097451275, 2.016491754122939, 2.01649175412294, 2.0239880059970004, 1.9715142428785588, 1.7991004497751129, 1.6116941529235393, 1.5142428785607198, 0]
vy : [0, 2.038980509745128, 2.0164917541229386, 2.0914542728635683, 2.0689655172413794, 1.9940029985007486, 2.0389805097451275, 2.016491754122939, 2.01649175412294, 2.0239880059970004, 1.9715142428785588, 1.7991004497751129, 1.6116941529235393, 1.5142428785607198, 0]

Exercice 14. (histogramme et incertitude-type)

import matplotlib.pyplot as plt
import statistics as stat

# répétabilité de la mesure d'un volume équivalent pour plusieurs groupes
f = [19.1, 18.9, 18.7, 19.0, 18.9, 19.2, 18.8, 18.7] # Listes des mesures

# HISTOGRAMME
freq, x, _ = plt.hist(f, range=(18, 20), bins=10, rwidth=0.95)
plt.title("Fréquence des mesures de la distance focale d'une lentille")
plt.grid(axis='y')
plt.xticks(x)
plt.show()

# CALCULS
N = len(f)
f_moy = stat.mean(f)
s = stat.stdev(f)
ua_f = s/stat.sqrt(N)

# AFFICHAGE
print("f_prime = ", round(f_moy,2), "+/-", round(ua_f,2), "mm")
histogramme
>>> %Run
f_prime =  18.91 +/- 0.06 mm