TangenteX.com

Qu'est-ce qu'un paquet d'ondes

Les limites physiques de la définition d'une onde

Rappel sur les ondes

Nous avons rencontré l'équation de d'Alembert qui décrit le phénomène de propagation d'une onde quelconque :

\( \Delta \: \Psi - \dfrac{1}{c^2} \dfrac{\partial^2 \Psi}{\partial t^2} = 0 \)

La fonction \( \Psi \), solution de cette équation, est appelée "fonction d'onde". L'équation de d'Alembert est une équation linéaire. Cela signifie que l'on peut construire des combinaisons linéaires de toutes solutions de cette équation, combinaisons qui seront également solutions de l'équation. Et cette caractéristique prendra toute son importance dans la suite de notre étude.

L'équation de d'Alembert est d'ordre 2. Elle est invariante par renversement de l'espace et du temps. Par exemple, si je considère une fonction d'onde unidimensionnelle, si \( \Psi(x,t) \) est solution de l'équation, alors \( \Psi(-x,t) \) et \( \Psi(x,-t) \) sont aussi solutions de l'équation.

La solution générale de l'équation de d'Alembert, si je me limite à l'espace unidimensionnel, est la superposition des deux ondes progressives, qui se propagent l'une dans le sens positif des x, et l'autre dans le sens négatif des x, de la forme générale :

\( \Psi(x,t) = f(t - \dfrac{x}{t}) + g(t + \dfrac{x}{t}) \)

avec c la célérité de l'onde. Remarquez que cette forme générale satisfait la condition de renversement temporel et spatial. Dans le terme de droite, la fonction f() décrit l'onde progressive (sens des x croissants)  et la fonction g() décrit l'onde régressive (sens des x décroissants).

On dit qu'une onde est plane lorsque son amplitude prend la même valeur en tout point d'un plan perpendiculaire à la direction de propagation de l'onde.

