Vous êtes sur la page 1sur 23

RAPPORT TP

MEF 1D
P1&P2
Matlab Mthode des
Elments Finis - 2016

Encadr par : M. Anass Rachid

Ralis par : MARTAB Rochdi

NAFAE Soukaina
Sommaire
Introduction : ...................................................................................................................... 2
MEF P1 :............................................................................................................................... 3
Maillage :.......................................................................................................................... 3 Page | 1
Les fonctions de forme Phi1 et Phi2 : .............................................................................. 3
Calcule des Matrices lmentaires : ................................................................................ 4
Calcule des int_phi : ......................................................................................................... 6
Gnration des matrices lmentaires : ......................................................................... 6
Assemblage : .................................................................................................................... 7
Rsolution : ...................................................................................................................... 8
Main : ............................................................................................................................... 9
MEF P2............................................................................................................................... 10
Maillage P2 : .................................................................................................................. 10
Les fonctions de formes : ............................................................................................... 10
Calcule des matrices lmentaires : .............................................................................. 11
Calcule des int_Phi : ....................................................................................................... 13
Gnrations des matrices lmentaires :...................................................................... 14
Gnrations da la matrice du second membre : ........................................................... 14
Assemblage : .................................................................................................................. 15
Rsolution : .................................................................................................................... 16
Linterface graphique ........................................................................................................ 17
Variables dentrs : ........................................................................................................ 18
Conditions des boites de dialogues : ............................................................................. 19
Calcule : .......................................................................................................................... 20
Initialisation : ................................................................................................................. 22
Conclusion ......................................................................................................................... 22
Introduction :
La mthode des lments-finis (MEF) est une mthode dapproximation
numrique de solutions de problmes aux limites statiques ou dynamiques tels que :
diffusion thermique mcanique des milieux continus (solides et fluides) Page | 2
lectromagntisme mais en fait, absolument tous les problmes dquations aux
drives partielles (EDP) aux limites. Il sagit, comme dans toutes les mthodes
numriques, de trouver une approximation discrte. Pour faire bref, dun problme
diffrentiel aux limites linaire, on trouve une formulation variationnel associes
quivalente, dont on calcule une approximation de la solution en projetant sur un
espace de dimension finie, ce qui revient rsoudre au final un systme linaire.
Lappellation lments finis vient de la dcomposition du domaine dtude en
lments : ils sont souvent reprsents par un maillage.

Historiquement, lorigine de la mthode peut se trouver dans les travaux de


Fermat et Bernoulli (1743) avec le calcul des variations, puis il faut attendre le dbut
du XX me sicle avec les progrs en analyse avec la mthode de Galerkin se
basant sur des thormes de projection dans les espaces de Hilbert. En 1943 Robert
Courant introduit le principe variationnel avec des fonctions de base a supports
locaux ouvrant la voie a une division dun domaine considr en lments.
Cependant ce nest quavec le dveloppement des ordinateurs que ces travaux
trouvent leurs applications avec les travaux pionniers de Zienckiewiz et Argyris qui
dfiniront la mthode en 1960.

Ce qui amne le succs de la mthode et sa puissance est lapport du calcul


matriciel, introduit par un ingnieur civil anonyme. La mthode connait alors un
dveloppement fulgurant accompagne par les progrs de linformatique. La mthode
des lments-finis est une mthode puissante base sur une thorie mathmatique
rigoureuse. Aujourdhui, les lments-finis sont un outil majeur, incontournable en
mcanique (fluides et solides, interactions, structures), et applicable dans de
nombreux domaines impliquant des problmes dEDP aux limites comme par
exemple en mathmatiques financires ou llectromagntisme. De nombreux codes
industriels (solveurs) existent et sont gnralement coupls un logiciel de CAO 1
ou Computer Aide Design (CAD) en Anglais. Citons Ansys, Abaqus, Robot, LS-dyna,
Feap, Code-Aster, Cast3M et bien dautres.
MEF P1 :

On considre le problme suivant :


Page | 3
+ + = ()

