TangenteX.com

Introduction

La transformée de Laplace est l'une des transformées les plus connues et les plus utilisées de l'Analyse, l'égale de la célébrissime transformée de Fourier. Comme la transformée de Fourier, avec laquelle elle a beaucoup de points communs, c'est une transformée intégrale, c'est à dire que sa définition est basée sur une intégrale.

L'ancêtre de la transformée de Laplace fut constuite par Pierre-Simon Laplace à la fin du XVIIIème siècle, dans l'élaboration de sa théorie des probabilités. Mais c'est à un physicien génial et autodidacte que nous devons sa forme actuelle et l'étendue de ses utilisations, Oliver Heaviside. Il créa, à la fin du XIXème, le calcul opérationnel (ou calcul symbolique) pour simplifier la résolution des équations différentielles des systèmes électriques. Ce faisant, il introduisit l'usage de la transformée de Laplace dans l'arsenal des outils mathématiques des physiciens.

Dans l'étude des systèmes dynamiques, essentiellement les systèmes linéaires stationnaires, la transformée de Laplace est particulièrement adaptée à l'étude du régime permanent du système, dès lors que l'on connait son état à un instant t, que l'on considèrera comme l'origine des temps dans son évolution. C'est un aspect important dans l'étude de la transformée de Laplace : la fonction f(t) n'est pas définie, du moins on se fiche de sa valeur, pour t < 0. La transformée de Laplace est définie pour toutes les fonctions nulles pour t < 0 et non-nulles pour t => 0. Pour info, on appelle ce type de fonction une fonction causale. Une fonction causale est bornée à gauche et, du point de vue physique, respecte le principe de causalité.

Dans cette page, je vais introduire la définition et les propriétés les plus courantes de la transformée de Laplace, mais surtout les applications que l'on peut retrouver en prépa et en licence. J'évoquerai aussi comment le module de calcul symbolique sympy de Python permet de calculer la transformée de Laplace d'une fonction et aussi sa transformée inverse.

Définition

La transformée de Laplace

La transformée de Laplace, que j'abrégerai par TL dans la suite, est une transformation intégrale que l'on note \( F = \mathcal{L}[f] \), F étant la TL de f, qui est définie par :

\( \displaystyle F(z) = \int_0^{+\infty} f(t)e^{-zt}dt \)

La fonction f(t) doit être continue par morceaux sur \( \mathbb{R^+}\), et présenter un nombre fini de discontinuités sur \( \mathbb{R^+}\).

On appelle "original" la fonction f(t) et "image" la fonction F(z), TL de f(t).

La variable z (on utilise aussi souvent p comme nom de variable) est de dimension inverse à celle de t : si t est un temps, alors z aura la dimension d'une fréquence ou d'une constante de temps. Si t est une dimension spatiale (ou x, comme on le notera souvent), alors z aura la dimension d'un nombre d'onde. Les variables t et z sont dites "conjuguées".

La variable z est a priori un nombre complexe. La fonction F(z) est une fonction à une variable complexe, même si f(t) est une fonction à variable réelle.

De façon figurée, et l'on trouvera souvent cette expression chez les physiciens, faire une TL sur une fonction c'est passer d'un espace linéaire temporel vers le domaine de Laplace, ou plan de Laplace, qui est en fait le plan complexe (le demi-plan droit).

La transformée de Laplace inverse

Avec la TL, nous passons du domaine temporel vers le domaine de Laplace. Bien sûr, nous aimerions pouvoir faire le chemin inverse, c'est à dire de passer du domaine de Laplace au domaine temporel. C'est l'objet de la transformée de Laplace inverse, que j'abrégerai en TL-1, que l'on note \( f = \mathcal{L}^{-1}[F] \)  et dont la définition est :

\( \displaystyle f(t) = \dfrac{1}{j2\pi} \int_{-\infty}^{+\infty} F(z) e^{zt}dz \)

Le chemin d'intégration est choisi quelconque dans le plan, en restant dans le rayon de convergence de F(z). En pratique, on le choisira de sorte à faciliter le calcul d'intégrale.

Nous verrons plus loin l'application pratique de ce calcul, dans son usage pour résoudre les équations différentielles.

Propriétés

Dans ce chapitre, je me contenterai de rappeler les principales propriétés de la TL, qui sont utilisées dans les applications pratiques.

Linéarité

Si a et b sont deux scalaires et f et g deux fonctions qui répondent aux conditions énoncées ci-dessus, on a :

\(  \mathcal{L}[af + bg](z) = a \mathcal{L}[f](z) + b \mathcal{L}[g](z) \)

Modulation

Soit une fonction f(t) qui répond aux critères ci-dessus, que l'on module par un signal sinusoïdal de pulsation \( \omega_0 \), tel que \( g(t) = e^{-j\omega_0 t}f(t) \). Sa transformée de Laplace est : 

