====== Rotateur biatomique ======
//Cf.// [[teaching:exos:rotation_molecules_biatomiques|cette page]].
Code source, en Python 3 :
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Somme d'état (ensemble canonique) de rotation (rotateur biatomique)
Les impressions sont à récrire avec l'instruction format() de python 3
"""
from math import exp # on a juste besoin de l'exponentielle
import matplotlib.pyplot as plt # directive d'importation standard de Matplotlib
T = 100. # (température réduite = T / Theta)
Zrot = 0. # somme d'état
Jmax = 30 # valeur maximale de J
print('---------------------------------------------------')
print('| J | dégénerescence | J*(J+1) | terme de Z |')
print('---------------------------------------------------')
Js=[]
terms=[]
for J in range(Jmax+1):
g = 2*J+1 # dégénerescence
term= (2*J+1)*exp(-J*(J+1)/T)
print('| %3d | %4d | %4d | %.8e |' % (J, g, J*(J+1), term))
Zrot += term
Js.append(J)
terms.append(term)
print('---------------------------------------------------')
print( "Somme d'état à T=%3d jusqu'au niveau %2d : %.8e " % (T,Jmax,Zrot))
fig = plt.figure()
plt.title(u"Rotateur biatomique et somme d'état à T = "+str(T))
plt.plot(Js, terms, 'bo', label=r'$(2J+1)\exp{(-J(J+1)\theta_{rot}/T)}$')
plt.legend(loc='upper right')
plt.vlines(Js, [0], terms)
plt.xlabel(u"Niveaux J")
plt.ylabel(u"Termes de la somme d'état")
eq = r'$Z_I^{Rot} = \sum_{J} (2J+1) \exp{(-J(J+1)\theta_{rot}/T)} = '+str(round(Zrot,3))+"$"
size = 14
x,y = 12,7
plt.text(x, y, eq, fontsize=size, clip_on=True)
plt.show() # vue interactive de la figure
Figure :
{{:teaching:progappchim:rotateur_biatomique-01.png}}
Sortie des valeurs :
---------------------------------------------------
| J | dégénerescence | J*(J+1) | terme de Z |
---------------------------------------------------
| 0 | 1 | 0 | 1.00000000e+00 |
| 1 | 3 | 2 | 2.94059602e+00 |
| 2 | 5 | 6 | 4.70882267e+00 |
| 3 | 7 | 12 | 6.20844306e+00 |
| 4 | 9 | 20 | 7.36857678e+00 |
| 5 | 11 | 30 | 8.14900043e+00 |
| 6 | 13 | 42 | 8.54160866e+00 |
| 7 | 15 | 56 | 8.56813596e+00 |
| 8 | 17 | 72 | 8.27478835e+00 |
| 9 | 19 | 90 | 7.72482354e+00 |
| 10 | 21 | 110 | 6.99029276e+00 |
| 11 | 23 | 132 | 6.14411195e+00 |
| 12 | 25 | 156 | 5.25340178e+00 |
| 13 | 27 | 182 | 4.37469528e+00 |
| 14 | 29 | 210 | 3.55123642e+00 |
| 15 | 31 | 240 | 2.81225655e+00 |
| 16 | 33 | 272 | 2.17386690e+00 |
| 17 | 35 | 306 | 1.64106933e+00 |
| 18 | 37 | 342 | 1.21036009e+00 |
| 19 | 39 | 380 | 8.72460102e-01 |
| 20 | 41 | 420 | 6.14818650e-01 |
| 21 | 43 | 462 | 4.23670231e-01 |
| 22 | 45 | 506 | 2.85550178e-01 |
| 23 | 47 | 552 | 1.88274853e-01 |
| 24 | 49 | 600 | 1.21458857e-01 |
| 25 | 51 | 650 | 7.66753988e-02 |
| 26 | 53 | 702 | 4.73727511e-02 |
| 27 | 55 | 756 | 2.86481384e-02 |
| 28 | 57 | 812 | 1.69591336e-02 |
| 29 | 59 | 870 | 9.82856285e-03 |
| 30 | 61 | 930 | 5.57687812e-03 |
---------------------------------------------------
Somme d'état à T=100 jusqu'au niveau 30 : 1.00327380e+02