u(a)=u(b)=0 avec a et b les bords du problme

Maillage :

function [X, T] = MaillageP1(a, b, h)

%----------------------------
%Gnre un maillage de type P1
% X la table des coordonnes
% T la table de connectivit moyennant les indices
%----------------------------
n = floor((b - a)/h) + 1;
X = a + h*(0:n-1)';

[~, I] = sort(X);
T = [ I(1:n-1), I(2:n)];

Dans La MEF, on commence dabord avec le maillage, cette fonction nous gnre
le maillage de P1, elle prend comme entrer le pas et les bords et elle retourne X, la
table des coordonnes, et T la table de connectivit.

Les fonctions de forme Phi1 et Phi2 :

function [y y2] = phi1_P1(x, x1, x2)

%calcule la fonction de forme phi1 telle que:


% phi1(x1)=1 et phi1(x2)=0
% Ti
% |---------------|
% x1 x2
% phi1(x)=a*x+b et ab=[a;b]
ab=[x1 1;x2 1]\[1;0];
y = polyval(ab,x);
y2 = polyval(polyder(ab),x);
end

function [y y2] = phi2_P1(x, x1, x2)

ab=[x1 1;x2 1]\[0;1];


y = polyval(ab,x);
y2 = polyval(polyder(ab),x);
end
Ces deux codes permettent le calcul des deux fonctions de formes phi1 et phi2 en
utilisant une commande prprogramme sur Matlab (polyval) celle-ci retourne les
coefficients d'un polynme entr en argument.

Ces codes retournent galement les drives des fonctions de forme moyennant la Page | 4
commande de Matlab Polyder.

Calcule des Matrices lmentaires :

function [G] = A_P1(x1,x2)


xm=(x1+x2)*0.5;
[y1x1 dy1x1] = phi1_P1(x1, x1, x2);
[y2x1 dy2x1] = phi2_P1(x1, x1, x2);
[y1x2 dy1x2] = phi1_P1(x2, x1, x2);
[y2x2 dy2x2] = phi2_P1(x2, x1, x2);
[y1xm dy1xm] = phi1_P1(xm, x1, x2);
[y2xm dy2xm] = phi2_P1(xm, x1, x2);
A = [dy1x1 dy1xm dy1x2;dy2x1 dy2xm dy2x2];
%B = [y1x1 y1xm y1x2;y2x1 y2xm y2x2];
for i=1:2
for j=1:2
F=[A(i,1)*A(j,1) A(i,2)*A(j,2) A(i,3)*A(j,3)]
y=(x2-x1)/6*(F(1)+4*F(2)+F(3))
G(i,j)=y
end
end
end

function [G] = B_P1(x1,x2)


xm=(x1+x2)*0.5;
[y1x1 dy1x1] = phi1_P1(x1, x1, x2);
[y2x1 dy2x1] = phi2_P1(x1, x1, x2);
[y1x2 dy1x2] = phi1_P1(x2, x1, x2);
[y2x2 dy2x2] = phi2_P1(x2, x1, x2);
[y1xm dy1xm] = phi1_P1(xm, x1, x2);
[y2xm dy2xm] = phi2_P1(xm, x1, x2);
%A = [dy1x1 dy1xm dy1x2;dy2x1 dy2xm dy2x2];
B = [y1x1 y1xm y1x2;y2x1 y2xm y2x2];
for i=1:2
for j=1:2
F=[B(i,1)*B(j,1) B(i,2)*B(j,2) B(i,3)*B(j,3)];
y=(x2-x1)/6*(F(1)+4*F(2)+F(3));
G(i,j)=y;
end
end
end

function [G] = G_P1(x1,x2)


