0% ont trouvé ce document utile (0 vote)
14 vues3 pages

Code MATLAB pour la MEF en 1D

Le document décrit l'implémentation de la Méthode des Éléments Finis (MEF) pour résoudre l'équation de convection-diffusion-réaction, en présentant la formulation variationnelle, le maillage, et les fonctions de base. Il détaille également le calcul des matrices élémentaires et fournit un exemple de code MATLAB pour une application en 1D. Ce code illustre l'assemblage des matrices et la résolution du système global, ainsi que l'affichage de la solution numérique.

Transféré par

Elder Lorian
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
14 vues3 pages

Code MATLAB pour la MEF en 1D

Le document décrit l'implémentation de la Méthode des Éléments Finis (MEF) pour résoudre l'équation de convection-diffusion-réaction, en présentant la formulation variationnelle, le maillage, et les fonctions de base. Il détaille également le calcul des matrices élémentaires et fournit un exemple de code MATLAB pour une application en 1D. Ce code illustre l'assemblage des matrices et la résolution du système global, ainsi que l'affichage de la solution numérique.

Transféré par

Elder Lorian
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Implémentation de la Méthode des

Éléments Finis (MEF) – Détail Théorique


et Code MATLAB
1. Forme variationnelle
Partant de l’équation stationnaire de convection–diffusion–réaction :

-∇·(D ∇u) + v·∇u + σu = f dans Ω

On multiplie par une fonction test v appartenant à un espace de fonctions V et on intègre sur le
domaine Ω :

∫Ω D ∇u · ∇v dx + ∫Ω (v · ∇u) v dx + ∫Ω σ u v dx = ∫Ω f v dx

Cela permet d’obtenir une formulation faible ou variationnelle de l’équation, adaptée à


l’approximation par éléments finis.

2. Maillage
Le domaine Ω est divisé en petits éléments (maillage), typiquement des triangles (2D) ou
tétraèdres (3D). Les nœuds sont les sommets des éléments, et chaque élément est associé à des
fonctions de forme (ou fonctions de base) locales.

3. Fonctions de base
Dans chaque élément, la solution est approchée par une combinaison linéaire des fonctions de
forme :
u_h(x) = Σ u_i φ_i(x)

Les fonctions de base φ_i sont généralement des fonctions polynomiales (linéaires ou
quadratiques) valant 1 en un nœud et 0 aux autres.

4. Matrices élémentaires
Pour chaque élément, on calcule :

- Matrice de diffusion (locale) : K_d(e)[i,j] = ∫_e D ∇φ_i · ∇φ_j dx


- Matrice de convection (locale) : K_c(e)[i,j] = ∫_e (v · ∇φ_j) φ_i dx
- Matrice de réaction (locale) : K_r(e)[i,j] = ∫_e σ φ_j φ_i dx
- Vecteur source (local) : F(e)[i] = ∫_e f φ_i dx

Ces matrices sont ensuite assemblées pour former le système global K·U = F.

5. Exemple de code MATLAB (1D, éléments linéaires)


Voici un exemple simplifié de code MATLAB pour résoudre une équation de convection-
diffusion-réaction en 1D :

% Paramètres
L = 1; % longueur du domaine
N = 10; % nombre d’éléments
h = L/N; % taille d’un élément
x = linspace(0, L, N+1)';

D = 1; % coefficient de diffusion
v = 2; % vitesse de convection
sigma = 1; % coefficient de réaction
f = @(x) sin(pi*x); % source

% Initialisation
K = zeros(N+1);
F = zeros(N+1);

% Assemblage
for e = 1:N
xe = x(e:e+1);
he = xe(2) - xe(1);

% Matrice élémentaire de diffusion


Ke_d = D/he * [1, -1; -1, 1];

% Matrice de convection
Ke_c = v/2 * [-1, 1; -1, 1];

% Matrice de réaction
Ke_r = sigma*he/6 * [2, 1; 1, 2];

% Vecteur source
fe1 = f(xe(1));
fe2 = f(xe(2));
Fe = he/6 * [2*fe1 + fe2; fe1 + 2*fe2];

% Assemblage global
K(e:e+1, e:e+1) = K(e:e+1, e:e+1) + Ke_d + Ke_c + Ke_r;
F(e:e+1) = F(e:e+1) + Fe;
end

% Conditions de Dirichlet : u(0) = u(1) = 0


K(1,:) = 0; K(1,1) = 1; F(1) = 0;
K(end,:) = 0; K(end,end) = 1; F(end) = 0;

% Résolution
U = K\F;

% Affichage
plot(x, U, '-o'); xlabel('x'); ylabel('u(x)'); title('Solution numérique')

Vous aimerez peut-être aussi