Vous êtes sur la page 1sur 102

MASTER D'ENSEIGNEMENT EN SCIENCES PHYSIQUES

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])

Une valeur de info = 1 indique que la solution a convergé


Exercice 2

Convertissez les équations sous la forme F (x) = 0.

Écrivez une fonction qui calcule le côté gauche de ces deux équations.

function F = Zerofonction(x)

F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);


F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;
endfunction

Résolvez le système d'équations en commençant au point [0,0]


fun = @Zerofonction;
x0 = [0,0];
x = fsolve(fun,x0)
fsolve terminé car le vecteur des valeurs de fonction est proche de zéro
tel que mesuré par la valeur de la tolérance de fonction, et
le problème apparaît régulier tel que mesuré par le gradient.
x = 0,3532 0,6061
UNIVERSITÉ SIDI MOHAMED BEN ABDELLAH
ECOLE NORMALE SUPERIEURE
Université de Skikda 20 août 55 
Niveau
MASTER : 2D'ENSEIGNEMENT EN SCIENCES
eme année LMD Sciences PHYSIQUES
et Technologie
  TP : Analyse numérique,
Physique Numérique
2013/2014


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

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') 


Université de Skikda 20 août 55 
Niveau : 2eme année LMD Sciences et Technologie
  TP : Analyse numérique, 2013/2014

Les questions La méthode de bisection :


Considérant l’équation :
f x x3 x2‐3x‐3
1. Dessinez la courbe de f x sur l’intervalle ‐2,2 , puis trouvez des intervalles
convenables pour appliquer la méthode de bissection.
2. Pour chaque intervalle un pour chaque racine , appliquez la fonction Matlab
‘bissection.m’ sur f x , en considérant : tol 0.001.

La solution La méthode de bissection :


 Dessiner la courbe
>> f = inline ('x^3+x^2‐3*x‐3','x'); 
>> fplot (f,[‐2,2]), grid on 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Choisir les intervalles :
Il existe 3 racines, donc on choisit 3 intervalles
I1 ‐2, ‐1.5 Pour la première racine
I2 ‐1.5, ‐0.5 Pour la deuxième racine
I3 1.5, 2 Pour la troisième racine
Chaque intervalle [a,b] est choisie tel que f(a).f(b)<0


Université de Skikda 20 août 55 
Niveau : 2eme année LMD Sciences et Technologie
  TP : Analyse numérique, 2013/2014

 Appliquer la fonction ‘bisection.m’ :


 
>> [X,N] = bissection (f,‐2,‐1.5,0.001)      % Pour l’intervalle [‐2,‐1.5] 
X = 
   ‐1.7314 
N = 
     9 
 
>> f(X)                    % voir si f(‐1.7314)  0 
ans = 
    0.0015 
 
 
>> [X,N] = bissection (f,‐1.5,‐0.5,0.001)    % Pour l’intervalle [‐1.5,‐0.5] 
X = 
   ‐1.0010 
N = 
    10 
 
>> [X,N] = bissection (f,‐1.5,‐0.5,0.00001)  % avec tol le précision change 
X = 
   ‐1.0000 
N = 
    17 
 
>> [X,N] = bissection (f,1.5,2,0.001)       % Pour le 3eme intervalle [1.5,2] 
X = 
    1.7314 
N = 
     9 

Les questions La méthode du point fixe :


Considérons l’équation non linéaire : f (x) = x3 + 4x2 − 10 = 0

Qui admet une racine r dans l’intervalle [1, 2].

Voici trois façons d’écrire f x 0 sous la forme d’un point‐fixe :


 4 10 0 ⟹ 4 10 ⟹

 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.


Université de Skikda 20 août 55 
Niveau : 2eme année LMD Sciences et Technologie
  TP : Analyse numérique, 2013/2014

La solution La méthode du point fixe :


 Appliquer la fonction ‘pointfixe.m’ sur g1 x :
>> g1 = inline('sqrt(10‐x^3)/2','x')    % Créer la fonction g1(x) 
>> [X,E,N] = pointfixe(g1,1.5,0.001,50)  % Appliquer la méthode 
X = 
    1.3654  La racine trouvée
E = 
L’erreur
    5.3184e‐004 
N = 
Le nombre d’itérations effectués
    10 

 Appliquer la fonction ‘pointfixe.m’ sur g2 x :

>> g2=inline('sqrt(10/(x+4))','x')    % Créer la fonction g2(x) 
>> [X,E,N] = pointfixe(g2,1.5,0.001,50)  % Appliquer la méthode 
X = 
    1.3653 
E = 
    3.0773e‐004 