xm=(x1+x2)*0.5;
[y1x1 dy1x1] = phi1_P1(x1, x1, x2);
[y2x1 dy2x1] = phi2_P1(x1, x1, x2);
[y1x2 dy1x2] = phi1_P1(x2, x1, x2);
[y2x2 dy2x2] = phi2_P1(x2, x1, x2);
[y1xm dy1xm] = phi1_P1(xm, x1, x2);
[y2xm dy2xm] = phi2_P1(xm, x1, x2);
A = [dy1x1 dy1xm dy1x2;dy2x1 dy2xm dy2x2];
B = [y1x1 y1xm y1x2;y2x1 y2xm y2x2]; Page | 5
for i=1:2
for j=1:2
F=[A(i,1)*B(j,1) A(i,2)*B(j,2) A(i,3)*B(j,3)];
y=(x2-x1)/6*(F(1)+4*F(2)+F(3));
G(i,j)=y;
end
end
end

Le code en dessus nous permet de calculer les trois matrices lmentaires qui
sont sous la formes suivantes :

1 1 2 1
= _1 = [ ]
2 1 2 2

1 1 1 2
= _1 = [ ]
1 2 2 2

1 1 2 1
_1 = [ ]
1 2 2 2

Ces codes nous permettent de calculer les trois matrices lmentaires, on fait
dabord appel aux fonctions de formes Phi, puis on construit des matrices ou on stock
les lments ncessaires pour le calcul des intgrales par la suite. On utilise la
quadrature de Simpson pour calculer les intgrales.

Quadrature de Simpson :


+
() = () = [() + 4 ( ) + ()]
6 2
Calcule des int_phi :

function y = int_phi2(f,x1,x2)
%calcule l'intgrale sur l'lment Ti de f*phi1
%moyennant la quadrature de Simpson
% Ti Page | 6
% |--------|--------|
% x1 xm x2
%
xm=(x2+x1)*0.5;
%
y=(x2-
x1)/6*(f(x1)*phi2_P1(x1,x1,x2)+4*f(xm)*phi2_P1(xm,x1,x2)+f(x2)*phi2_P1
(x2,x1,x2));
end

function y = int_phi1(f,x1,x2)
%calcule l'intgrale sur l'lment Ti de f*phi1
%moyennant la quadrature de Simpson
% Ti
% |--------|--------|
% x1 xm x2
%
xm=(x2+x1)*0.5;
%
y=(x2-
x1)/6*(f(x1)*phi1_P1(x1,x1,x2)+4*f(xm)*phi1_P1(xm,x1,x2)+f(x2)*phi1_P1
(x2,x1,x2));
end

Ces deux codes nous permettent de calculer les intgrales sur les lments Ti de f*Phi.

Gnration des matrices lmentaires :

function [ elemKi ] = mat_elem_P1(alpha,beta,gama,X,T,i)


%calcule la matrice lmentaire dans l'lment Ti
% Ti
% |---------------|
% x1 x2
%
x1=X(T(i,1));
x2=X(T(i,2));

elemKi=alpha*A_P1(x1,x2)+beta*B_P1(x1,x2)-gama*G_P1(x1,x2);

end

Dans ce code, on fait appel aux matrices dj construites, et on les assemble en


les multipliant par les coefficients correspondants.

1. Le vecteur second membre


function [ elemFi ] = SM_elem_P1(f,X,T,i)
%calcule le second membre lmentaire dans l'lment Ti
% Ti
% |---------------|
% x1 x2
%elle fait appel aux deux fonctions:
% y = int_phi1(f,x1,x2) Page | 7
% y = int_phi2(f,x1,x2)
x1=X(T(i,1));
x2=X(T(i,2));
elemFi=[int_phi1(f,x1,x2);int_phi2(f,x1,x2)];
end

On construit la matrice du second membre en faisant appel au fonctions int_phi. La matrice du


second membre est :

1
= [ ]
2

Assemblage :

function [K,F] = AssemblageP1(alpha,beta,gama,f, X, T)


% Assemblage des matrices lmentaires "elemki" dans la matrice
globale K
% Assemblage des seconds membres lmentaires "elemFi" dans le second
% membre global F
% cette fonction fait appel aux fonctions:
% 1) mat_elem_P1(alha,X,T,i)
% 2) SM_elem_P1(f,X,T,i)
%
n = size(X,1); % nombre des noeuds
t = size(T,1); % nombre des lments

