% Dimensions du domaine
Lx = 1.0;
Ly = 1.0;
% Nombre de divisions dans chaque direction
nx = 10;
ny = 10;
% Espacement des noeuds
hx = Lx / (nx-1);
hy = Ly / (ny-1);
% Coordonnées des noeuds
x = linspace(0, Lx, nx);
y = linspace(0, Ly, ny);
% Nombre total de noeuds
N = nx * ny;
% Matrice de raideur et vecteur de charge
A = sparse(N, N);
b = zeros(N, 1);
% Fonction source
f = @(x, y) 10 * sin(pi * x) .* sin(pi * y);
% Assemblage des matrices
for i = 2:nx-1
for j = 2:ny-1
% Index global du noeud (i,j)
k = j + (i-1) * ny;
% Coordonnées du noeud
xi = x(i);
yj = y(j);
% Remplissage de la matrice A (utilisation de la méthode des différences finies)
A(k, k) = -2 * (1/hx^2 + 1/hy^2);
A(k, k-1) = 1/hy^2;
A(k, k+1) = 1/hy^2;
A(k, k-ny) = 1/hx^2;
A(k, k+ny) = 1/hx^2;
% Remplissage du vecteur b
b(k) = f(xi, yj);
end
end
% Conditions aux limites (Dirichlet)
for i = 1:nx
for j = 1:ny
k = j + (i-1) * ny;
if i == 1 || i == nx || j == 1 || j == ny
A(k, :) = 0;
A(k, k) = 1;
b(k) = 0;
end
end
end
% Résolution du système linéaire
u = A\b;
% Reshape du vecteur solution en une matrice pour l'affichage
U = reshape(u, ny, nx);
% Affichage de la solution
[X, Y] = meshgrid(x, y);
figure;
surf(X, Y, U);
xlabel('x');
ylabel('y');
zlabel('u');
title('Solution de l''équation de Poisson par la méthode des éléments finis');