Il est classique de présenter la forme trigonométrique d'une solution de l'équation de d'Alembert : \( \Psi(x,t) = \Psi_0 \cos(\omega t  - kx) \), avec les notations habituelles  \( \Psi_0 \) l'amplitude initiale de l'onde, \( \omega \) sa pulsation et k le nombre d'onde (le module du vecteur d'onde). J'ai choisi une phase nulle pour ne pas surcharger.

Pour ma part, et parce que cela est beaucoup plus simple à manipuler, je préfère la représentation complexe de cette forme : \( \Psi(x,t) = \Psi_0 e^{i(\omega t  - kx)} \).

On dit que l'onde est harmonique ou monochromatique si la relation de dispersion est vérifiée, c'est à dire si \( \omega^2 = k^2c^2 \) ou encore \(k = \pm \dfrac{\omega}{c} \) puisque \( \omega \) et c sont positifs. On parlera alors d'OPPH, Onde Progressive Plane Harmonique. Rappelons que la relation de dispersion est la relation qui lie le nombre d'onde k et la pulsation \( \omega \). Pour une onde qui se propage dans le vide (milieu non dispersif), nous avons \( k = \dfrac{\omega}{c} \), mais nous verrons que cette relation peut être différente.

Les limites physiques du modèle mathématique

La solution présentée ci-dessus est parfaite mathématiquement. Elle répond au problème posé. Elle présente cependant deux caractéristiques majeures qui la rende inacceptable aux physiciens.

Elle ne possède pas de bornes spatiales ni temporelles. D'après la solution, l'onde se propage dans tout l'espace avec une célérité \( c = \dfrac{\omega}{k}\). Du point de vue physique, cela pose probème. Nous ne connaissons aucune onde physique qui se propage à l'infinie, éternellement.

Une onde transporte une énergie, que l'on quantifie par \( E = \displaystyle \int_{-\infty}^{+\infty} ||\Psi(x,t)) ||^2 dx \). Pour que notre solution soit physiquement acceptable, il faut que cette énergie soit finie. Or il se trouve que \( ||\Psi(x,t)) ||^2 \) est une constante et donc que l'intégrale diverge, l'énergie transportée est infinie. On dit que la fonction n'est pas "normalisable" ou encore qu'elle n'est pas de "carré sommable".

Il nous faut donc trouver un moyen de normaliser notre solution, afin que l'énergie transportée soit finie, tout en restant une solution de l'équation de d'Alembert.

Les paquets d'ondes

Les ondes physiques réelles sont non périodiques, limitées dans le temps et dans l'espace. Il faut donc trouver un modèle pour représenter cette réalité.

Pour construire l'objet qui modélisera cette réalité, objet que nous appelerons un paquet d'onde, nous allons utiliser une technique bien connue : la synthèse de Fourier. Nous allons superposer un nombre plus ou moins grand d'OPPH pour construire un objet ondulatoire qui ne sera ni périodique ni d'extension infini.

Superposition de deux OPPH

Commeçons par superposer deux OPPH de pulsations voisines \( \omega_1 \) et \( \omega_2 \), de même amplitude, de phase identiquement nulle, de même célérité c dans un milieu non dispersif (donc \( k = \dfrac{\omega}{c} \)).

Posons :

\( \omega_1 = \omega_0 - \Delta \omega \) et \( \omega_2 = \omega_0 + \Delta \omega \)

\( k_1 = k_0 - \Delta k \) et \( k_2 = k_0 + \Delta k \).

L'onde résultante \( \Psi_2(x,t) \) est égale à \( \Psi_2(x,t) = \Psi_0 e^{i(\omega_1 t  - k_1x)} + \Psi_0 e^{i(\omega_2 t  - k_2x)} \). Après quelques manipulations de trigo élémentaire et avec les notations retenues ci-dessus, j'obtiens la forme d'onde suivante :

\( \Psi_2(x,t) = 2\Psi_0 \cos(\Delta \omega t - \Delta k x) e^{i(\omega_0 t  - k_0x)} \)

Cette onde est une combinaison linéaire de deux ondes solutions de l'équation de d'Alembert, elle est donc également solution de cette équation. Le terme que j'ai conservé sous forme trigonométrique dessine l'enveloppe de l'onde résultante et le terme en exponentielle dessine la "porteuse" ou "onde moyenne".

Pour illustrer l'onde résultante, j'ai tracé avec le script PaquetOndes.py la somme de deux OPPH avec les paramètres suivants :

omega0 = 10.0
domega = 1.0
k0 = 5.0
dk = 0.1

Voici le résultat :

Superposition 2 OPPH

Nous pouvons calculer l'énergie transportée par cette onde, qui vaut \( ||\Psi_2(x,t)) ||^2  = 4 \Psi_0^2 \cos^2(\Delta \omega t - \Delta k x) \). Comme vous le constatez cette énergie n'est plus constante, elle est concentrée sur les maximums de la fonction \( \Psi_2(x,t) \). C'est un progrès mais il n'en reste pas moins que l'énergie est infinie, ce qui n'est pas le résultat attendu !

Superposition d'un nombre très grand nombre d'OPPH

Continuons le chemin en ne superposant plus un nombre réduit d'OPPH mais un nombre très grand d'OPPH de pulsations très proches. En reprenant les notations précédentes, considérons maintenant une famiile d'OPPH dont les pulsations respectives seraient comprises dans un intervalle \( [\omega_0 - \Delta \omega, \omega_0 + \Delta \omega ] \), comprenant n élements \( \omega_p = \omega_0 + p\delta \omega  \). Composons l'onde résultante de la somme de toutes ces OPPH et faisons tendre p vers l'infinie et \( \delta \omega \) vers 0. On démontre alors que l'équation de la fonction d'onde résultante est de la forme :

\( \Psi(x,t) = \Psi_0 sinc(\Delta \omega t - \Delta kx)\cos(\omega_0 t - k_0 x) \) 

La fonction sinc étant la fonction sinus cardinal telle que \( sinc(x) = \dfrac{\sin(x)}{x} \). La fonction sinc décrit l'enveloppe de l'onde résultante, alors que la fonction cos() décrit l'onde moyenne enveloppée dans le paquet d'ondes.

L'intervalle \( [\omega_0 - \Delta \omega, \omega_0 + \Delta \omega ] \) représente la distribution fréquentielle de l'onde résultante et l'intervalle correspondant autour de k0 représente sa distribution spatiale. Deux remarques :

Il y a bien mieux dans cette construction : l'énergie transportée est finie car son étendue spectrale spatiale, définie par l'intervalle centrée autour de k0, est finie.

Ainsi, nous avons construit une représentation physiquement acceptable d'une onde. On appelle cette construction, la superposition d'un très grand nombre d'OPPH de pulsations proches, un paquet d'ondes.

En reprenant les notions mentionnées ci-dessus, on peut définir un paquet d'ondes comme un signal de distribution fréquentielle non nulle sur un intervalle \( [\omega_0 -  \Delta\omega ; \omega_0 +  \Delta\omega] \) avec \( \Delta\omega << \omega_0 \).
Plus précisément, la fonction d'onde d'un paquet d'ondes est de la forme \( \Psi(x,t) = \displaystyle \int_{-\infty}^{+\infty} g(\omega)\cos(\omega t - kx)d\omega \) ou sous sa forme complexe \( \underline{\Psi}(x,t) = \displaystyle  \int_{-\infty}^{+\infty} g(\omega)e^{-ikx}e^{i\omega t}d\omega \). La fonction \( g(\omega) \) est le spectre fréquentiel du signal et donc, d'après la définition de la transformée de Fourier, un paquet d'ondes est la transformée de Fourier de la fonction \( g(\omega)e^{-ikx} \).

Paquet d'ondes et physique quantique

Le concept de paquet d'ondes que je viens d'introduire est issu de la physique ondulatoire classique. On le retrouvera en optique et en électromagnétisme. Mais ce qui m'intéresse aujourd'hui, c'est l'utilisation de ce concept en physique quantique.

Similitudes entre l'équation de d'Alembert et l'équation de Schrödinger

Revenons sur l'équation de Schrödinger monodimensionnelle :
\begin{align} i \hbar \dfrac{\partial \Psi(x,t)}{\partial t} = -\dfrac{\hbar ^2}{2m}\dfrac{\partial^2 \Psi(x,t)}{\partial x^2}\end{align}

Cette équation est de la même forme que l'équation de d'Alembert. On démontre qu'elle admet comme solution une fonction \( \Psi(x,t) \) telle que :
\begin{align} \Psi(x,t) = \Psi_0 e^{i(kx  - \omega t)} \end{align}
avec la pulsation \( \omega = \dfrac{E}{\hbar} \) et le nombre d'onde  \( k^2 = \dfrac{2mE}{\hbar^2}\), E étant l'énergie de la particule.

Nous retrouvons la même forme de solution que pour l'équation de d'Alembert. Seule diffère la relation de dispersion, qui s'exprime par \( k(\omega) = \sqrt{\dfrac{2m\omega}{\hbar}}\).

Ces deux équations sont des équations de propagation. Elles décrivent l'évolution dans le temps d'une onde dont la forme est définie par les conditions initiales, mais qui doit bien sûr être solution de cette équation.

L'équation de d'Alembert décrit l'évolution d'une onde de champ physique, électromagnétique ou autre. L'équation de Schrödinger décrit l'évolution  d'une onde qui représente la densité de présence d'une particule non relativiste de masse m.

Comme l'équation de d'Alembert, l'équation de Schrödinger est linéaire, c'est à dire que n'importe quelle combinaison linéaire d'une solution est également solution de l'équation.

Mais comme pour l'équation de d'Alembert, \( ||\Psi(x,t)) ||^2  = ||\Psi_0) ||^2 \), c'est à dire une constante. Notre fonction d'onde solution n'est pas de carré sommable, c'est à dire qu'elle n'est pas physiquement acceptable. Physiquement cela reviendrait à dire que la particule est partout dans l'espace avec une probabilité de présence identique...