K = zeros(n);
F = zeros(n,1);

% Assemblage de la matrice golbale K


%
for k=1:t % boucle sur les lments
elemKi = mat_elem_P1(alpha,beta,gama,X,T,k); % matrice de
l'lment numro k
for i=1:2 %boucle sur les numros locaux
for j=1:2 %boucle sur les numros locaux
I=k+i-1; % numros globaux dans K
J=k+j-1; % numros globaux dans K
K(I,J)=K(I,J)+ elemKi(i,j);
end
end
end
% Assemblage du second membre lmentaire golbal F
%
for k=1:t % boucle sur les lments
elemFi = SM_elem_P1(f,X,T,k); % SM de l'lment numro k
for i=1:2 %boucle sur les numros locaux
I=k+i-1; % numros globaux dans K
F(I)=F(I)+ elemFi(i); Page | 8
end
end
end

On initialise dabord les deux matrices K et F, puis on construit le nombre des


nuds et des lments. On ralise lassemblage laide des boucle for, et cela pour
construire la matrice global K et celle du second membre F.

Rsolution :

function [U] = EF_P1(alpha,beta,gama,f,a,b,h)


% fonction traite l'equation alpha*u"=f sur un[a,b] avec u(a)=u(b)=0
%
%Creation de la matrice globale K et du second membre globale F
[X, T] = MaillageP1(a, b, h);
Nn=size(X,1); %nombre des noeuds
[K,F] = AssemblageP1(alpha,beta,gama,f, X, T);
%
% Conditions aux bords
for j=1:Nn
K(1,j)=0.;
K(Nn,j)=0.;
end
K(1,1)=1.;
K(Nn,Nn)=1.;
%
F(1)=0;
F(Nn)=0;
%
% Rsolution
U=K\F;
end

Cette fonction \ nous permet de rsoudre le systme K.U=F.


Main :

clear
clc
Page | 9
a=-pi/2;
b=pi/2 ;
h=0.1;
alpha=1;
beta=0;
ue=@(x) cos(x);
f=@(x) cos(x);
[X, T] = MaillageP1(a, b, h);
[U] = EF_P1(alpha,beta,gama,f,a,b,h);
% Post-traitement
%%%%%% comparaison graphique
figure('name', 'Comparaision: solutions exacte et approche '); fplot(ue,
[min(X), max(X)], 'b'); hold on; plot(X,U, 'r.-');
%%%%%% Analyse d'erreur
erreur=zeros(size(X,1),1);
for i=1:size(X,1)
erreur(i)=U(i)-ue(a+(i-1)*h);
end
figure('name', 'analyse erreur'); plot(X,erreur, 'r-o');
ylabel('erreur');
xlabel('noeuds');

Premirement on choisit une fonction qui vrifie les conditions au bord, et On


construit le problme, puis On fait appel la fonction de maillage et celle de la
rsolution. La figure de la solution exacte et approch est trace sur un graphe ainsi
que celle de lanalyse de lerreur.
MEF P2

On considre toujours le mme problme, cette fois on utilise un polynme de


degr deux, ce qui ncessite 3 fonctions de forme chacune de degr deux. Et les Page | 10
matrices seront de forme 3*3.

Maillage P2 :

function [X, X1, T] = MaillageP2(a, b, h)


%----------------------------
%Gnre un maillage de type P1
% X la table des coordonnes
% T la table de connectivit moyennant les indices
%----------------------------
n = floor((b - a)/h) + 1;
X1 = a + h*(0:n-1)';
X = zeros(2*n-1,1);
for j=0:(n-1)
X(2*(n-1)-2*j+1) = X1(n-j);
if j ~= (n-1)
X(2*(n-1)-2*j) = X1(n-j)-0.5*h;
end
end

[~, I] = sort(X);
T = [ I(1:2:(2*n-3)), I(2:2:2*(n-1)), I(3:2:(2*n-1))];
end

