Filtration sur disque rotatif | Decapage par projection d'abrasifs
Electronique numerique | Mecanique des fluides | Resistance des materiaux | Calculs numeriques
Tutoriaux ANSYS | Tutoriaux CATIA

Calculs numériques

 

2.2. Exemple

2.2.1. Description du problème

On veut résoudre numériquement sur l'intervalle l'équation différentielle suivante :

 

(1)

 

avec les conditions aux limites .

 

La solution analytique de cette équation est :

 

(2)

 

2.2.2. Résolution par un schéma numérique aux différences finies

L'approximation de la dérivée à l'aide d'une différence centrée à l'ordre 2 conduit à l'équation discrétisée :

 

(3)

 

Avec les conditions aux limites u0=un+1=0

L'espace de résolution est divisé en n+1 intervalles avec un pas de discrétisation uniforme avec

 

En faisant varier i de 1 à n on obtient le système matriciel :

 

 

 

Les composantes de la matrice M et du vecteur B sont :

pour  :

 

 ; et

 

Un traitement particulier est effectué pour i=1 et i=n :

 

 ;

 ;

 

2.2.3. Programmes

Les différentes étapes conduisant à la résolution de l'équation (1) font l'objet du script en langage OCTAVE (semblable à MATLAB) contenu dans le fichier Equa_diff_finies.m. Le script est implémenté sous forme de procédure fonction recevant comme argument d'entrée le nombre N d'intervalles.

 

Equa_diff_finies.m

function Equa_diff_finies (N)

x=[0:1/N:1]';     # vecteur contenant les coordonnees des differents noeuds

h=1/N;      # pas de discretisation

M=zeros(N-1);   # initialisation de la matrice M

B=zeros(N-1,1);   # initialisation du vecteur second membre

# Calcul des elements de la matrice M et du vecteur B

for (i=2:N-2)

M(i,i-1)=1;

M(i,i)=-2;

M(i,i+1)=1;

B(i,:)=-h^2*sin(pi*x(i+1));

endfor;

# Calcul des autres termes de la matrice M et du vecteur B

M(1,1)=-2;

M(1,2)=1;

M(N-1,N-1)=-2;

M(N-1,N-2)=1;

B(1,:)=-h^2*sin(pi*x(2));

B(N-1,:)=-h^2*sin(pi*x(N));

####################################################

U=M\B;     # resolution du systeme

U=[0;U;0];     # ajout des conditions aux limites

#Affichage graphique

hold off;

plot(x,U,"-4*;Differences finies;");

hold on;

grid on;     # quadrillage

x=x';

u=U(:,1)';

y=sin(pi*x)/pi^2;     # solution exacte

plot(x,y,"-3+;Solution exacte;");

xlabel('x');

ylabel('u(x)');

e=abs(u-y);     # valeur absolue de l'erreur

printf(" x Sol exacte Diff finies erreur\n");

for i=1: length(x)

printf("%10.6f %10.6f %10.6f %10.2e\n",x(i),y(i),u(i),e(i));

endfor;

endfunction

 

 

 

En appelant le script avec une valeur de N=11, on obtient la figure ci-après :

 

Malgré un pas de discrétisation h≈0.09, on constate que la solution discrétisée reste très fidèle à la solution analytique.

 

 

 

3/3

 

Qui je suis | Plan du site | Me contacter