TP2 - Tranformée de Fourier¶
Illustrations de certaines propriétés¶
On va commencer par illustrer la propriété de dilatation avec la fonction
$$ f_a(t) = e^{-\pi t^2}\cos(2\pi at),\qquad a = 1. $$
1) Illustrer numériquement $f_a$.¶
Importons les librairies dont nous aurons besoin pour faire des graphiques et du calcul numérique.
import matplotlib.pyplot as plt
import numpy as np
Définissons la fonction prote $f_a$.
a = 1.
f = lambda t: np.exp(- np.pi * t**2)*np.cos(2*np.pi*a*t)
Définissons l'intervalle de temps qu'on va considérer.
t = np.linspace(-3, 3, 200)
plt.plot(t,f(t))
plt.show()
2) Calucler la transformée de Fourier de $f_a$.¶
On a
$$ f_a(t) = g(t) h_a(t) \qquad\text{and} \qquad g(t) = e^{-\pi t^2}\qquad\text{and}\quad h_a(t)=\cos(2\pi at).$$
On a pour $s\in \mathbb{R}$
\begin{align*} \mathcal{F}f_a(s) = \int_{-\infty}^{+\infty} g(t) h_a(t) e^{-2 \pi i s t}dt & = \int_{-\infty}^{+\infty} \mathcal{F}^{-1} \mathcal{F} g(t) \mathcal{F}^{-1} \mathcal{F} h_a(t)e^{-2\pi i s t} dt \\ & = \int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty} \mathcal{F} g(u) \mathcal{F} h_a(v) e^{2\pi i u t} e^{2\pi i v t} e^{-2\pi i s t} du dv dt \\ & = \int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty} \mathcal{F} g(u) \mathcal{F} h_a(v) \Big(\int_{-\infty}^{+\infty} e^{2\pi i (u + v -s) t} dt \Big) du dv, \end{align*}
où
$$ \int_{-\infty}^{+\infty} e^{2\pi i (u + v -s) t} dt =\int_{-\infty}^{+\infty} \mathcal{F}\delta (t) e^{2\pi i (u + v -s) t} dt = \mathcal{F}^{-1}\mathcal{F}\delta(u + v -s) = \delta(u + v -s) = \delta_{s-v}(u), $$
car $\mathcal{F}\delta = 1$.
Ainsi,
\begin{align*} \mathcal{F}f_a(s) & = \int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty} \mathcal{F} g(u) \mathcal{F} h_a(v) \delta_{s-v}(u) du dv \\ & = \int_{-\infty}^{+\infty}\Big(\int_{-\infty}^{+\infty} \mathcal{F} g(u) \delta_{s-v}(u) du \Big) \mathcal{F} h_a(v) dv \\ & = \int_{-\infty}^{+\infty} \mathcal{F} g(s-v) \mathcal{F} h_a(v) dv. \end{align*}
Or, comme on l'a vu dans la partie cours, on a $\mathcal{F} g(s-v)= g(s-v)$, et comme
$$ \cos(2\pi at) = \frac{e^{2\pi i at}+e^{-2\pi i at}}{2} = \frac{1}{2}(\mathcal{F}\delta_a(t) +\mathcal{F}\delta_{-a}(t) )$$
on a aussi
\begin{align*} \mathcal{F}h_a(v) = \mathcal{F}^{-1}h^-_a(v) & = \mathcal{F}^{-1}h_a(v) = \mathcal{F}^{-1}\Big( \frac{1}{2}(\mathcal{F}\delta_a(v) +\mathcal{F}\delta_{-a}(v) ) \Big) \\ & = \Big( \frac{1}{2}( \mathcal{F}^{-1}\mathcal{F}\delta_a(v) + \mathcal{F}^{-1}\mathcal{F}\delta_{-a}(v) ) \Big) \\ & = \frac{1}{2}(\delta_a(v) +\delta_{-a}(v) ) \end{align*}
car $h_a$ est une fonction paire, et la transformée de Fourier est linéaire. Au final, on obtient
\begin{align*} \mathcal{F}f_a(s) & = \int_{-\infty}^{+\infty} \mathcal{F} g(s-v)(\delta_a(t) +\delta_{-a}(v) ) dv \\ & = \frac{1}{2} \Big( \int_{-\infty}^{+\infty} \mathcal{F} g(s-v)\delta_a(v) dv + \int_{-\infty}^{+\infty} \mathcal{F} g(s-v)\delta_{-a}(v) dv\Big)\\ & = \frac{1}{2} (\mathcal{F} g(s-a) + \mathcal{F} g(s+a))\\ & = \frac{1}{2} (g(s-a) + g(s+a)). \end{align*}
3) Comparer la formule théorique avec une évaluation numérique de la transformée de Fourier. On utilisera encore (la mauvaise façon de faire avec) la fonction quad
de la librairie scipy.integrate
(On verra comment faire autrement plus tard, l'approche qu'on va utliser n'est pas optimale!).¶
Commençons par importer la fonction quad et $\pi$
from scipy.integrate import quad
from numpy import pi as pi
Définissons l'intervalle de fréquences.
s = np.linspace(-4, 4, 200)
Définissons maintenant notre fonction de transformée de Fourier.
def TF_func(fct, s):
fct_tmp_re = lambda t: fct(t) * np.cos(2*pi*s*t)
re_tf, _ = quad(fct_tmp_re, -10, 10)
fct_tmp_im = lambda t: fct(t) * -np.sin(2*pi*s*t)
im_tf, _ = quad(fct_tmp_im, -10, 10)
return np.array([re_tf, im_tf])
On calul la transformée de Fourier en tous les points $s$
TF_f = np.array([TF_func(f, s) for s in s])
Ci-dessous on voit que la partie imaginaire est bien nulle car notre fonction porte est paire.
TF_f
array([[2.58412046e-13, 0.00000000e+00], [5.72124108e-13, 0.00000000e+00], [1.19429868e-12, 0.00000000e+00], [2.45627375e-12, 0.00000000e+00], [5.02702341e-12, 0.00000000e+00], [1.02271577e-11, 0.00000000e+00], [2.06323774e-11, 0.00000000e+00], [4.12187106e-11, 0.00000000e+00], [8.15077271e-11, 0.00000000e+00], [1.59529798e-10, 0.00000000e+00], [3.09063884e-10, 0.00000000e+00], [5.92701939e-10, 0.00000000e+00], [1.12516017e-09, 0.00000000e+00], [2.11438381e-09, 0.00000000e+00], [3.93318516e-09, 0.00000000e+00], [7.24261427e-09, 0.00000000e+00], [1.32018981e-08, 0.00000000e+00], [2.38214035e-08, 0.00000000e+00], [4.25488939e-08, 0.00000000e+00], [7.52314072e-08, 0.00000000e+00], [1.31674021e-07, 0.00000000e+00], [2.28134528e-07, 0.00000000e+00], [3.91265857e-07, 0.00000000e+00], [6.64267325e-07, 0.00000000e+00], [1.11635889e-06, 0.00000000e+00], [1.85718337e-06, 0.00000000e+00], [3.05841027e-06, 0.00000000e+00], [4.98570646e-06, 0.00000000e+00], [8.04540060e-06, 0.00000000e+00], [1.28516428e-05, 0.00000000e+00], [2.03216809e-05, 0.00000000e+00], [3.18090438e-05, 0.00000000e+00], [4.92869117e-05, 0.00000000e+00], [7.55966594e-05, 0.00000000e+00], [1.14779310e-04, 0.00000000e+00], [1.72510137e-04, 0.00000000e+00], [2.56658490e-04, 0.00000000e+00], [3.77995524e-04, 0.00000000e+00], [5.51071163e-04, 0.00000000e+00], [7.95277543e-04, 0.00000000e+00], [1.13610837e-03, 0.00000000e+00], [1.60661126e-03, 0.00000000e+00], [2.24901244e-03, 0.00000000e+00], [3.11646975e-03, 0.00000000e+00], [4.27488050e-03, 0.00000000e+00], [5.80463678e-03, 0.00000000e+00], [7.80218287e-03, 0.00000000e+00], [1.03811916e-02, 0.00000000e+00], [1.36731411e-02, 0.00000000e+00], [1.78270461e-02, 0.00000000e+00], [2.30080858e-02, 0.00000000e+00], [2.93948734e-02, 0.00000000e+00], [3.71751480e-02, 0.00000000e+00], [4.65397262e-02, 0.00000000e+00], [5.76746473e-02, 0.00000000e+00], [7.07515693e-02, 0.00000000e+00], [8.59166259e-02, 0.00000000e+00], [1.03278127e-01, 0.00000000e+00], [1.22893667e-01, 0.00000000e+00], [1.44757361e-01, 0.00000000e+00], [1.68788097e-01, 0.00000000e+00], [1.94819750e-01, 0.00000000e+00], [2.22594359e-01, 0.00000000e+00], [2.51759191e-01, 0.00000000e+00], [2.81868485e-01, 0.00000000e+00], [3.12390426e-01, 0.00000000e+00], [3.42719581e-01, 0.00000000e+00], [3.72194655e-01, 0.00000000e+00], [4.00121014e-01, 0.00000000e+00], [4.25797012e-01, 0.00000000e+00], [4.48542797e-01, 0.00000000e+00], [4.67729980e-01, 0.00000000e+00], [4.82810381e-01, 0.00000000e+00], [4.93342012e-01, 0.00000000e+00], [4.99010612e-01, 0.00000000e+00], [4.99645243e-01, 0.00000000e+00], [4.95226887e-01, 0.00000000e+00], [4.85889451e-01, 0.00000000e+00], [4.71913110e-01, 0.00000000e+00], [4.53710460e-01, 0.00000000e+00], [4.31806471e-01, 0.00000000e+00], [4.06813608e-01, 0.00000000e+00], [3.79403810e-01, 0.00000000e+00], [3.50279153e-01, 0.00000000e+00], [3.20143021e-01, 0.00000000e+00], [2.89673494e-01, 0.00000000e+00], [2.59500358e-01, 0.00000000e+00], [2.30186838e-01, 0.00000000e+00], [2.02216728e-01, 0.00000000e+00], [1.75987170e-01, 0.00000000e+00], [1.51806954e-01, 0.00000000e+00], [1.29899845e-01, 0.00000000e+00], [1.10412181e-01, 0.00000000e+00], [9.34237840e-02, 0.00000000e+00], [7.89611191e-02, 0.00000000e+00], [6.70116084e-02, 0.00000000e+00], [5.75380476e-02, 0.00000000e+00], [5.04921607e-02, 0.00000000e+00], [4.58264646e-02, 0.00000000e+00], [4.35037635e-02, 0.00000000e+00], [4.35037635e-02, 0.00000000e+00], [4.58264646e-02, 0.00000000e+00], [5.04921607e-02, 0.00000000e+00], [5.75380476e-02, 0.00000000e+00], [6.70116084e-02, 0.00000000e+00], [7.89611191e-02, 0.00000000e+00], [9.34237840e-02, 0.00000000e+00], [1.10412181e-01, 0.00000000e+00], [1.29899845e-01, 0.00000000e+00], [1.51806954e-01, 0.00000000e+00], [1.75987170e-01, 0.00000000e+00], [2.02216728e-01, 0.00000000e+00], [2.30186838e-01, 0.00000000e+00], [2.59500358e-01, 0.00000000e+00], [2.89673494e-01, 0.00000000e+00], [3.20143021e-01, 0.00000000e+00], [3.50279153e-01, 0.00000000e+00], [3.79403810e-01, 0.00000000e+00], [4.06813608e-01, 0.00000000e+00], [4.31806471e-01, 0.00000000e+00], [4.53710460e-01, 0.00000000e+00], [4.71913110e-01, 0.00000000e+00], [4.85889451e-01, 0.00000000e+00], [4.95226887e-01, 0.00000000e+00], [4.99645243e-01, 0.00000000e+00], [4.99010612e-01, 0.00000000e+00], [4.93342012e-01, 0.00000000e+00], [4.82810381e-01, 0.00000000e+00], [4.67729980e-01, 0.00000000e+00], [4.48542797e-01, 0.00000000e+00], [4.25797012e-01, 0.00000000e+00], [4.00121014e-01, 0.00000000e+00], [3.72194655e-01, 0.00000000e+00], [3.42719581e-01, 0.00000000e+00], [3.12390426e-01, 0.00000000e+00], [2.81868485e-01, 0.00000000e+00], [2.51759191e-01, 0.00000000e+00], [2.22594359e-01, 0.00000000e+00], [1.94819750e-01, 0.00000000e+00], [1.68788097e-01, 0.00000000e+00], [1.44757361e-01, 0.00000000e+00], [1.22893667e-01, 0.00000000e+00], [1.03278127e-01, 0.00000000e+00], [8.59166259e-02, 0.00000000e+00], [7.07515693e-02, 0.00000000e+00], [5.76746473e-02, 0.00000000e+00], [4.65397262e-02, 0.00000000e+00], [3.71751480e-02, 0.00000000e+00], [2.93948734e-02, 0.00000000e+00], [2.30080858e-02, 0.00000000e+00], [1.78270461e-02, 0.00000000e+00], [1.36731411e-02, 0.00000000e+00], [1.03811916e-02, 0.00000000e+00], [7.80218287e-03, 0.00000000e+00], [5.80463678e-03, 0.00000000e+00], [4.27488050e-03, 0.00000000e+00], [3.11646975e-03, 0.00000000e+00], [2.24901244e-03, 0.00000000e+00], [1.60661126e-03, 0.00000000e+00], [1.13610837e-03, 0.00000000e+00], [7.95277543e-04, 0.00000000e+00], [5.51071163e-04, 0.00000000e+00], [3.77995524e-04, 0.00000000e+00], [2.56658490e-04, 0.00000000e+00], [1.72510137e-04, 0.00000000e+00], [1.14779310e-04, 0.00000000e+00], [7.55966594e-05, 0.00000000e+00], [4.92869117e-05, 0.00000000e+00], [3.18090438e-05, 0.00000000e+00], [2.03216809e-05, 0.00000000e+00], [1.28516428e-05, 0.00000000e+00], [8.04540060e-06, 0.00000000e+00], [4.98570646e-06, 0.00000000e+00], [3.05841027e-06, 0.00000000e+00], [1.85718337e-06, 0.00000000e+00], [1.11635889e-06, 0.00000000e+00], [6.64267325e-07, 0.00000000e+00], [3.91265857e-07, 0.00000000e+00], [2.28134528e-07, 0.00000000e+00], [1.31674021e-07, 0.00000000e+00], [7.52314072e-08, 0.00000000e+00], [4.25488939e-08, 0.00000000e+00], [2.38214035e-08, 0.00000000e+00], [1.32018981e-08, 0.00000000e+00], [7.24261427e-09, 0.00000000e+00], [3.93318516e-09, 0.00000000e+00], [2.11438381e-09, 0.00000000e+00], [1.12516017e-09, 0.00000000e+00], [5.92701939e-10, 0.00000000e+00], [3.09063884e-10, 0.00000000e+00], [1.59529798e-10, 0.00000000e+00], [8.15076681e-11, 0.00000000e+00], [4.12187409e-11, 0.00000000e+00], [2.06323774e-11, 0.00000000e+00], [1.02271577e-11, 0.00000000e+00], [5.02702341e-12, 0.00000000e+00], [2.45628604e-12, 0.00000000e+00], [1.19430065e-12, 0.00000000e+00], [5.72124108e-13, 0.00000000e+00], [2.58412046e-13, 0.00000000e+00]])
plt.plot(s, TF_f[:,0])
plt.plot(s, 0.5*(np.exp(-pi*(s-a)**2)+np.exp(-pi*(s+a)**2)))
plt.show()
La formule théorique est notre simulation sont bien en adéquation.
On va maintenant s'intéresser à la solution de l'equation différentielle $$ \alpha y''(t) + \beta y'(t) + \gamma y(t) = f_a(t) \qquad t\in\mathbb{R}. $$
pour laquelle $ y(-3)=y'(-3) = 0.$ pour traduire que le système est au repos au temps $t=-3$.
4) Donner une formule théorique de la solution de cette équation en utilisant la transformée de Fourier.¶
En appliquant la transformée de Fourier de cette équation, on a par linéarité
$$ \alpha \mathcal{F}(y'')(s) + \beta \mathcal{F}(y')(s) + \gamma \mathcal{F}y(s) = \mathcal{F}f_a(s) \qquad s\in\mathbb{R}, $$
qu'on peut donc réecrire
$$ \alpha (2\pi i s)^2 \mathcal{F}y(s) + \beta (2\pi i s) \mathcal{F}y(s) + \gamma \mathcal{F}y(s) = \mathcal{F}f_a(s) \qquad s\in\mathbb{R}, $$
ou encore
$$ \big( \alpha (2\pi i s)^2 + \beta (2\pi i s) + \gamma \big) \mathcal{F}y(s) = \mathcal{F}f_a(s) \qquad s\in\mathbb{R}. $$
On obtient ainsi
$$ \mathcal{F}y(s) = \frac{1}{\gamma-4 \pi ^2 \alpha s^2 + \beta (2\pi i s)} \mathcal{F}f_a(s), $$
et donc
$$ y(t) = \int_{-\infty}^{+\infty} \frac{1}{\gamma-4 \pi ^2 \alpha s^2 + \beta (2\pi i s)} \mathcal{F}f_a(s) e^{2\pi i st} ds. $$
5) Illustrer la solution de cette equation differentielle pour $\beta=2\pi b$ et $\gamma = 4\pi^2$.¶
Dans ce cas, on a
$$ y(t) = \frac{1}{4 \pi ^2}\int_{-\infty}^{+\infty} \frac{1}{1-\alpha s^2 + ib s} \mathcal{F}f_a(s) e^{2\pi i st} ds. $$
alpha, b = 1., 0.1
hat_y = lambda s :0.5*(np.exp(-pi*(s-a)**2)+np.exp(-pi*(s+a)**2))/(1-alpha * s**2 + 1j*b*s)
def TF_func_bis(fct, s):
fct_re_tmp = lambda t: np.real(fct(t) * np.exp(2*pi*1j*s*t))
tf_re, _ = quad(fct_re_tmp, -10, 10)
fct_im_tmp = lambda t: np.imag(fct(t) * np.exp(2*pi*1j*s*t))
tf_im, _ = quad(fct_im_tmp, -10, 10)
return np.array([tf_re, tf_im])
t = np.linspace(-3, 20, 200)
TFI_hat_y = np.array([TF_func_bis(hat_y, t)/(4*pi**2) for t in t])
/tmp/ipykernel_17735/1482389632.py:4: IntegrationWarning: The maximum number of subdivisions (50) has been achieved. If increasing the limit yields no improvement it is advised to analyze the integrand in order to determine the difficulties. If the position of a local difficulty can be determined (singularity, discontinuity) one will probably gain from splitting up the interval and calling the integrator on the subranges. Perhaps a special-purpose integrator should be used. tf_re, _ = quad(fct_re_tmp, -10, 10)
Vous pouvez voir que le calcul prend un petit peu de temps, alors que nous travaillons avec un exemple très simple! Nous verrons plus tard comment procéder de manière plus efficace.
TFI_hat_y
array([[ 9.58969671e-16, 0.00000000e+00], [ 1.02561947e-14, 0.00000000e+00], [ 5.68966408e-14, 0.00000000e+00], [ 4.59096184e-15, 0.00000000e+00], [-3.02747288e-12, 0.00000000e+00], [-3.01443708e-11, 0.00000000e+00], [-1.57060427e-10, 0.00000000e+00], [-3.24892601e-10, 0.00000000e+00], [ 1.88823029e-09, 0.00000000e+00], [ 2.12789043e-08, 0.00000000e+00], [ 1.02419084e-07, 0.00000000e+00], [ 2.58377059e-07, 0.00000000e+00], [-4.56174677e-08, 0.00000000e+00], [-3.46461774e-06, 0.00000000e+00], [-1.62004805e-05, 0.00000000e+00], [-4.07362882e-05, 0.00000000e+00], [-4.25603489e-05, 0.00000000e+00], [ 1.06573843e-04, 0.00000000e+00], [ 6.16272740e-04, 0.00000000e+00], [ 1.50180129e-03, 0.00000000e+00], [ 2.00697672e-03, 0.00000000e+00], [ 3.15123979e-04, 0.00000000e+00], [-5.32166845e-03, 0.00000000e+00], [-1.38120586e-02, 0.00000000e+00], [-1.91901983e-02, 0.00000000e+00], [-1.31117659e-02, 0.00000000e+00], [ 7.68812473e-03, 0.00000000e+00], [ 3.49837478e-02, 0.00000000e+00], [ 5.15114620e-02, 0.00000000e+00], [ 4.28279972e-02, 0.00000000e+00], [ 9.33044116e-03, 0.00000000e+00], [-3.21271030e-02, 0.00000000e+00], [-5.86734077e-02, 0.00000000e+00], [-5.57636584e-02, 0.00000000e+00], [-2.54259178e-02, 0.00000000e+00], [ 1.58579133e-02, 0.00000000e+00], [ 4.69200244e-02, 0.00000000e+00], [ 5.30801484e-02, 0.00000000e+00], [ 3.29701015e-02, 0.00000000e+00], [-1.79822610e-03, 0.00000000e+00], [-3.32661636e-02, 0.00000000e+00], [-4.63417492e-02, 0.00000000e+00], [-3.59468554e-02, 0.00000000e+00], [-8.78439439e-03, 0.00000000e+00], [ 2.07509393e-02, 0.00000000e+00], [ 3.81178604e-02, 0.00000000e+00], [ 3.57161134e-02, 0.00000000e+00], [ 1.60993496e-02, 0.00000000e+00], [-9.97899713e-03, 0.00000000e+00], [-2.93738321e-02, 0.00000000e+00], [-3.31137223e-02, 0.00000000e+00], [-2.04750007e-02, 0.00000000e+00], [ 1.24374080e-03, 0.00000000e+00], [ 2.08358437e-02, 0.00000000e+00], [ 2.89146748e-02, 0.00000000e+00], [ 2.23546721e-02, 0.00000000e+00], [ 5.37401456e-03, 0.00000000e+00], [-1.30327880e-02, 0.00000000e+00], [-2.38071382e-02, 0.00000000e+00], [-2.22397143e-02, 0.00000000e+00], [-9.95787808e-03, 0.00000000e+00], [ 6.31022902e-03, 0.00000000e+00], [ 1.83676001e-02, 0.00000000e+00], [ 2.06407833e-02, 0.00000000e+00], [ 1.27087458e-02, 0.00000000e+00], [-8.53110754e-04, 0.00000000e+00], [-1.30498047e-02, 0.00000000e+00], [-1.80407550e-02, 0.00000000e+00], [-1.39015665e-02, 0.00000000e+00], [-3.28633348e-03, 0.00000000e+00], [ 8.18482757e-03, 0.00000000e+00], [ 1.48688791e-02, 0.00000000e+00], [ 1.38479688e-02, 0.00000000e+00], [ 6.15867858e-03, 0.00000000e+00], [-3.98947681e-03, 0.00000000e+00], [-1.14850960e-02, 0.00000000e+00], [-1.28658144e-02, 0.00000000e+00], [-7.88794974e-03, 0.00000000e+00], [ 5.80350213e-04, 0.00000000e+00], [ 8.17302303e-03, 0.00000000e+00], [ 1.12560027e-02, 0.00000000e+00], [ 8.64466864e-03, 0.00000000e+00], [ 2.00883448e-03, 0.00000000e+00], [-5.13990057e-03, 0.00000000e+00], [-9.28627746e-03, 0.00000000e+00], [-8.62253145e-03, 0.00000000e+00], [-3.80863970e-03, 0.00000000e+00], [ 2.52174808e-03, 0.00000000e+00], [ 7.18136998e-03, 0.00000000e+00], [ 8.01938964e-03, 0.00000000e+00], [ 4.89562424e-03, 0.00000000e+00], [-3.92065064e-04, 0.00000000e+00], [-5.11855454e-03, 0.00000000e+00], [-7.02274275e-03, 0.00000000e+00], [-5.37553956e-03, 0.00000000e+00], [-1.22740808e-03, 0.00000000e+00], [ 3.22755197e-03, 0.00000000e+00], [ 5.79959258e-03, 0.00000000e+00], [ 5.36877626e-03, 0.00000000e+00], [ 2.35512083e-03, 0.00000000e+00], [-1.59369284e-03, 0.00000000e+00], [-4.49024952e-03, 0.00000000e+00], [-4.99848354e-03, 0.00000000e+00], [-3.03832582e-03, 0.00000000e+00], [ 2.63303036e-04, 0.00000000e+00], [ 3.20551612e-03, 0.00000000e+00], [ 4.38149603e-03, 0.00000000e+00], [ 3.34260308e-03, 0.00000000e+00], [ 7.49614877e-04, 0.00000000e+00], [-2.02658800e-03, 0.00000000e+00], [-3.62197744e-03, 0.00000000e+00], [-3.34277852e-03, 0.00000000e+00], [-1.45618573e-03, 0.00000000e+00], [ 1.00699394e-03, 0.00000000e+00], [ 2.80752865e-03, 0.00000000e+00], [ 3.11550265e-03, 0.00000000e+00], [ 1.88557043e-03, 0.00000000e+00], [-1.75928947e-04, 0.00000000e+00], [-2.00740372e-03, 0.00000000e+00], [-2.73357618e-03, 0.00000000e+00], [-2.07843537e-03, 0.00000000e+00], [-4.57597234e-04, 0.00000000e+00], [ 1.27242366e-03, 0.00000000e+00], [ 2.26196791e-03, 0.00000000e+00], [ 2.08128546e-03, 0.00000000e+00], [ 9.00284800e-04, 0.00000000e+00], [-6.36166018e-04, 0.00000000e+00], [-1.75536936e-03, 0.00000000e+00], [-1.94182854e-03, 0.00000000e+00], [-1.17012738e-03, 0.00000000e+00], [ 1.17027589e-04, 0.00000000e+00], [ 1.25706497e-03, 0.00000000e+00], [ 1.70542662e-03, 0.00000000e+00], [ 1.29234105e-03, 0.00000000e+00], [ 2.79200103e-04, 0.00000000e+00], [-7.98863159e-04, 0.00000000e+00], [-1.41260130e-03, 0.00000000e+00], [-1.29582818e-03, 0.00000000e+00], [-5.56547088e-04, 0.00000000e+00], [ 4.01825447e-04, 0.00000000e+00], [ 1.09749732e-03, 0.00000000e+00], [ 1.21028186e-03, 0.00000000e+00], [ 7.26114826e-04, 0.00000000e+00], [-7.75429118e-05, 0.00000000e+00], [-7.87167355e-04, 0.00000000e+00], [-1.06396661e-03, 0.00000000e+00], [-8.03538309e-04, 0.00000000e+00], [-1.70264908e-04, 0.00000000e+00], [ 5.01519437e-04, 0.00000000e+00], [ 8.82155697e-04, 0.00000000e+00], [ 8.06779546e-04, 0.00000000e+00], [ 3.44018677e-04, 0.00000000e+00], [-2.53763800e-04, 0.00000000e+00], [-6.86165866e-04, 0.00000000e+00], [-7.54318990e-04, 0.00000000e+00], [-4.50566670e-04, 0.00000000e+00], [ 5.12026592e-05, 0.00000000e+00], [ 4.92904609e-04, 0.00000000e+00], [ 6.63767624e-04, 0.00000000e+00], [ 4.99602717e-04, 0.00000000e+00], [ 1.03777175e-04, 0.00000000e+00], [-3.14831508e-04, 0.00000000e+00], [-5.50888093e-04, 0.00000000e+00], [-5.02289384e-04, 0.00000000e+00], [-2.12627519e-04, 0.00000000e+00], [ 1.60231906e-04, 0.00000000e+00], [ 4.28988330e-04, 0.00000000e+00], [ 4.70128332e-04, 0.00000000e+00], [ 2.79572354e-04, 0.00000000e+00], [-3.37055715e-05, 0.00000000e+00], [-3.08635050e-04, 0.00000000e+00], [-4.14092382e-04, 0.00000000e+00], [-3.10621623e-04, 0.00000000e+00], [-6.32171127e-05, 0.00000000e+00], [ 1.97625951e-04, 0.00000000e+00], [ 3.44012358e-04, 0.00000000e+00], [ 3.12712146e-04, 0.00000000e+00], [ 1.31405482e-04, 0.00000000e+00], [-1.01157291e-04, 0.00000000e+00], [-2.68196198e-04, 0.00000000e+00], [-2.93002052e-04, 0.00000000e+00], [-1.73464494e-04, 0.00000000e+00], [ 2.21262036e-05, 0.00000000e+00], [ 1.93247674e-04, 0.00000000e+00], [ 2.58328027e-04, 0.00000000e+00], [ 1.93119973e-04, 0.00000000e+00], [ 3.84867963e-05, 0.00000000e+00], [-1.24046761e-04, 0.00000000e+00], [-2.14821250e-04, 0.00000000e+00], [-1.94682582e-04, 0.00000000e+00], [-8.12013477e-05, 0.00000000e+00], [ 6.38522089e-05, 0.00000000e+00], [ 1.67668150e-04, 0.00000000e+00], [ 1.82607134e-04, 0.00000000e+00], [ 1.07623711e-04, 0.00000000e+00], [-1.44885597e-05, 0.00000000e+00], [-1.20995741e-04, 0.00000000e+00], [-1.61153196e-04, 0.00000000e+00], [-1.20063565e-04, 0.00000000e+00], [-2.34164228e-05, 0.00000000e+00]])
On peut voir ici que toutes les valeurs de $y$ que nous calculons sont réelles. C'est ce à quoi on peut s'attendre car $y$ est à valeurs réelles.
TFI_hat_y[:,1]
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
On voit ici que les parties imaginaires sont si petite que python décide de les mettre à 0. Voici maintenant la forme de la solution que nous calculons par transformée de Fourier.
plt.plot(t,TFI_hat_y[:,0])
plt.show()
Pour résoudre des equations différentielles python propose des outils via scipy.integrate
. On va utiliser un solveur d'equation différentielle pour comparer avec notre calcul de transformée de Fourier.
from scipy.integrate import solve_ivp
# paramètre de l'equation
beta = 2.*pi *b
gamma = 4. * pi**2
def ode_system(t, y):
# comme il s'agit d'un système du second ordre on pose
# y[0] = y, y[1] = y'
# pour se ramener à un système du 1er ordre
return [
y[1], # y' = dy/dt
(f(t) - beta*y[1] - gamma*y[0]) / alpha # y'' = (f(t) - b*y' - c*y) / a
]
# On met une condition initiale nulle à t = -3, pour dire que le système est au repos au temps t=-3.
initial_condition = [0.0, 0.0] # y(-3) = 0, y'(-3) = 0
# On définie l'interval de temps qui nous intéresse.
t_span = (-3, 20)
# On résoud le problème, et on demande de nous donner la solution aux temps du vecteur t
sol = solve_ivp(ode_system, t_span, initial_condition, t_eval=t)
Comparons les deux solutions calculées numériquement.
plt.plot(t, TFI_hat_y[:,0], label="sol integration")
plt.plot(t, sol.y[0], label="sol eq diff")
plt.legend()
<matplotlib.legend.Legend at 0x76ec18a99c00>
Il y a une très bonne adéquation entre les deux solutions numériques.