Ce maillage nous donne comme sortie la table de connectivite avec lajout dun
point intermdiaire dans chaque lment Ti, et deux tables de cordonnes X1 et X, X
contient tous les nuds tandis que X1 ne contient que les extrmits des Ti.

Les fonctions de formes :

function [y y2] = phi1_P2(x, x1, x2, x3)

%calcule la fonction de forme phi1 telle que:


% phi1(x1)=1 et phi1(x2)=0
% Ti
% |---------------|
% x1 x2
% phi1(x)=a*x+b et ab=[a;b]

ab=[x1^2 x1 1;x2^2 x2 1;x3^2 x3 1]\[1;0;0];


y = polyval(ab,x);
y2 = polyval(polyder(ab),x);
end

function [y y2] = phi2_P2(x, x1, x2, x3)


%calcule la fonction de forme phi1 telle que:
% phi1(x1)=1 et phi1(x2)=0
% Ti
% |---------------|
% x1 x2
% phi1(x)=a*x+b et ab=[a;b]
Page | 11
ab=[x1^2 x1 1;x2^2 x2 1;x3^2 x3 1]\[0;1;0];
y = polyval(ab,x);
y2 = polyval(polyder(ab),x);
end

function [y y2] = phi3_P2(x, x1, x2, x3)

%calcule la fonction de forme phi1 telle que:


% phi1(x1)=1 et phi1(x2)=0
% Ti
% |---------------|
% x1 x2
% phi1(x)=a*x+b et ab=[a;b]

ab=[x1^2 x1 1;x2^2 x2 1;x3^2 x3 1]\[0;0;1];


y = polyval(ab,x);
y2 = polyval(polyder(ab),x);
end

En utilisant les polynmes de degr deux, on se trouve dans lobligation de


travailler avec trois points ce qui veut dire trois fonctions de formes. On obtient donc les
trois quations suivantes :

1 (1) = 1; 1 (2) = 0; 1 (3) = 0


2 (1) = 0; 2 (2) = 1; 2 (3) = 0
3 (1) = 0; 3 (2) = 0; 3 (3) = 1

On utilise les deux commandes de Matlab Polyval et polyder.

Calcule des matrices lmentaires :

function [G] = A_P2(x1,x2,x3)


xm=(x1+x3)*0.5;
[y1x1 dy1x1] = phi1_P2(x1, x1, x2, x3);
[y2x1 dy2x1] = phi2_P2(x1, x1, x2, x3);
[y3x1 dy3x1] = phi3_P2(x1, x1, x2, x3);
[y1x3 dy1x3] = phi1_P2(x3, x1, x2, x3);
[y2x3 dy2x3] = phi2_P2(x3, x1, x2, x3);
[y3x3 dy3x3] = phi3_P2(x3, x1, x2, x3);
[y1xm dy1xm] = phi1_P2(xm, x1, x2, x3);
[y2xm dy2xm] = phi2_P2(xm, x1, x2, x3);
[y3xm dy3xm] = phi3_P2(xm, x1, x2, x3);
A = [dy1x1 dy1xm dy1x3;dy2x1 dy2xm dy2x3;dy3x1 dy3xm dy3x3];
%B = [y1x1 y1xm y1x3;y2x1 y2xm y2x3;y3x1 y3xm y3x3];
for i=1:3
for j=1:3
F=[A(i,1)*A(j,1) A(i,2)*A(j,2) A(i,3)*A(j,3)];
y=(x3-x1)/6*(F(1)+4*F(2)+F(3));
G(i,j)=y;
end
end
end

function [G] = B_P2(x1,x2,x3)