N = 
    4 

 Appliquer la fonction ‘pointfixe.m’ sur g3 x :

>> g3 = inline('x‐x^3‐4*x^2+10','x')    % Créer la fonction g3(x) 
>> [X,E,N] = pointfixe(g3,1.5,0.001,50)  % Appliquer la méthode 
Pas de convergence avec le nombre d'itérations indiqués 
X = 
   NaN 
NaN (Not a Number) est causée par la divergence de la
méthode (dépassement de capacité)
E = 
   NaN 
N = 
   50  Le nombre d’itérations effectuées a atteint nmax

 La meilleure fonction :
La fonction g1 x converge avec N 10 donc avec dix itérations .
La fonction g2 x converge avec N 4 donc avec quatre itérations .
La fonction g3 x diverge avec N 50 nmax présume la non convergence .
Donc, c’est la fonction g2 x qui donne la convergence la plus rapide.


Université de Skikda 20 août 55 
Niveau : 2eme année LMD Sciences et Technologie
  TP : Analyse numérique, 2013/2014

Les questions La méthode de Newton :


1. Considérant l’équation : f(x) = e-x-x
Appliquez la fonction Matlab ‘newton.m’ sur f x , en mettant :
x0 0, tol 10‐3 0.001, nmax 50.
2. Montrez que l’équation f(x) = x3-2 possède une racine et qu’on peut obtenir
celle‐ci en utilisant la méthode de Newton à partir de x0 1.

La solution La méthode de Newton :
 
>> f  = inline('exp(‐x)‐x') 
>> df = inline('‐exp(‐x)‐1') 
>> [X,E,N] = newton(f, df, 0, 50, 0.001) 
X = 
    0.5671 
E = 
  2.2106e‐007 
N = 
     4 
Pour la deuxième fonction 
 
>> f  = inline('x^3‐2') 
>> df = inline('3*x^2') 
>> [X,E,N] = newton(f, df, 1, 50,0.001) 
X = 
    1.2599 
 
E = 
  9.8764e‐006 
 
N = 
     4 


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 


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, … ,  
  ,


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 


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

La méthode directe de Décomposition LU :

Trouvez la solution d’un des systèmes d’équation linéaires précédents en utilisant la


décomposition LU de Crout.

>> A = [2 ‐1 1 ; 3 2 ‐5 ; 1 3 ‐2]; 
>> b = [0 ; 1 ; 4]; 
>> [L,U,X] = decompositionLU(A,b) 
L = 
    2.0000         0         0 
    3.0000    3.5000         0 
    1.0000    3.5000    4.0000 
 
U = 
    1.0000   ‐0.5000    0.5000 
         0    1.0000   ‐1.8571 
         0         0    1.0000 
 
X = 
    0.4643 
    1.6786 
    0.7500 

On peut vérifier si L*U A en mettant :

>> L*U 
 
ans = 
 
     2    ‐1     1 
     3     2    ‐5 
     1     3    ‐2

La méthode directe de Cholesky :

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]; 


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) 
 


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

Les méthodes itératives de Jacobi & Gauss-Seidel :


 
Pour le système suivant, on va utiliser la méthode de Jacobi et Gauss‐Seidel en
considérant que le vecteur initiale est 0,0,0 T :
4x1 – x2 x3 7
4x1 8x2 x3 21
2x1 x2 5x3 15
>> A = [4,‐1,1 ; 4,‐8,1 ; ‐2,1,5] 
A = 
     4    ‐1     1 
     4    ‐8     1  Créer la matrice A
    ‐2     1     5 
 
>> b = [7;‐21;15] 
b = 
     7 
   ‐21  Créer le vecteur b
    15 
 
>> X0 = [0;0;0] 
X0 = 
     0 
     0  Le vecteur initial
     0 
 
>> [X,N] = jacobi(A,b,X0,50,0.0001) 
X = 
    2.0000  Nombre maximal d’itérations epsilon (tolérance)
    4.0000 
    3.0000  Le vecteur solution trouvé par la méthode
 
N = 
    11 
Le nombre d’itérations effectuées
 
>> [X,N] = gseidel(A,b,X0,50,0.0001) 
X = 
    2.0000 
    4.0000 
    3.0000 
 
N = 
     7 
 
Pour voir les itérations on modifie le programme en ajoutant : X' 
Juste âpres :    % L'ancien X0 devient le nouveau X 
X0 = X; 
X' 
Et avant le    end  L’instruction ajoutée ici
 
 
 


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


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. 
 
 

 
 
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') 
 
 
 
 


 
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 
 


 
Physique
Numérique

Vous aimerez peut-être aussi