Nous avons donc deux problèmes à régler : l'intégrale sur tout l'espace d'une fonction de densité de probabilité doit être normalisée à 1; et une particule doit pouvoir être localisée dans l'espace, même avec une certaine imprécision.

Les paquets d'ondes comme solution de l'équation de Schrödinger

Comme pour l'équation de d'Alembert, nous allons utiliser la linéarité de l'équation de Schrödinger. En suivant le même cheminement, la solution proposée au problème est une superposition infinie d'ondes, qui ne sont pas ici des OPPH mais des ondes de de Broglie. La fonction d'onde solution est :
\begin{align} \Psi(x,t) = \dfrac{1}{\sqrt{2\pi}} \displaystyle \int_{-\infty}^{+\infty} g(k) e^{i(kx  - \omega t)} dk \end{align}

Cette fonction d'onde est de carré sommable, à condition que la fonction g(k) soit de carré sommable (cela résulte du théorème de Parseval-Plancherel pour information).

La fonction g(k), qui décrit l'amplitude de la fonction d'onde \( \Psi(x,t) \) définit le spectre fréquentiel de la fonction d'onde. Le points particulièrement intéressant est qu'on peut choisir la forme de g(k) pourvu qu'elle soit de carré sommable et qu'elle soit distribuée autour d'une valeur moyenne. Vous noterez que la fonction g(k) est indépendante du temps et donc que le spectre fréquentiel de notre paquet d'ondes est lui aussi indépendant du temps.