\(  \mathcal{L}[g](z) = \mathcal{L}[ e{-j\omega_0 t}f(t)](z) = F(z + j\omega_0) \)

Changement d'échelle

Conservons notre fonction f(t) et appliquons un changement d'échelle sur t. La fonction f(t) devient \( f(\lambda t) \), avec \( \lambda \) un scalaire strictement positif. La transformée de Laplace du changement d'échelle est :

\(  \mathcal{L}[f(\lambda t)](z) = \dfrac{1}{\lambda} F\left(\dfrac{z}{\lambda}\right) \)

Le théorème de retard

Toujours sur notre fonction f(t), appliquons une translation sur l'axe du temps, en introduisant donc un retard. Soit donc f(t - a), dont la transformée de Laplace est :

\(  \mathcal{L}[f(t - a)](z) = e^{-az}F(z) \)

Reamarque : le même raisonnement est applicable à une avance, i.e. pour f(t + a)

Dérivation

Nous arrivons maintenant à une propriété très utile pour la résolution des équations différentielles à l'aide d'une TL. Il s'agit d'établir la TL de la dérivée de la fonction f(t), que je note f'(t). Un calcul simple (une intégration par parties de la définition) nous donne :

\(  \mathcal{L}[f'](z) = zF(z) - f(0_+) \)

f(0+) est la limite à droite de f pour t = 0.

Il est utile de généraliser cette définition pour une dérivée d'ordre n :

\( \displaystyle \mathcal{L}\left[\dfrac{d^nf(t)}{dt^n}\right](z) = z^nF(z) -  \sum_{k=0}^{n-1}z^{n-1-k} \dfrac{d^kf(0)}{dt^k} \)

Intégration

Une autre TL très utile pour la suite : la TL d'une fonction primitive. Soit \( \displaystyle g(x) = \int_{0}^{t}f(x)dx \) la primitive de f, qui s'annule pour t=0. Sa TL est donnée par :

\(\displaystyle  \mathcal{L}\left[ \int_{0}^{t} f(x)dx\right](z) = \dfrac{1}{z}F(z) \)

Convolution

Soit deux fonctions f et g, dont on définit le produit de convolution (f * g)(t) par \( \displaystyle (f * g)(t) =  \int_{-\infty}^{+\infty}f(x)g(t - x)dx \). La TL du produit de convolution de ces deux fonctions est donnée par : 

\(\displaystyle  \mathcal{L}[f * g](z) = F(z) G(z) \)

La TL d'un produit de convolution est égale au produit des TL des fonctions.

Applications

Résoudre une équation différentielle

Les applications de la transformée de Laplace sont nombreuses en mathématique et en physique. Les principales concernent la résolution des équations différentielles à coefficients constants ou non, des équations intégro-différentielles, des équations aux différences finies et des équations aux dérivées partielles.

Dans cette page, je me limite à la résolution des équations différentielles à coefficients constants. Nous avons utilisé cette méthode lors de l'étude de la fonction de transfert d'un système continu linéaire.

Je vais d'abord exposer la méthode générale puis l'illustrer par un exemple.

La méthode

Soit une équation différentielle linéaire, d'ordre n, à coefficients constants, que j'exprime sous sa forme compacte :

\(\displaystyle  \sum_{p = 0}^{n} a_p \dfrac{d^p f(t)}{dt^p} = e(t) \) avec f(t < 0) = 0.

En utilisant les propriétés de la TL de linéarité et de dérivation d'ordre n, nous obtenons l'expression générale de la transformée de Laplace de cette équation :

\( \displaystyle \mathcal{L}\left[\dfrac{d^nf(t)}{dt^n}\right] = z^nF(z) -  \sum_{k=0}^{n-1}z^{n-1-k} \dfrac{d^kf(0)}{dt^k} \)

Les conditions d'Heaviside imposent une contrainte sur toutes les valeurs des dérivées d'ordre (n-1) . Elles stipulent que toutes les dérivées d'ordre variant entre 0 et n-1 doivent être nulles pour t = 0. Cela signifie que dans la définition générale ci-dessus, le terme \( \sum_{k=0}^{n-1}z^{n-1-k} \dfrac{d^kf(0)}{dt^k} \) est nul. Et donc que, sous les conditions d'Heaviside :

\( \displaystyle \mathcal{L}\left[\dfrac{d^nf(t)}{dt^n}\right] = z^nF(z)  \)

Finalement, sous les conditions d'Heaviside, on peut poser les règles suivantes :

On remplace les dérivations et intégration par des multiplications et des divisions, c'est à dire des équations différentielles et intégro-différentielles par des polynômes. Admettez que c'est quand même plus simple ! Attention toutefois à ne pas oublier que ceci n'est valable que lorsque les conditions d'Heaviside sont remplies, c'est à dire que toutes les dérivées d'ordre n-1 s'annulent pour t = 0.

Notre équation différentielle de départ dans le domaine temporel \(\displaystyle  \sum_{p = 0}^{n} a_p \dfrac{d^p f(t)}{dt^p} = e(t) \) devient donc dans le domaine de Laplace  \( \sum_{p = 0}^{n} a_p z^pF(z) = E(z)  \).

Pour des conditions initiales non nulles, cas le plus général il faut bien le dire, il est nécessaire de revenir à la définition générale.

A partir de cette équation polynomiale, il suffit d'isoler F(z) et la calculer. Une fois le résultat obtenu, on repasse dans le domaine temporel pour obtenir f(t), en calculant la transformée de Laplace inverse de F(z).

Un exemple

Considérons l'équation différentielle suivante, dont la forme évoque clairement celle d'un oscillateur harmonique entretenu :

\( \displaystyle \dfrac{d^2f(t)}{dt^2} + 2 \dfrac{df(t)}{dt} + f(t) = sin(t) \) avec pour conditions intiales \(\dfrac{df(0)}{dt} = 0 \) et \( f(0) = 1\).

Nous ne sommes pas dans les conditions d'Heaviside et j'appliquerai donc la formule générale de calcul d'une dérivée d'ordre n pour calculer la transformée de Laplace de l'équation. Je note traditionnellement \(\displaystyle  \mathcal{L}[ f(t)](p) = F(p) \).

Calculons la transformée de Laplace de chaque membre de l'équation :

\(\displaystyle  \mathcal{L}\left[ \dfrac{d^2f(t)}{dt^2} \right](p) = p^2F(p) - \dfrac{df(0)}{dt} - pf(0) \)

\(\displaystyle  \mathcal{L}\left[ 2 \dfrac{df(t)}{dt} \right](p) = 2\left(pF(p) - f(0)\right) \)

\(\displaystyle  \mathcal{L}\left[ f(t) \right](p) = F(p) \)

et la transformée de Laplace du second membre :

\(\displaystyle  \mathcal{L}\left[ sin(t) \right](p) = \dfrac{1}{p^2 + 1} \)

En réunissant tout ça et en prenant en compte les conditions initiales, j'obtiens finalement dans le domaine de Laplace, l'équation :

\( \displaystyle (p^2 + 2p + 1)F(p) - (p + 2) = \dfrac{1}{p^2 + 1} \)

d'où je tire l'expression de F(p)  :

\( \displaystyle F(p) = \dfrac{1}{(p^2 + 1)(p + 1)^2} + \dfrac{p + 2}{(p + 1)^2} \).

Il reste maintenant à passer du domaine de Laplace au domaine temporel. Il faut pour cela décomposer en fractions simples l'expression de F(p), dont on puisse trouver les transformées inverses dans les tables. Pour cela, deux moyens :

>>> from sympy import *
>>> p = symbols('p')
>>> init_printing(use_unicode=true)
>>> F = (1/(p**2 + 2*p + 1))*((1/(p**2 +1)) + p + 2)
>>> apart(F)

On obtient :

\( F(p) = -\dfrac{1}{2}  \dfrac{p}{p^2 + 1} +  \dfrac{3}{2}  \dfrac{1}{p + 1} + \dfrac{3}{2}  \dfrac{1}{(p + 1)^2} \)

Les tables de transformées de Laplace inverses (ou sympy !) nous donnent :

\( \mathcal{L}^{-1}\left[ \dfrac{p}{p^2 + 1}\right]  = \cos(t) \)

\( \mathcal{L}^{-1}\left[  \dfrac{1}{p + 1}\right]  = e^{-t} \)

\( \mathcal{L}^{-1}\left[  \dfrac{1}{(p + 1)^2}\right]  = te^{-t} \)

Notre solution dans le domaine temporel est donc :

\( f(t) = \dfrac{3}{2} (t + 1) e^{-t} - \dfrac{1}{2} \cos(t) \)

La démarche peut paraître longue et fastidieuse au premier regard. Mais avec un peu d'habitude, vous trouverez qu'elle est bien plus puissante que la résolution analytique.

Calculer la réponse d'un circuit

Dans la page de TangenteX consacrée aux fonctions de transfert, nous avons rencontré le quadripôle RC série, pour lequel nous avons établi sa fonction de transfert \( \displaystyle H(p) = \dfrac{S(p)}{E(p)} = \dfrac{1}{1 + RC p} \).

Je voudrais maintenant déterminer la réponse, le signal de sortie s(t), lorsque j'injecte sur son entrée un échelon de tension, c'est à dire lorsque je porte de manière quasi-instantanée la tension d'entrée ve de 0 à V0 (V0 quelconque, mais sans détruire le condensateur !). Mathématiquement, cela revient à poser la fonction d'entrée du quadripôle e(t) égale à \( e(t) = V_0 \mathcal{H}(t) \), \( \mathcal{H}(t) \) étant la fonction échelon d'Heaviside.

La transformée de Laplace va me permettre de calculer rapidement et simplement la réponse du quadripôle à cet échelon de tension.

Commençons par déterminer la transformée de Laplace de e(t), c'est à dire de la fonction d'Heaviside. Elle nous est donnée par les tables ou par sympy, comme nous le verrons dans le chapitre suivant. J'ai :

\( \displaystyle \mathcal{L}\left[ V_0\mathcal{H}(t) \right](p) = \dfrac{V_0}{p} \)

De la définition de la fonction de transfert du quadripôle \( \displaystyle \dfrac{S(p)}{E(p)} = \dfrac{1}{1 + RC p} \), je tire \( \displaystyle S(p) = E(p) \dfrac{1}{1 + RC p} \), soit :

\( \displaystyle S(p) = \dfrac{V_0}{p} \dfrac{1}{1 + RC p} \)

Nous avons là la réponse du quadripôle dans le domaine de Laplace, dont il faut maintenant calculer la transformée de Laplace inverse pour connaitre sa réponse dans le domaine temporel.

A partir d'ici, deux possibilités :

Dans les deux cas, vous aboutissez au résultat attendu :

\( \displaystyle s(t) =V_0\mathcal{H}(t)\left[ 1 - e^{-\dfrac{t}{RC}} \right]\)

Cette méthode est applicable à l'étude de toutes les réponses d'un circuit, à condition bien sûr que le signal d'entrée réponde aux conditions d'application d'une transformée de Laplace, et qu'il admette une fonction de transfert.

Transformée de Laplace et sympy

Nous avons découvert le module sympy de Python dans la page qui lui est consacrée. Je vous invite à la consulter plus de détails sur l'utilisation de sympy.

Mettre en oeuvre sympy

Je me mets en mode console sur mon environnement de développement Python, Spyder en l'occurence, et j'importe le module sympy, en employant les commandes :

>>> from sympy import *
>>> p = symbols("p")
>>> a,t = symbols("a,t", positive = True)
>>> init_printing(use_unicode=true)

J'initialise ici 3 symboles : la variable p pour faire des calculs dans le domaine de Laplace, et a et t dont je fixe le caractère positive, car je travaillerai sur des fonctions causales.

Calculer la transformée de Laplace d'une fonction

Soit à calculer la transformée de Laplace de la fonction cos(at) :

>>> f = cos(a*t)
>>> laplace_transform(f,t,p)

Je déclare la fonction f sur laquelle je vais travailler, dans ce cas cos(a*t). Attention au piège : il ne s'agit pas de la fonction cos() du module math de scipy, mais de la fonction symbolique cos() de sympy.

Puis je lance le calcul de la transformée de Laplace, en indiquant que la variable employée dans le domaine de Laplace est p. Sympy me retourne \( \displaystyle  \dfrac{p}{p^2 + a^2} \), plus exactement un tuple constitué du résultat de la TL et les conditions de convergence de la transformée (je vous rappelle que c'est une intégrale).

Le résultat obtenu est conforme aux tables de transformées : \( \displaystyle  \mathcal{L}[\cos(at)](p) = \dfrac{p}{p^2 + a^2} \).

Vous pouvez vous entrainer sur toutes les fonctions que vous imaginez. Si la fonction ne remplit pas les conditions de la TL, sympy vous le dira. Avec sympy, plus besoin de tables !

Calculer la transformée de Laplace inverse d'une fonction

Je peux bien entendu calculer la transformée de Laplace inverse d'une fonction F(p), par exemple :

>>> F = 1/(p**2 + a**2)
>>> inverse_laplace_transform(F,p,t)

Je cherche la transformée inverse de \( F(p) = \dfrac{1}{p^2 + a^2} \), et je trouve comme il se doit : \( \dfrac{1}{a} \sin(at) \). Je vous le dit, plus besoin de tables avec sympy et un bon Mac !

Résoudre une équation différentielle par transformée de Laplace

Il est possible de résoudre une équation différentielle avec sympy, mais ce n'est pas immédiat et cela demande un petit développement. Ceux que cela intéresse devraient consulter le livre "Numerical Python" de Robert Johansson au chapitre 9. Il décrit la démarche et donne même la routine qu'il faut développer pour calculer la transformée de Laplace d'une dérivée nième.

Pour ma part, je préfère me servir de sympy en appui de la méthode classique pour :

C'est presque aussi rapide que le calcul direct par sympy (après avoir fait le dev. qui va bien) et c'est plus pratique, à mon avis.

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