////////////////////
/// Equation des ondes 1D, CL Dirichlet, schéma différences finies
/////////////////////
//
N=evstr(x_dialog('nombre de points intérieurs','100'));
alpha=evstr(x_dialog('CFL (<1)','0.5'));
Tf=evstr(x_dialog('Temps final','5'));
//
deff('y=U0(x)','y=x*(1-x)');// condition initial  sur u dirichlet
deff('y=U1(x)','y=x*(3-x)')// condition initiale sur u'
//
dx=1/(N+1);
dt=alpha*dx;
//
M=int(Tf/dt);//nombre d'itérations
//
A1=toeplitz([-2,1,zeros(1,N-2)]);
//
A=2*eye(N,N)+(dt^2)/(dx^2)*A1;
u0=zeros(N,1);
u1=zeros(N,1);
//
for i=1:N
   u0(i)=U0(i*dx);  
   u1(i)=U1(i*dx);
  
end
//
//besoin  des 2 premier temps de u pour demarrer le schema (n=0 et n=1)
//
U00=[0;u0;0];//u au temps n=0
plot2d(0:dx:1,U00,rect=[0,-0.5,1,0.5]);
//
u11=u0+dt*u1;// approche u au temps n=1
//
Uint2=zeros(N,1);
for nt=1:M
    //
    Uint2=u11;//sauvegarde du temps u au temps n
    u11=A*u11-u0; // mise a jour de u 
    u0=Uint2; 
    //
    Uapprox=[0;u11;0]; 
    drawlater
    clf();
    plot2d(0:dx:1,Uapprox,rect=[0,-0.5,1,0.5]);
    drawnow  
end
//