On peut également noter que le paquet d'ondes stationnaire (t=0) \( \Psi(x,0) \) est la transformée de Fourier de la fonction g(k) et réciproquement (par définition de la transformée de Fourier). Cette réversabilité de la transformée de Fourier est obtenue par l'ajout du facteur \( \dfrac{1}{\sqrt{2\pi}} \), qui n'a pas de signification physique particulière. Les physiciens ont souvent l'habitude d'ajouter des coefficients lorsque cela les arrange, ou bien d'utiliser des systèmes d'unités baroques parce que cela simplifie l'écriture...

Caractéristiques d'un paquet d'ondes

Etalement du paquet d'ondes

Nous avons vu que la relation de dispersion d'une onde solution de l'équation de Schrödinger n'était pas linéaire selon k. Elle s'exprime par \( \omega (k) = \dfrac{\hbar}{2m} k^2 \). La vitesse de phase du paque d'ondes \( v_{\phi} = \dfrac{\hbar}{2m} k \) dépend de k . Les ondes dont le k > k0 vont plus vite que celles dont le k < k0. Le paquet d'ondes s'étale au cours du temps.

Déplacement du centre du paquet d'ondes

La vitesse de groupe est la vitesse de déplacement du centre du paquet d'ondes, ou de façon plus visuelle, celle de l'enveloppe du paquet. Cette vitesse notée vG est définie par \( v_G = \dfrac{\omega(k)}{k} \) pour k = k0.

Un simple calcul montre que dans le cas d'une particule libre de masse m, la vitesse de groupe vG est égale à \( v_G = \dfrac{\hbar k_0}{m} \), soit encore selon la définition de k0, \( v_G = \dfrac{p_0}{m} \). On reconnait la vitesse d'une particule telle que définie en mécanique classique.

Paquet d'ondes gaussien

Nous avons vu au chapitre précédent que la fonction g(k), enveloppe du paquet d'ondes, pouvait être quelconque, à condition d'être de carré sommable (son intégrale existe et est convergente) et normalisée (son intégrale est égale à 1). Pourquoi donc choisir une fonction gaussienne pour représenter l'état d'une particule libre ?

Il n'est peut-être pas inutile de rappeler la définition d'une fonction gaussienne. Celle que nous allons utiliser est la fonction de densité de probabilité de la loi normale, qui s'exprime par :

