function [ u2 ]= ondes (N ,M , tau )
%
% Schema de Newmark pour l ’ equation des ondes
% parametres
% N: nombre de points interieurs dans l ’ intervalle [0 ,1]
% h: pas d ’ espace
% M: nombre de pas de temps
% tau: pas de temps
% t: temps courant
% u0: N - vecteur , u0 ( i ) est une approximation de u ( x_i , t_n -1)
% u1: N - vecteur , u1 ( i ) est une approximation de u ( x_i , t_n )
% u2: N - vecteur , u2 ( i ) est une approximation de u ( x_i , t_n +1)
%
h =1./( N +1);
lambda = tau ^2/ h ^2;
%
% condition initiale u0 et u1
%
for i =1: N
u0 ( i )= sin ( pi * i * h );
v0 ( i )= - pi * sin ( pi * i * h );
end
u1 (1)=(1 - lambda )* u0 (1)+ lambda /2* u0 (2)+???* v0 (1);
for i =2: N -1
u1 ( i )=(1 - lambda )* u0 ( i )+ lambda /2*( u0 (i -1)+ u0 ( i +1))+???* v0 ( i );
end
u1 ( N )=(1 - lambda )* u0 ( N )+ lambda /2* u0 (N -1)+???* v0 ( N );
%
% schema de Newmark
%
t = tau ;
for n =2: M
t = t + tau ;
u2 (1)=(2*(1 - lambda )* u1 (1)+ lambda * u1 (2) -???* u0 (1))/???;
for i =2: N -1
u2 ( i )=(2*(1 - lambda )* u1 ( i )+ lambda *( u1 (i -1)+ u1 ( i +1)) -???* u0 ( i ))/???;
end
u2 ( N )=(2*(1 - lambda )* u1 ( N )+ lambda * u1 (N -1) -???* u0 ( N ))/???;
%
% reactualiser la solution
%
for i =1: N
u0 ( i )= u1 ( i );
u1 ( i )= u2 ( i );
end
end
%
% imprimer l ’ erreur maximum au temps final
%
err = 0;
for i =1: N
erri = abs ( u2 ( i ) -???);
if ( erri > err )
err = erri ;
end
end
fprintf ( 'erreur maximum au temps final% e \n ' , err )
