Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Cours et TP
Physique Numérique
Pr.Mostafa El MALLAHI
UNIVERSITÉ SIDI MOHAMED BEN ABDELLAH
ECOLE NORMALE SUPERIEURE
MASTER D'ENSEIGNEMENT EN SCIENCES PHYSIQUES
Physique Numérique
Résolution des équations non linéaires
Partie 1
Exercice 1
Resoudre les deux equalités suivantes
5x^2 + 3xyz + 4 sin(y)cos(x) = 1
-2x^2 + 3xy + 4 sin(y) = 6
7x^2+y - 2x+y^2+z + 3 cos(x)tg(z) = 3
3x^2 - 2xy^2 + 3 cos(x) = -4
5x+tg(y)-cos(z)=9
Convertissez les équations sous la forme F (x) = 0.
vous devez d'abord écrire une fonction pour calculer la valeur de la fonction donnée. Par exemple:
function y = f (x)
y = zeros (2, 1);
y(1) = -2*x(1)^2 + 3*x(1)*x(2) + 4*sin(x(2)) - 6;
y(2) = 3*x(1)^2 - 2*x(1)*x(2)^2 + 3*cos(x(1)) + 4;
endfunction
Ensuite, appelez fsolve avec une condition initiale spécifiée pour trouver les racines du système d'équations
Résolvez le système d'équations en commençant au point [1,2]
[x, fval, info] = fsolve (@f, [1; 2])
Écrivez une fonction qui calcule le côté gauche de ces deux équations.
function F = Zerofonction(x)
TP 01 : Résolution des équations non linéaires
1) La méthode de Bissection (dichotomie)
Les entrées Les sorties
f la fonction concernée x La racine trouvée par la méthode
a et b les limites de l’intervalle [a, b] niter Le nombre d’itérations effectuées
tol L’erreur tolérée par le résultat
1) Si f(a).f(b)>0 alors l’intervalle [a, b] ne contient pas de racines et on s’arrête
2) Si la valeur de |b ‐ a| est inférieure à tol on s’arrête
3) On calcule le milieu de l’intervalle [a, b] par : x = (a+b)/2
4) Si f(a).f(x)>0 alors a x (l’intervalle [a, b] devient [x, b])
Sinon b x (l’intervalle [a, b] devient [a, x])
5) Aller à l’étape 2.
function [x,niter] = bissection(f,a,b,tol)
niter = 0;
bissection.m
if f(a)*f(b)>0
error('Intervalle inadapté'); bisection.m
end
while abs(b‐a) > tol
x = (a+b)/2;
if f(a)*f(x) > 0
a = x;
else
b = x;
end
niter = niter +1;
end
2) La méthode du point fixe
2
Les entrées Les sorties
g la fonction étudiée zero La racine trouvée par la méthode.
x0 le point initial erreur L’erreur estimée.
nmax le nombre maximal d’itérations niter Le nombre d’itérations effectuées.
tol Le critère d’arrêt (erreur tolérée)
1. On commence par choisir le point initial x0 (n=0)
2. On calcule xn+1 = g(xn)
3. Si |xn+1 ‐ xn| < tol alors la méthode a convergé, et on s’arrête
4. Si niter atteint nmax alors la méthode a divergé, ou elle n’a pas pu
converger avec nmax itérations et on s’arrête.
5. Sinon, on passe à l’étape 2 pour une nouvelle itération n+1 (n devient n+1).
2
1
Université de Skikda 20 août 55
Niveau : 2eme année LMD Sciences et Technologie
TP : Analyse numérique, 2013/2014
function [zero,erreur,niter] = pointfixe(g,x0,tol,nmax) pointfixe.m
zero = x0;
for niter = 1 : nmax
x = zero;
zero = g(x);
erreur = abs(zero‐x);
if erreur < tol
return
end
end
disp('Pas de convergence avec le nombre d''itérations indiqués')
3) La méthode de Newton
Les entrées Les sorties
f la fonction concernée zero La racine trouvée par la méthode.
df la fonction dérivée de f erreur L’erreur estimée.
x0 le point initial niter Le nombre d’itérations effectuées.
nmax le nombre maximal d’itérations
tol Le critère d’arrêt (erreur tolérée)
1) On commence par x0 (n = 0)
2) On calcule : ‐
′
| |
3) Si < tol alors la méthode a convergé, et on s’arrête.
| |
4) Si niter atteint nmax alors la méthode a divergé ou elle n’a pas pu converger
avec nmax itérations et on s’arrête.
5) Sinon, on passe à l’étape 2 avec une nouvelle itération n+1 (n devient n+1).
function [zero, erreur, niter] = newton(f, df, x0, nmax, tol)
newton.m
zero = x0;
for niter = 1 : nmax
x = zero;
zero = x ‐ f(x)/df(x);
erreur = abs(zero‐x)/abs(zero);
if erreur < tol
return
end
end
disp('Pas de convergence avec le nombre d''itérations indiqués')
2
Université de Skikda 20 août 55
Niveau : 2eme année LMD Sciences et Technologie
TP : Analyse numérique, 2013/2014
3
Université de Skikda 20 août 55
Niveau : 2eme année LMD Sciences et Technologie
TP : Analyse numérique, 2013/2014
4 10 0 ⟹ 4 10 ⟹
4 10 0 ⟹ ⟹ 4 10
1. Appliquez la fonction Matlab ‘pointfixe.m’ sur g1 x , g2 x , et g3 x , en mettant :
x0 1.5, tol 0.001, nmax 50.
2. Quelle est la fonction g1, g2 ou g3 qui donne la convergence la plus rapide.
4
Université de Skikda 20 août 55
Niveau : 2eme année LMD Sciences et Technologie
TP : Analyse numérique, 2013/2014
5
Université de Skikda 20 août 55
Niveau : 2eme année LMD Sciences et Technologie
TP : Analyse numérique, 2013/2014
6
UNIVERSITÉ SIDI MOHAMED BEN ABDELLAH
ECOLE NORMALE SUPERIEURE
Université de Skikda 20 août 55
MASTER
Niveau D'ENSEIGNEMENT
: 2eme année EN SCIENCES PHYSIQUES
LMD Sciences et Technologie, TP : Analyse numérique, 2013/2014
Physique Numérique
TP 02 : Résolution des systèmes d’équations linéaires
1) La méthode directe de Gauss (sans pivotation)
Les entrées Les sorties
A la matrice des coefficients
x Le vecteur solution
b le vecteur du second membre
function x = gauss(A,b)
gauss.m
n = length(b);
% ------------------ Triangularisation -------------------
for k = 1:n‐1 1, … , 1
for i = k+1:n 1, … ,
m = A(i,k)/A(k,k); ⁄
A(i,k+1:n) = A(i,k+1:n) ‐ m*A(k,k+1:n); .
1, … ,
b(i) = b(i) ‐ m*b(k);
end .
end
% ---------------------- Solution ------------------------
x(n) = b(n)/A(n,n); 1
for i = n‐1:‐1:1
somme = sum(A(i,i+1:n).*x(i+1:n));
x(i) = (b(i)‐somme)/A(i,i); 1
, 1, … ,1
end
x = x';
2) La méthode directe de décomposition LU (Crout)
Les entrées Les sorties
A la matrice des coefficients L La matrice triangulaire inferieure L
b le vecteur du second membre U La matrice triangulaire supérieure U
x Le vecteur solution
function [L,U,x] = decompositionLU(A,b) decompositionLU.m
n = length(b); L = zeros(n,n); U = zeros(n,n); x = zeros(n,1);
% --------- Factorisation LU ------------------------------------
for i = 1:n , U(i,i) = 1; end
1, 1,2, … ,
for k = 1:n
for i = k:n
, ,…,
L(i,k) = A(i,k)‐L(i,1:k‐1)*U(1:k‐1,k);
1, … ,
end
for j = k+1:n 1
U(k,j) = (A(k,j)‐L(k,1:k‐1)*U(1:k‐1,j))/L(k,k); , 1, … ,
end
end
% ---------- Résoudre Ly = b ------------------------------------
y = zeros(1,n);
for i = 1:n 1
somme = sum(L(i,1:i‐1).*y(1:i‐1)); , 1,2, … ,
y(i) = (b(i)‐somme)/L(i,i);
end
% ---------- Résoudre Ux = y ------------------------------------
for i = n:‐1:1
somme = U(i,i+1:n)*x(i+1:n);
, , … ,1
x(i) = y(i)‐somme;
end
1
UNIVERSITÉ SIDI MOHAMED BEN ABDELLAH
ECOLE NORMALE SUPERIEURE
Université de Skikda 20 août 55
MASTER
Niveau D'ENSEIGNEMENT
: 2eme année EN SCIENCES PHYSIQUES
LMD Sciences et Technologie, TP : Analyse numérique, 2013/2014
Physique Numérique
3) La méthode directe de Cholesky (matrice symétrique définie positive)
Les entrées Les sorties
A la matrice des coefficients L La matrice triangulaire inferieure L avec LL’ A
b le vecteur du second membre x Le vecteur solution
function [L,x] = cholesky(A,b) cholesky.m
cholesky.m
n = length(b); L = zeros(n,n); x = zeros(n,1);
% ----------------------- Factorisation LL' ----------
for i = 1:n
L(i,i) = sqrt(A(i,i)‐sum(L(i,1:i‐1).^2));
1, … ,
for j = i+1:n
L(j,i) = (A(i,j)‐sum(L(i,1:i‐1).*L(j,1:i‐1)))/L(i,i);
1
end , 1, … ,
end
% ------------------------- Résoudre Ly = b ----------
y = zeros(1,n);
for i = 1:n 1
+
somme = sum(L(i,1:i‐1).*y(1:i‐1)); , 1,2, … ,
y(i) = (b(i)‐somme)/L(i,i);
end
% ------------------------- Résoudre L'x = y ---------
for i = n:‐1:1
somme = sum(L(i+1:n,i).*x(i+1:n)); 1
x(i) = (y(i)‐somme)/L(i,i); , , … ,1
end
4) Méthodes itératives de Jacobi & Gauss‐Seidel
Les entrées Les sorties
A la matrice A X Le vecteur solution.
b le vecteur b niter Le nombre d’itérations effectuées.
X0 le vecteur initial
tol le nombre maximal d’itérations
nmax
L’erreur tolérée par le résultat
function [X,niter] = jacobi(A,b,X0,nmax,tol) function [X,niter] = gseidel(A,b,X0,nmax,tol)
n = length(b); X = X0; n = length(b); X = X0;
for niter = 1:nmax for niter = 1:nmax
% Calculer l'itération suivante % Calculer l'itération suivante
for i = 1:n for i = 1:n
j = [1:i‐1,i+1:n]; somme1 = A(i,1:i‐1)*X(1:i‐1);
somme = A(i,j)*X0(j); somme2 = A(i,i+1:n)*X0(i+1:n);
X(i) = (b(i)‐somme)/A(i,i); X(i)=(b(i)‐somme1‐somme2)/A(i,i);
end end
% Tester la convergence % Tester la convergence
if norm(X‐X0) < tol if norm(X‐X0) < tol
return return
end end
% L'ancien X0 devient le nouveau X % L'ancien X0 devient le nouveau X
X0 = X; X0 = X;
end end
% En cas de divergence % En cas de divergence
disp('Pas de convergence') disp('Pas de convergence')
1 1
, 1, … , , 1, … ,
,
2
UNIVERSITÉ SIDI MOHAMED BEN ABDELLAH
ECOLE NORMALE SUPERIEURE
Université de Skikda 20 août 55
MASTER Niveau
D'ENSEIGNEMENT
: 2eme année LMD EN SCIENCES PHYSIQUES
Sciences et Technologie
Physique Numérique
TP : Analyse numérique
TP N°2 : Analyse numérique
En Matlab un système linéaire Ax b peut être résolu en écrivant :
>> A\b
La méthode directe de Gauss :
En utilisant la méthode de Gauss, trouvez les solutions des systèmes suivantes :
2 0 4 7
3 2 5 1 4 8 21
3 2 4 2 5 15
3 3 2 3 4 2
2 2 5 7 5 4 1
3 2 6 12 2 8 5
>> A = [2 ‐1 1 ; 3 2 ‐5 ; 1 3 ‐2];
>> b = [0 ; 1 ; 4];
>> X = gauss(A,b)
X =
0.4643
1.6786
0.7500
>> A = [4 ‐1 1 ; 4 ‐8 1 ; ‐2 1 5];
>> b = [7 ; ‐21 ; 15];
>> X = gauss(A,b)
X =
2
4
3
>> A = [1 3 3 ; 2 2 5 ; 3 2 6];
>> b = [‐2 ; 7 ; 12];
>> X = gauss(A,b)
X =
4
‐3
1
>> A = [‐1 3 ‐4 ; 1 ‐5 4 ; 2 1 8];
>> b = [2;‐1;5];
>> X = gauss(A,b)
X =
NaN
NaN
Inf
Le quatrième système ne peut pas être résolu car son déterminant est null La
matrice A est singulière
>> det(A)
ans =
0
1
UNIVERSITÉ SIDI MOHAMED BEN ABDELLAH
ECOLE NORMALE SUPERIEURE
MASTER D'ENSEIGNEMENT EN SCIENCES PHYSIQUES
Université de Skikda 20 août 55
Physique Numérique Niveau : 2eme année LMD Sciences et Technologie
TP : Analyse numérique
Cette méthode est utilisable uniquement sur les systèmes ayant la matrice A symétrique
et définie positif.
Pour obtenir une telle matrice on peut écrire en Matlab la commande :
A = gallery('moler',n)
Ou bien
A = gallery('lehmer',n)
Où n représente le nombre de ligne/colonne de la matrice.
Exemple 1:
>> A = gallery('moler',4)
A =
1 ‐1 ‐1 ‐1
‐1 2 0 0
‐1 0 3 1
‐1 0 1 4
>> b = [5 ; ‐1 ; 4 ; 3];
2
UNIVERSITÉ SIDI MOHAMED BEN ABDELLAH
ECOLE NORMALE SUPERIEURE
MASTER D'ENSEIGNEMENT EN SCIENCES PHYSIQUES
Université de Skikda 20 août 55
Physique Numérique Niveau : 2eme année LMD Sciences et Technologie
TP : Analyse numérique
>> [L,X] = cholesky(A,b)
L =
1 0 0 0
‐1 1 0 0
‐1 ‐1 1 0
‐1 ‐1 ‐1 1
X =
135
67
38
25
On peut vérifier si la réponse est correcte en mettant :
>> A\b
ans =
135
67
38
25
On peut vérifier si : L*L’ = A en écrivant :
>> L*L'
ans =
1 ‐1 ‐1 ‐1
‐1 2 0 0
‐1 0 3 1
‐1 0 1 4
>> L*L'‐A
ans =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
Exemple2 :
>> A = gallery('lehmer',5) ;
>> b = rand(5,1) ; % des valeurs aléatoires
>> [L,X] = cholesky(A,b)
3
UNIVERSITÉ SIDI MOHAMED BEN ABDELLAH
ECOLE NORMALE SUPERIEURE
MASTER D'ENSEIGNEMENT EN SCIENCES PHYSIQUES
Université de Skikda 20 août 55
Physique Numérique Niveau : 2eme année LMD Sciences et Technologie
TP : Analyse numérique
4
UNIVERSITÉ SIDI MOHAMED BEN ABDELLAH
ECOLE NORMALE SUPERIEURE
MASTER D'ENSEIGNEMENT EN SCIENCES PHYSIQUES
Université de Skikda 20 août 55
Physique Numérique Niveau : 2eme année LMD Sciences et Technologie
TP : Analyse numérique
Puis on ecrit les commandes suivantes :
>> format compact
>> [X,N] = jacobi(A,b,X0,50,0.0001)
ans =
1.7500 2.6250 3.0000
ans =
1.6563 3.8750 3.1750
ans =
1.9250 3.8500 2.8875
ans =
1.9906 3.9484 3.0000
ans =
1.9871 3.9953 3.0066
ans =
1.9972 3.9944 2.9958
ans =
1.9996 3.9981 3.0000
ans =
1.9995 3.9998 3.0002
ans =
1.9999 3.9998 2.9998
ans =
2.0000 3.9999 3.0000
X =
2.0000
4.0000
3.0000
N =
11
>> [X,N] = gseidel(A,b,X0,50,0.0001)
ans =
1.7500 3.5000 3.0000
ans =
1.8750 3.9375 2.9625
ans =
1.9937 3.9922 2.9991
ans =
1.9983 3.9990 2.9995
ans =
1.9999 3.9999 3.0000
ans =
2.0000 4.0000 3.0000
X =
2.0000
4.0000
3.0000
N =
7
5
Interpolation polynomiale de Lagrange
L’interpolation consiste à trouver l’expression générale d’une fonction à partir d’un nombre
limité de points.
Quand la fonction recherchée est un polynôme l’interpolation est dite polynomial.
Dans notre TP on va arborer l’implémentation de la méthode d’interpolation polynomiale de
Lagrange.
Principe :
Soit f une fonction donnée définie sur . Interpoler la fonction f par un polynôme P de degré
n sachant les n+1 points : ( x0, f(x0) ), ( x1, f(x1) ), . . . , ( xn, f(xn) ) consiste à résoudre le
problème suivant :
Trouver un polynôme P de degré ≤ n tel que : yi=P(xi) = f(xi), 0 ≤ i ≤ n.
Ce polynôme est donnée par :
Pj est un polynôme qui passe par le point (xj, f(xj)) et qui s’annule dans tous les autres points,
et on peut le calculer par :
Construction du polynôme d'interpolation de Lagrange
Supposons que le polynôme d'interpolation est donné par :
⋯
Afin que ce dernier passe par l'ensemble des points à interpoler, il faut que les coefficients
a0…an respectent le système d’équation linéaire suivant :
Donc pour trouver la formule du polynôme P il suffit de résoudre ce système d’équation.
1
function P = lagrange(X,Y)
N = length(X)‐1;
A = ones(N+1,N+1);
for i=1:N+1
for j=1:N
A(i,j) = X(i)^(N+1‐j);
end
end
P = A\Y';
>> x = [‐3,‐2,‐1,0,1,2, 3];
>> y = [‐1, 1, 3,7,2,0,‐2];
>> P = lagrange(x,y)
P =
‐0.1028
‐0.0083
1.4722
0.1250
‐5.8694
‐0.6167
7.0000
>> a = ‐3.2:0.2:3.2;
>> b = polyval(P, a);
>> plot(a,b,x,y,'o')
On aurait pu faire le même travail en utilisant la fonction Matlab polyfit comme suit :
>> x = [‐3,‐2,‐1,0,1,2, 3];
>> y = [‐1, 1, 3,7,2,0,‐2];
>> P = polyfit(x,y,6)
P =
‐0.1028 ‐0.0083 1.4722 0.1250 ‐5.8694 ‐0.6167 7.0000
>> a = ‐3.2:0.2:3.2;
>> b = polyval(P, a);
>> plot(a,b,x,y,'o')
2
Pour programmer une fonction Matlab qui permet l’évaluation du polynôme mais sans
donner son expression (les coefficients) on peut utiliser le code suivant :
function y = lagrangeEval(x,PX,PY)
N = length(PX);
y = 0;
for j=1:N
prod = 1;
for k = [1:j‐1,j+1:N]
prod = prod*(x‐PX(k))/(PX(j)‐PX(k));
end
y = y + PY(j)*prod;
end
>> x = [‐3,‐2,‐1,0,1,2, 3];
>> y = [‐1, 1, 3,7,2,0,‐2];
>> lagrangeEval(5,x,y)
ans =
‐839.0000
Pour vérifier si le résultat est correct, on utilise la fonction Matlab polyval comme suit :
>> P = polyfit(x,y,6);
>> polyval(P,5)
ans =
‐839.0000
3
Physique
Numérique