xm=(x1+x3)*0.5; Page | 12
[y1x1 dy1x1] = phi1_P2(x1, x1, x2, x3);
[y2x1 dy2x1] = phi2_P2(x1, x1, x2, x3);
[y3x1 dy3x1] = phi3_P2(x1, x1, x2, x3);
[y1x3 dy1x3] = phi1_P2(x3, x1, x2, x3);
[y2x3 dy2x3] = phi2_P2(x3, x1, x2, x3);
[y3x3 dy3x3] = phi3_P2(x3, x1, x2, x3);
[y1xm dy1xm] = phi1_P2(xm, x1, x2, x3);
[y2xm dy2xm] = phi2_P2(xm, x1, x2, x3);
[y3xm dy3xm] = phi3_P2(xm, x1, x2, x3);
%A = [dy1x1 dy1xm dy1x3;dy2x1 dy2xm dy2x3;dy3x1 dy3xm dy3x3];
B = [y1x1 y1xm y1x3;y2x1 y2xm y2x3;y3x1 y3xm y3x3];
for i=1:3
for j=1:3
F=[B(i,1)*B(j,1) B(i,2)*B(j,2) B(i,3)*B(j,3)];
y=(x3-x1)/6*(F(1)+4*F(2)+F(3));
G(i,j)=y;
end
end
end

function [G] = G_P2(x1,x2,x3)


xm=(x1+x3)*0.5;
[y1x1 dy1x1] = phi1_P2(x1, x1, x2, x3);
[y2x1 dy2x1] = phi2_P2(x1, x1, x2, x3);
[y3x1 dy3x1] = phi3_P2(x1, x1, x2, x3);
[y1x3 dy1x3] = phi1_P2(x3, x1, x2, x3);
[y2x3 dy2x3] = phi2_P2(x3, x1, x2, x3);
[y3x3 dy3x3] = phi3_P2(x3, x1, x2, x3);
[y1xm dy1xm] = phi1_P2(xm, x1, x2, x3);
[y2xm dy2xm] = phi2_P2(xm, x1, x2, x3);
[y3xm dy3xm] = phi3_P2(xm, x1, x2, x3);
A = [dy1x1 dy1xm dy1x3;dy2x1 dy2xm dy2x3;dy3x1 dy3xm dy3x3];
B = [y1x1 y1xm y1x3;y2x1 y2xm y2x3;y3x1 y3xm y3x3];
for i=1:3
for j=1:3
F=[A(i,1)*B(j,1) A(i,2)*B(j,2) A(i,3)*B(j,3)];
y=(x3-x1)/6*(F(1)+4*F(2)+F(3));
G(i,j)=y;
end
end
end

Les nouveaux matrices sont de types 3*3 :


1 1 1 2 1 3

= _2 = 1 2 2 2 3 2

1 3 2 3 3 3
[ ]
Page | 13
1 1 1 2 1 3

= _2 = 1 2 2 2 3 2

1 3 2 3 3 3
[ ]
1 1 1 2 1 3

_2 = 1 2 2 2 3 2

1 3 2 3 3 3
[ ]

Calcule des int_Phi :

function y = int_phi1_P2(f,x1,x2,x3)
%calcule l'intgrale sur l'lment Ti de f*phi1
%moyennant la quadrature de Simpson
% Ti
% |--------|--------|
% x1 xm x2
%
xm=(x3+x1)*0.5;
%
y=(x3-
x1)/6*(f(x1)*phi1_P2(x1,x1,x2,x3)+4*f(xm)*phi1_P2(xm,x1,x2,x3)+f(x3)*p
hi1_P2(x3,x1,x2,x3))
end

function y = int_phi3_P2(f,x1,x2,x3)
%calcule l'intgrale sur l'lment Ti de f*phi1
%moyennant la quadrature de Simpson
% Ti
% |--------|--------|
% x1 xm x2
%
xm=(x3+x1)*0.5;
%
y=(x3-
x1)/6*(f(x1)*phi3_P2(x1,x1,x2,x3)+4*f(xm)*phi3_P2(xm,x1,x2,x3)+f(x3)*p
hi3_P2(x3,x1,x2,x3));
end

function y = int_phi2_P2(f,x1,x2,x3)
%calcule l'intgrale sur l'lment Ti de f*phi1
%moyennant la quadrature de Simpson
% Ti
% |--------|--------|
% x1 xm x2
%
xm=(x3+x1)*0.5;
%
y=(x3- Page | 14
x1)/6*(f(x1)*phi2_P2(x1,x1,x2,x3)+4*f(xm)*phi2_P2(xm,x1,x2,x3)+f(x3)*p
hi2_P2(x3,x1,x2,x3));
end

