Auteur·rice

HAMLIL Mohamed

Date de publication

31 décembre 2025

TP1 – Analyse de Fourier

Ce notebook présente les exercices du TP1 en R. Les extraits de code sont basés sur le document fourni et comprennent des commentaires pour expliquer chaque étape.

1. Les complexes

Dans cette section, nous manipulons des nombres complexes en R. Pour créer l’unité imaginaire, on utilise 1i.

Code
# Définition de deux nombres complexes
z1 <- 1 + 3*1i  # 1 + 3i
z2 <- 3*1i + 4   # 4 + 3i

# Opérations algébriques de base
z1 + z2       # addition de z1 et z2
[1] 5+6i
Code
z1 + 3*z2     # addition de z1 avec trois fois z2
[1] 13+12i
Code
z1 * z2       # produit des deux complexes
[1] -5+15i
Code
z1^2          # puissance : z1 au carré
[1] -8+6i
Code
z1 / z2       # division de z1 par z2
[1] 0.52+0.36i
Code
# Fonctions intégrées pour récupérer la partie réelle, imaginaire, l’argument et le module
a <- Re(z1)       # partie réelle de z1
b <- Im(z1)       # partie imaginaire de z1
theta <- Arg(z1)  # argument (angle) de z1
r <- Mod(z1)       # module (longueur) de z1

# Créer un complexe à partir de ses parties réelle et imaginaire
complex(real = a, imaginary = b)
[1] 1+3i
Code
# Vérifier la forme trigonométrique
r * (cos(theta) + sin(theta) * 1i)
[1] 1+3i
Code
# Vérifier la forme exponentielle
r * exp(theta * 1i)
[1] 1+3i

2.1 Intégrer une fonction

Nous calculons l’intégrale de arctan(x) sur l’intervalle \([0, 1]\) à l’aide de la fonction integrate.

Code
# Définir la fonction à intégrer
f <- function(x) { atan(x) }

# Calculer l’intégrale sur [0,1]
integrate(f, lower = 0, upper = 1)
0.4388246 with absolute error < 4.9e-15
Code
# Pour extraire uniquement la valeur numérique (sans l’erreur)
integrate(f, lower = 0, upper = 1)$value
[1] 0.4388246
Code
# Si la fonction est complexe, on sépare la partie réelle et imaginaire
ref <- function(x) { Re(f(x)) }
imf <- function(x) { Im(f(x)) }
# Combiner les deux pour obtenir une valeur complexe
integrate(ref, 0, 1)$value + 1i * integrate(imf, 0, 1)$value
[1] 0.4388246+0i

2.2 La fonction

On définit une fonction périodique de période 2 sur l’intervalle \([-1, 1]\).

Code
# Définition d’une fonction 2‑périodique définie sur [−1,1]
f <- function(x) { 2 * as.numeric(x > 0) - 1 }  # renvoie 1 si x>0, −1 sinon

# Traçage de la fonction sur une fenêtre plus large
plot(f, xlim = c(-1, 1), ylim = c(-2, 2))

Code
# Note : il ne devrait pas y avoir de barre verticale au milieu du tracé car f(0) = −1

2.3 Coefficients de la série de Fourier

Cette fonction coeff calcule le coefficient de la série de Fourier pour une fonction f et un entier n.

Code
# Fonction pour calculer le n‑ième coefficient de Fourier
coeff <- function(f, n) {
  e <- function(x, n) { exp(pi * 1i * n * x) }            # fonction exponentielle complexe
  g <- function(x) { f(x) * Conj(e(x, n)) }               # produit de f et du conjugué de e
  reg <- function(x) { Re(g(x)) }                         # partie réelle
  img <- function(x) { Im(g(x)) }                         # partie imaginaire
  0.5 * integrate(reg, -1, 1)$value + 0.5i * integrate(img, -1, 1)$value  # coefficient
}

# Exemple : tester pour quelques valeurs de n
coeff(f, 0)  # coefficient c0
[1] 0+0i
Code
coeff(f, 1)  # coefficient c1
[1] 0-0.6366198i
Code
coeff(f, -1) # coefficient c−1
[1] 0+0.6366198i

2.4 Convergence de la série de Fourier

On définit la fonction SN qui calcule la somme partielle de la série de Fourier pour l’ordre N. Nous traçons les sommes partielles pour différentes valeurs de N.

Code
# Fonction SN pour calculer la somme partielle de la série de Fourier
SN <- function(f, N, x) {
  S <- coeff(f, 0)  # terme constant
  for (n in 1:N) {
    # Ajout des termes positifs et négatifs
    S <- S + coeff(f, n) * exp(pi * 1i * n * x) + coeff(f, -n) * exp(-pi * 1i * n * x)
  }
  S
}

# Discrétisation de l’intervalle pour le tracé
discr <- seq(-1, 1, 0.01)

# Tracer les sommes partielles pour différentes valeurs de N
plot(discr, SN(f, 1, discr), type = "l", col = "black", ylab = "S_N(x)", xlab = "x")
lines(discr, SN(f, 5, discr), col = "green")
lines(discr, SN(f, 9, discr), col = "blue")
lines(discr, SN(f, 20, discr), col = "red")
legend("topright", legend = c("N=1", "N=5", "N=9", "N=20"), col = c("black", "green", "blue", "red"), lty = 1)

3. Travail à rendre (adaptation)

Pour adapter ces fonctions à une fonction de période définie sur l’intervalle , il suffit de remplacer les limites d’intégration et les facteurs de normalisation par et .

Par exemple, pour calculer les coefficients de Fourier d’une fonction sur :

g <- function(x) { alpha * x + 1 }
# Adapter coeff() en changeant l’intervalle d’intégration de −π à π
# et en tenant compte de la nouvelle période 2π

Vous choisirez une valeur de (entre 1 et 2) et pourrez utiliser title() pour annoter le graphique. Cette partie est laissée comme exercice.