\begin{align} \displaystyle f(x)=\dfrac {1}{\sigma {\sqrt {2\,\pi }}} e^{-\dfrac{\left(x-\mu \right)^2}{2\sigma ^2}} \end{align}

avec \( \mu \) l'espérance mathématique de la distribution normale et \( \sigma \) son écart-type.

Pour modéliser un paquet d'onde, nous déciderons que \( \mu \) représentera la position moyenne du centre du paquet et que \( \sigma \) représentera la largeur du paquet. Il est possible de faire d'autres choix, que vous trouverez dans la littérature. Nous aboutissons donc à la définition d'un paquet d'ondes gaussien centré sur x0

\begin{align} \Psi(x, t=0) = e^{-\dfrac{1}{2}{\left(\dfrac{(x-x_0)}{\sigma}\right)}^2}e^{i\dfrac{2\pi(x-x_0)}{\lambda}} \end{align}

Le choix d'une fonction gaussienne pour construire notre paquet d'onde vient du fait que la forme de fonction d'onde que l'on obtient est la forme optimale pour exprimer la relation d'incertitude d'Heisenberg \( \Delta x \Delta p = \dfrac{\hbar}{2} \). Nous reviendrons sur ce sujet plus tard.

Simuler une particule en mécanique quantique

D'après la théorie de Schrödinger, largement vérifiée par l'expérience, son équation décrit l'évolution, plus précisément celle de sa densité de probabilité de détection, d'une particule non relativiste et libre (c'est à dire hors de l'influence d'un champ de potentiel).

Il devient alors très naturel de modéliser cette particule par un paquet d'ondes gaussien, objet qui possède les caractéristiques mathématiques et physiques attendues pour modéliser une particule (localisation, énergie finie).

Aussi, lorsque nous étudierons l'évolution d'une particule à l'aide de l'équation de Schrödinger, nous utiliserons le paquet gaussien comme modèle de particule. Ce que j'ai fait, par exemple, pour résoudre l'équation par la méthode FDTD.

Dans la suite, je vais vous montrer un exemple de construction d'un paquet d'ondes gaussien, en Python et en FORTRAN, exemple que vous pourrez utiliser lors de vos manip avec l'équation de Schrödinger.

Simuler un paquet d'ondes en Python

La méthode

Imaginons que nous voulions étudier l'évolution d'un électron libre dans le vide. Nous allons construire un paquet gaussien qui simulera cet électron est qui pourra être propagé par l'équation de Schrödinger dans une expérience.

Reprenons la définition d'un paquet d'ondes brogliennes d'enveloppe gaussienne à t=0 :

\begin{align} \Psi(x, t=0) = e^{-\dfrac{1}{2}{\left(\dfrac{(x-x_0)}{\sigma}\right)}^2}e^{i\dfrac{2\pi(x-x_0)}{\lambda}} \end{align}

avec \( \sigma \) la largeur du paquet et x0 l'abscisse initiale du centre du paquet d'ondes. Vous notez que j'ai abandonné le facteur constant, que ne m'apporte rien s'agissant de visualiser la forme d'un paquet d'ondes gaussien.

Décomposons cette équation en deux équations, l'une définissant la partie réelle de l'équation, l'autre sa partie imaginaire, et en passant l'exponentielle de la porteuse sous forme trigonométrique :

\( \Psi_{Reel} = e^{-\dfrac{1}{2}{\left(\dfrac{(x-x_0)}{\sigma}\right)}^2} cos \left(\dfrac{2\pi(x-x_0)}{\lambda}\right) \)

\( \Psi_{Imag} = e^{-\dfrac{1}{2}{\left(\dfrac{(x-x_0)}{\sigma}\right)}^2} sin\left(\dfrac{2\pi(x-x_0)}{\lambda}\right) \)

Il restera à normaliser le paquet initial pour satisfaire la condition de normalisation :

\(\displaystyle \int_0^L \left( \Psi_{Reel}^2 + \Psi_{Imag}^2 \right)dx = 1 \).

Le code Python

Il est contenu dans le script SchrodingePaquetOndes.py. Ce script commence classiquement par l'import des packages utiles et par la déclaration des différents paramètres de la simulation. J'utilise ici le package scipy.constants qui contient la plupart des constantes physiques, ce qui évite d'aller les chercher dans les bouquins.

Je commence par calculer la valeur de la partie réelle et de la partie imaginaire de la fonction d'onde initiale:
Psi_Real = exp(-0.5*((x-x0)/sigma)**2)*cos(DeuxPi*(x-x0)/Lambda)
Psi_Imag = exp(-0.5*((x-x0)/sigma)**2)*sin(DeuxPi*(x-x0)/Lambda)

puis je procède à sa normalisation et au calcul de la densité de probabilité de présence \( ||\Psi||^2 \), comme décrit plus haut. Cela me pose d'ailleurs un petit problème : les bornes de l'intégrale sont infinies, ce qui n'est pas très pratique en calcul numérique. Aussi, je vais choisir un domaine d'intégration suffisamment étendu devant la taille de la particule, mais pas infini, pour que l'erreur commise lors de l'intégration soit négligeable. En d'autres termes, je choisis de négliger l'aire sous les queues de la courbe gaussienne. Le domaine d'intégration est fixé par le vecteur x, soit l'intervalle [0,L]. Voici le code qui implémente ce sujet :

PsiPsiC = Psi_Real**2 + Psi_Imag**2
C = simps(PsiPsiC,x)
Psi_Real = Psi_Real/sqrt(C)
Psi_Imag = Psi_Imag/sqrt(C)
Psi_Prob = Psi_Real**2 + Psi_Imag**2

J'emploie ici la méthode de Simpson, tirée du package integrate, pour calculer l'intégrale. J'aurais aussi pu employer la méthode des trapèzes (moins précise) ou Romberg (plus couteuse).

Puis je calcule l'énergie transportée par le paquet et j'indique l'énergie théorique correspondante :
En = zeros(Nx)
En[1:-1] = a1*(Psi_Real[1:-1] - 1j*Psi_Imag[1:-1]) \
*(Psi_Real[2:] - 2*Psi_Real[1:-1] + Psi_Real[:-2] \
+ 1j*(Psi_Imag[2:] - 2*Psi_Imag[1:-1] + Psi_Imag[:-2]))
Ebarre = simps(En,x)
print "Energie theorique : " + str(Ec) + " eV"
print "Energie moyenne du paquet : " + str(Ebarre.real) + " eV"

Le résultat

Dans ma simulation j'ai choisi les valeurs suivantes pour les paramètres physiques :

L'énergie théorique calculée est de 66,84 eV et l'énergie moyenne du paquet est de 67,07 eV.

Sur le schéma suivant, on observe la fonction d'onde d'un paquet d'ondes gaussien (en bleu la partie réelle et en rouge la partie imaginaire) :

Fonction d'onde gaussienne

et ici la courbe de densité de probabilité de détection :

Densité de probabilité de détection

On constate qu'il s'agit d'une distribution gaussienne centrée sur l'abscisse d'origine du paquet d'ondes.

Vous pourrez faire varier la longueur d'onde associée à l'électron, et donc son énergie, en observant ce qui se passe. Vous pouvez aussi modifier la largeur du paquet, en faisant les mêmes observations.

Simuler un paquet d'ondes en FORTRAN

Voici un programme similaire en FORTRAN de simulation de la propagation d'un paquet d'ondes gaussien :

C Programme de simulation d'un paquet d'ondes
C Dominique Lefebvre
C Scientific Programming
C Juin 2009
PROGRAM PaquetOndes
IMPLICIT NONE
C Declaration des constantes
DOUBLE PRECISION pi, Omega0, a
DOUBLE COMPLEX ci, u, Enveloppe
INTEGER n, nt , i, it
C Declaration des parametres
PARAMETER (pi = 3.141592654)
PARAMETER (n = 1000)  ! pas d'integration sur Omega
PARAMETER (nt = 2000) ! pas d'integration sur le temps
C Declaration des variables
DOUBLE PRECISION Omega, dOmega,k,z,t,t0,dt
REAL TTAB(nt), UTAB(nt)

C Definition des caracteristiques du paquet 'onde
C Omega0 : frequence du signal (en Hz)
C a : intervalle entre les noeuds (en m)
Omega0 = 50.
a=2.

C Initialisation des constantes et parametres
ci = (0.d0, 1.d0)
dt = 0.1/Omega0
Omega0 = 2.*pi*Omega0
dOmega = Omega0/(n-1)

C calcul et representation de U(z,t) en fonction de z
10 CONTINUE
WRITE(*,'("z en cm (-1 pour sortir) : ",$)')
READ (*,*) z
IF (z . EQ. -1) GOTO 20
C Boucle sur t
DO it = 1, nt
u = (0.d0, 0.d0)
t = (it - nt/2)*dt
C Boucle sur Omega
DO i = 1, n
Omega = (i - 1)*dOmega
C Calcul de k avec l'equation de dispersion k = 2./a*ASIN(Omega/Omega0)
C Integration de F(Omega)
u = u + Enveloppe(Omega)*EXP(ci*(Omega*t - k*z))
ENDDO
TTAB(it) = REAL(t)
UTAB(it) = REAL(DBLE(u)) ! extraction de la partie reelle
ENDDO

C Dessin du paque d'ondes
CALL TraceCourbe(TTAB,UTAB,nt)
C Condition de sortie (simule le REPEAT WHILE)
GOTO 10
C fin du programme
20 WRITE(*,'("Fin du programme PaquetOndes",$)')
END

C ---------------------------------------------------------------
C Routine de calcul de l'enveloppe gaussienne
C ---------------------------------------------------------------
DOUBLE COMPLEX FUNCTION Enveloppe (Omega)
IMPLICIT NONE
DOUBLE PRECISION FrequCentrale, Omega, Largeur, pi
PARAMETER (pi = 3.141592654)

C Definition des parametres de la courbe enveloppe
FrequCentrale = 50.0 ! frequence centrale du paquet
Largeur = 5.0 ! largeur du paquet
FrequCentrale = 2.*pi*FrequCentrale
Largeur = 2.*pi*Largeur

C Definition de la gaussienne enveloppe
Enveloppe = EXP(-((Omega - FrequCentrale)/Largeur)**2)
END

C ---------------------------------------------------------------
C Routine de calcul de l'element MAX d'un vecteur de REAL
C T : vecteur de REAL C n : nombre (INTEGER)
C ---------------------------------------------------------------
REAL FUNCTION MaxArray (T,n)
IMPLICIT NONE
REAL T(*), MaxTab
INTEGER i,n
MaxTab = T(1)
DO i = 2,n
MaxTab = MAX(T(i),MaxTab)
ENDDO
MaxArray = MaxTab
END

Notez que dans ce programme j'utilise la librairie graphique Dislin. Elle évite d'avoir à faire appel à Gnuplot, c'est quand même plus pratique! Le code source est dans le fichier PaquetOndes et le projet dans paquet (attention à linker la librairie Dislin!).

Son usage est très simple. Après avoir chargé le fichier projet et le code source dans Vfort et vérifié les répertoires de librairie, vous compilez et linkez le code. Puis vous l'exécutez. Au lancement, le programme vous demande la distance à laquelle vous voulez faire le calcul du paquet d'ondes. Vous lui indiquez. Puis le tracé apparaît dans une fenêtre graphique. Pour en sortir et continuer le programme, cliquez sur le bouton droit de votre souris. Le programme boucle en vous demandant une nouvelle cote. Si vous voulez sortir, tapez sur -1.

Contenu et design par Dominique Lefebvre - www.tangenteX.com janvier 2019 Licence Creative Commons Contact :