On calcule les int_Phi. On procde de la mme faon quauparavant

Gnrations des matrices lmentaires :

function [ elemKi ] = mat_elem_P2(alpha,beta,gama,X,T,i)


%calcule la matrice lmentaire dans l'lment Ti
% Ti
% |---------------|
% x1 x2
%
x1=X(T(i,1));
x3=X(T(i,3));
x2=(x1+x3)/2;
elemKi=alpha*A_P2(x1,x2,x3)+beta*B_P2(x1,x2,x3)-gama*G_P2(x1,x2,x3);
end

De la mme manire quen P1.

Gnrations da la matrice du second membre :

function [ elemFi ] = SM_elem_P2(f,X,T,i)


%calcule le second membre lmentaire dans l'lment Ti
% Ti
% |---------------|
% x1 x2
%elle fait appel aux deux fonctions:
% y = int_phi1(f,x1,x2)
% y = int_phi2(f,x1,x2)
x1=X(T(i,1));
x2=X(T(i,2));
x3=X(T(i,3));
elemFi=[int_phi1_P2(f,x1,x2,x3);int_phi2_P2(f,x1,x2,x3);int_phi3_P2(f,
x1,x2,x3)];
%
end

La matrice du second membre de P2 est :


1

= 2

3
[ ]
Page | 15

Assemblage :

function [K,F] = AssemblageP2(alpha,beta,gama,f, X, T)


% Assemblage des matrices lmentaires "elemki" dans la matrice globale K
% Assemblage des seconds membres lmentaires "elemFi" dans le second
% membre global F
% cette fonction fait appel aux fonctions:
% 1) mat_elem_P1(alha,X,T,i)
% 2) SM_elem_P1(f,X,T,i)
%
n = size(X,1); % nombre des noeuds
t = size(T,1); % nombre des lments

K = zeros(n);
F = zeros(n,1);

% Assemblage de la matrice golbale K


c=0;
for k=1:2:(2*t-1) % boucle sur les lments
c=c+1;
elemKi = mat_elem_P2(alpha,beta,gama,X,T,c); % matrice de
l'lment numro k
for i=1:3 %boucle sur les numros locaux
for j=1:3 %boucle sur les numros locaux
I=k+i-1; % numros globaux dans K
J=k+j-1; % numros globaux dans K
K(I,J)=K(I,J)+ elemKi(i,j); % l'assemblage
end
end
end

% Assemblage du second membre lmentaire golbal F


c=0;
for k=1:2:(2*t-1)
c=c+1; % boucle sur les lments
elemFi = SM_elem_P2(f,X,T,c); % SM de l'lment numro k
for i=1:3 %boucle sur les numros locaux
I=k+i-1; % numros globaux dans K
F(I)=F(I)+ elemFi(i); % l'assemblage
end
end
end
Cette fonction permet de faire lassemblage des matrices lmentaires elemFi
ainsi que lassemblage des elemAi de la mme manire quen P1, le changement
simpose au niveau du nombre de nuds n et les incrmentations dans chaque boucle.

Page | 16

Rsolution :

function [U] = EF_P2(alpha,beta,gama,f,a,b,h)


% fonction traite l'equation alpha*u"=f sur un[a,b] avec u(a)=u(b)=0
%
%Creation de la matrice globale K et du second membre globale F
[X, X1, T] = MaillageP2(a, b, h);
Nn=size(X,1); %nombre des noeuds
[K,F] = AssemblageP2(alpha,beta,gama,f, X, T);
%
% Conditions aux bords
for j=1:Nn
K(1,j)=0.;
K(Nn,j)=0.;
end
K(1,1)=1.;
K(Nn,Nn)=1.;
%
F(1)=0;
F(Nn)=0;
%
% Rsolution
U=K\F;
end

De la mme manire on procde pour rsoudre lquation et trouver U.


Linterface graphique

