---
title: "TP1 – Analyse de Fourier"
author: "HAMLIL Mohamed"
date: "2025-12-31"
format:
pdf:
documentclass: article
geometry: margin=1in
editor: visual
engine: knitr
---
# 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`.
```{r}
# 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
z1 + 3*z2 # addition de z1 avec trois fois z2
z1 * z2 # produit des deux complexes
z1^2 # puissance : z1 au carré
z1 / z2 # division de z1 par z2
# 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)
# Vérifier la forme trigonométrique
r * (cos(theta) + sin(theta) * 1i)
# Vérifier la forme exponentielle
r * exp(theta * 1i)
```
## 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`.
```{r}
# Définir la fonction à intégrer
f <- function(x) { atan(x) }
# Calculer l’intégrale sur [0,1]
integrate(f, lower = 0, upper = 1)
# Pour extraire uniquement la valeur numérique (sans l’erreur)
integrate(f, lower = 0, upper = 1)$value
# 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
```
## 2.2 La fonction
On définit une fonction périodique de période 2 sur l'intervalle $[-1, 1]$.
```{r}
# 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))
# 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`.
```{r}
# 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
coeff(f, 1) # coefficient c1
coeff(f, -1) # coefficient c−1
```
## 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`.
```{r}
# 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 :
``` r
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.