2. QUESTION
Considérons le modèle :
𝑑𝑢
𝑑𝑥
+ 5𝑥 1 − 𝑢 = 0 , u(0) = 0
Dans un domaine Ω de dimension 1 ou Ω = [0, 10].
On demande de :
1. Discrétiser le domaine Ω avec 4 comme le nombre d’elements.
2. Faites l’assemblage du modèle.
3. Résoudre le modèle avec application des CAL (MATLAB code). Comparer avec la solution exacte de et examiner
la convergence au point x = 0.5.
4. Ecrire une fonction MATLAB qui permet d’avoir les expressions des fonctions de forme
3. INTRODUCTION
Dans ce travail, nous allons considérer un modèle mathématique sous forme d’une équation différentielle ordinaire (EDO) donnée par
𝑑𝑢
𝑑𝑥
+ 5𝑥 1 − 𝑢 = 0 avec la condition initiale u(0) = 0. Ce modèle est défini dans un domaine unidimensionnel Ω = [0, 10].
Nous allons suivre une série d’étapes pour résoudre ce modèle :
Discrétisation du domaine Ω : Nous allons diviser le domaine en un certain nombre d’éléments. Dans ce cas, nous allons utiliser 4
éléments pour la discrétisation.
Assemblage du modèle : Cette étape consiste à assembler l’équation différentielle et la condition initiale dans une forme qui peut être
résolue numériquement.
Résolution du modèle : Nous allons résoudre le modèle à l’aide d’un logiciel de calcul numérique, en l’occurrence MATLAB. Nous
allons également comparer la solution numérique obtenue avec la solution exacte de l’équation et examiner la convergence de la solution
au point x = 0.5.
Enfin, nous allons écrire une fonction MATLAB qui permet d’avoir les expressions des fonctions de forme 1D. Ces fonctions
sont essentielles pour la résolution numérique des équations différentielles.
4. FORMULATION DU PROBLÈME
Considérons le modèle :
𝑑𝑢
𝑑𝑥
+ 5𝑥 1 − 𝑢 = 0 , u(0) = 0
Dans un domaine Ω de dimension 1 ou Ω = [0, 10].
CALCUL DE SA SOLUTION EXACTE
Soit l’équation suivante :
𝑑𝑢
𝑑𝑥
+ 5𝑥 1 − 𝑢 = 0
On a:
𝑑𝑢
𝑑𝑥
+ 5𝑥 1 − 𝑢 = 0 <=>
𝑑𝑢
𝑑𝑥
= −5𝑥 1 − 𝑢
<=>
𝑑𝑢
(1−𝑢)
= −5𝑥 𝑑𝑥
<=> ln 1 − 𝑢 = −
5
2
× 𝑥2 + 𝑐
<=> 𝑢 = 1 − 𝑒(𝑐−2
5
× 𝑥2)
En utilisant la condition initiale u(0) = 0, nous obtenons C = 0. Par conséquent, la solution de l’équation est : 𝑢 = 1 − 𝑒(−2
5
× 𝑥2)
5. 1.Discrétisation du domaine Ω
.
Pour discrétiser le domaine en 4 elements de taille
10−0
4
=2. 5 nous pouvons diviser l’intervalle [0,10]
en 4 sous-intervalles égaux. Cela nous donnera un total de 5 points, y compris les points de frontières.
Chaque élément contient deux nœuds sur lesquelles la fonction u est interpolée.
1 élément 1 2 élément 2 3 élément 3 4 élément 4 5
x 0 x 2.5 x 5 x 7.5 x 10
6. Tableau de connectivités des éléments et tableau des coordonnées des nœud
Tableau des connectivités
Elément Nœud 1 (début) Nœud 2 (fin)
1 1 2
2 2 3
3 3 4
4 4 5
:
Tableau des coordonnées
Nœud Coordonnée (x)
1 0.00
2 2.5
3 5
4 7.5
5 10
8. Etape 1 : discrétisation et interpolation de l’élément
La fonction u recherchée peut être interpolée dans un élément à l’aide d’un polynôme. La
précision de la solution approchée est déterminée par l’ordre du polynôme. Dans le cas d’un
élément à deux nœuds, on peut utiliser un polynôme de premier ordre pour cette interpolation :
𝑢 = 𝑎0 + 𝑎1𝑥
Soit sous forme vectorielle :
𝑢 =< 1 𝑥 > 𝑎0
𝑎1
≡ 𝑢 = 𝑝 𝑎𝑛
Avec 𝒑 vecteur ligne contenant les monômes 𝑥𝑛
𝒂𝒏 Vecteur colonne contenant les facteurs du polynôme.
Pour utiliser les valeurs de u aux nœuds on cherche une interpolation en fonction de 𝑢1et 𝑢2.
L’interpolation polynomiale aux nœuds s’écrit :
𝑢1
𝑢2
=
1 𝑥1
1 𝑥2
𝑎0
𝑎1
≡ 𝑢𝑛 = 𝑃
𝑛 𝑎𝑛
L’inverse de ce système d’équations donne les paramètres 𝑎𝑛.
𝑎𝑛 = 𝑃
𝑛
−1
𝑈𝑛 ≡ 𝑎0
𝑎1
=
1
𝑥2−𝑥1
𝑥2 −𝑥1
−1 1
𝑢1
𝑢2
En remplaçant les 𝑎𝑛 on peut maintenant approcher la fonction 𝑢 par :
𝑢 = 1 𝑥
1
𝑥2−𝑥1
𝑥2 −𝑥1
−1 1
𝑢1
𝑢2
=
𝑥2−𝑥
𝑥2−𝑥1
𝑥−𝑥1
𝑥2−𝑥1
𝑢1
𝑢2
𝑢 = 𝑁 𝑈𝑛
9. Etape 2 : Propriétés des fonctions de forme
o Les fonctions de forme prennent la valeur de 1 aux nœuds correspondants et la valeur de 0
à tous les autres nœuds:
𝑁1 𝑥 =
𝑥2−𝑥
𝑥2−𝑥1
=
1 𝑥 = 𝑥1
0 𝑥 = 𝑥2
; 𝑁2 𝑥 =
𝑥−𝑥1
𝑥2−𝑥1
=
1 𝑥 = 𝑥2
0 𝑥 = 𝑥1
o la somme des fonctions de forme est toujours égale à 1 sur l’ensemble de l’intervalle de
l’élément :
𝑁1 𝑥 + 𝑁2 𝑥 = 1 ∀ 𝑥 ∈ 𝑥2; 𝑥1
10. Etape 3 : Matrices élémentaires
Le calcul des matrices élémentaires passe par la réécriture du problème sous forme intégrale :
𝛺
𝛿𝑢
𝑑𝑢
𝑑𝑥
+ 5𝑥(1 − 𝑢) 𝑑𝛺 = 0
Avec 𝛿𝑢 est une fonction de pondération prise égale à une perturbation de la fonction inconnue 𝑢.
Le domaine 𝛺 comprend l’intervalle 0 à 4, 𝑑𝛺 = 𝑑𝑥 et avec l’interpolation nodale on a :
𝑑𝑢
𝑑𝑥
=
𝑑𝑁
𝑑𝑥
𝑈𝑛 ; 𝛿𝑢 = 𝑁 𝛿𝑈𝑛
Puisque seules les fonctions 𝑁 dépendent de 𝑥 et les perturbations ne touchent que les valeurs de𝑢.
Pour commodité on écrit : 𝛿𝑢 = (𝛿𝑈𝑛)𝑇
𝑁𝑇
L’intégrale de 0 à 4 peut être remplacée par la somme des intégrales de 𝑥𝑖 à 𝑥𝑖+1 :
0
4
𝑖=1,𝑛 𝑥𝑖
𝑥𝑖+1
=
𝑖=1,𝑛 𝑥1
𝑥2
15. 𝐾𝑒1
(4)
=
1
2
−1 1
−1 1
; 𝐾𝑒2
(4)
=
−1625
48
−875
48
−875
48
−625
16
𝐹𝑒(4)
=
−625
12
−1375
24
Les valeurs de Ke1, Ke2, et Fe, n’ont été calculé à la main. Mais à l’aide de matlab, grâce au
script suivant, qui fait varier, les valeurs de x1 et x2 :
18. Avant de résoudre le système il faut appliquer les conditions aux limites de la fonction u. Au nœud 1 de coordonnée x 0, u 0 ; ce qui se
traduit par u 0. Ceci induit la réduction du nombre d’équations total à résoudre. Nous avons utilisé le code suivant :
K(1,:) = []; % suppression de la 1ere
lignede K
K(:,1) = []; % suppression de la 1ere
colonne de K
F(1,:) = []; % suppression de la 1ere
19. Voici, la réponse donnée par le code, Le système global devient alors:
b.Résolution – Calcul de la solution
La solution peut être maintenant calculée par un des algorithmes de résolution de système
linéaires. Notons que dans ce cas la matrice K est tri diagonale, mais avec MATLAB il suffit
d’utiliser la division gauche U = K F. Les résultats sont donnés dans le tableau et la figure
suivants :
Coord. solution solution erreur
x exacte MEF (%)
2.5 0.999 1.1612 16.236
5 1 0.9652 -3.48
7.5 1 1.0087 0.87
10 1 0.9958 -0.42
20. Comparer avec la solution exacte de (4) et examiner la convergence au point x = 0.5 :
Pour comparer la solution exacte et la convergence au point x= 0.5, nous avons utilisé le script
qui nous fournit, les résultats suivant :
L'erreur à x = 0.5 est 0.009514
21. % Paramètres
dx = 0.01; % pas de temps
x = 0:dx:10; % domaine
u = zeros(size(x)); % condition initiale
u(1) = 0; % condition de bord
% Boucle principale
for i = 2:length(x)
u(i) = u(i-1) + dx * 5 * x(i) * (1 - u(i-1));
end
% Solution exacte
u_exacte = 1 - exp(-5/2 * x.^2);
% Comparaison
figure;
plot(x, u, 'r', x, u_exacte, 'b');
legend('Solution numérique', 'Solution exacte');
xlabel('x');
ylabel('u');
% Convergence en x = 0.5
index = find(abs(x-0.5) < dx/2);
erreur = abs(u(index) - u_exacte(index));
fprintf('L''erreur à x = 0.5 est %fn', erreur);
Voici le script qui permet d’avoir le graphe :
22. Question4
Ecrire une fonction MATLAB qui permet d’avoir les expressions des
fonctions de forme 1D.
Le script Matlab :
function N = shape_functions(x, x1, x2)
% Fonctions de forme 1D pour une interpolation
linéaire
% x : coordonnées locales
% x1, x2 : points de grille
N = [(x2 - x) / (x2 - x1), (x - x1) / (x2 - x1)];
end
N = shape_functions(2, 0, 3);
Nous pouvons appeler cette fonction en passant les valeurs appropriées pour x, x1 et x2. Par exemple
Dans cet exemple, x est 2, x1 est 0 et x2 est 3. Les valeurs de retour, N, sont les fonctions de forme calculées. Voici le résultat trouvé après exécution du code :
N =
0.3333 0.6667
23. CONCLUSION
En conclusion, ce travail offre une approche pratique et détaillée pour
résoudre numériquement une équation différentielle ordinaire en
utilisant MATLAB. Il met en évidence l’importance de la discrétisation
du domaine, de l’assemblage du modèle et de l’utilisation des fonctions
de forme 1D. De plus, il souligne l’importance de la vérification de la
précision de la solution numérique obtenue en le comparant à la
solution exacte. En fin de compte, cette étude fournit non seulement une
méthode pour résoudre les EDO, mais aussi une compréhension
approfondie de la précision et de la convergence de la solution
numérique