Pour crer une interface sur Matlab on tape Guide sur la commande window, une
interface .fig saffiche ou on peut ajouter des boutons, des graphs, des choix etc. Pour Page | 17
chaque lment ajout on doit modifier son tag pour faciliter la manipulation du code et
viter lambigut lutiliser aprs. Une fois on enregistre le .fig un code est gnrer.

Un fichier PDF souvre pour une aide simplifie propos de linterface :


Page | 18

Variables dentrs :

On fait appel aux tag ajoutes travers la fonction suivante pour recevoir les
lments entres par lutilisateur de linterface :

tag = str2double(get(handles. tag, String));


alpha = str2double(get(handles.alpha,'String'));
h = str2double(get(handles.h,'String'));
a = str2num(get(handles.a,'String'));
b = str2num(get(handles.b,'String'));
Conditions des boites de dialogues :

On a essay de contrler les donnes entres par lutilisateur par des conditions pour ne
pas avoir des donnes errones, par exemple sur lintervalle [a, b], a doit tre plus petit que b
(a<b) : Page | 19

if(b<=a)
pos_size = get(handles.figure1,'Position');

% Call modaldlg with the argument 'Position'.


user_response = modaldlg4('Title','Confirm Close');
switch user_response
case {'OK'}
% take no action
End
Else

Le script est pour appeler la boite de dialogue suivante aprs quon appuis sur le
bouton Valider :

On ne peut effectuer aucun calcule ou maillage avant de Valider les donnes


dentrs par le bouton Valider (ce qui laisse le programme de vrifier tous les donnes
dentrer sils sont valident avant de faire aucun calcule)

Pour les boites dialogues (modaldlg1 8), On a cr dautres interfaces, quand


fait appel eux selon certaines conditions, pour guider lutilisateur.
Calcule :

Linterface nous permet de faire seulement un calcule dapproximation sans avoir


une solution exacte pour calculer lerreur si on veut ( On doit seulement dcocher la
petite case cot de Solution U Page | 20

Pour quun bouton effectue la fonction dsire, On fait appel aux codes dj
raliss sur Matlab.

Pour les boutons suivants :

Le programme garde en mmoire les valeurs dapproximation P1 et P2 dont la


Matrice S :
kj=floor(2*((b-a)/h)+1);
S(1:(kj+1)/2,1)=U1;

[U2] = EF_P2(alpha,beta,gama,f,a,b,h);
S(:,2)=U2;

Pour avoir une comparaison derreur entre lapproximation P1 & lapproximation


P2.
Exemple :

Page | 21

En appuient sur Comp Graph P1&P2 une comparaison graphique des deux
graphes saffiche, mais ce nest pas vident de voir les erreurs entre les 2
approximation.

Aprs quon appuie sur Erreur P1&P2 , il est plus claire la diffrence derreurs
entre les 2 approximations (avec un tableau affichant les valeurs des erreurs P1 sur la
1ere ligne et les valeurs des erreurs de P2 sur la 2eme ligne :
Initialisation :

Pour initialiser les donne et remettre le tous comme on a ouvri linterface pour la
1ere fois, un bouton de Reset est programm faire a :
Page | 22
clear; %Vider la memoir des variables
clc; %Vider la fentre des commande si elle est active
cla; %Vider les axes daffichage des graphes
set(findobj(0,'style','edit'),'string',' '); %Vider les valeur dentr
set(findobj(0,'style','text','tag','equation'),'string',' ');
%vider le panel daffichage de equation entre
set(findobj(0,'tag','val'),'data',0); % Vider le tableau des valeurs
set(findobj(0,'tag','erg'),'data',0); % Vider le tableau des erreurs

Le reste du code de linterface est dans les documents joints sous format
(.m)

Conclusion

Ce premier projet sur Matlab nous a normment aids comprendre la notion et


lordonnancement des tapes de rsolution en lments finis en 1D pour P1et P2.

On a pu galement grce ce projet de travailler avec linterfaces graphiques


fournie par Matlab, et savoir comment le convertir en. Exe.

Vous aimerez peut-être aussi