clear all
close all

%% Un exemple pour tacer l erreur en fonction de h

% Resolution de - Delta u = f sur l intervalle [0,1]^2
a = 0 ;
b = 1 ;
c = 0 ; 
d = 1 ; 

% nombre de simulation
NbTest = 6; 
% Nx pour le premier pas de temps 
Nx0 = 2 ;


% Pour le test, on prend u(x,y) = sin(pi x) * sin(pi *y) ;
% - Delta u = 2 * pi^2 * u ; 
% donc f = 2 * pi^2 * sin(pi x) * sin(pi *y) ;

% definition de f
fonctionf = @(x,y) 2 * (pi)^2 * sin(pi*x) .* sin(pi*y) ;


tableau_h = zeros(1,NbTest) ;
tableau_erreur = zeros(1,NbTest) ;
for q = 1 : NbTest ; 
    
    % entre chaque test, on multiplie le pas d espace par 2
    Nx = 2^(q-1) * Nx0 ;
    % pour simplifier on prend Nx = Ny
    Ny = Nx ;
    % Calcul de la solution approchee
    [U,X, Y] = Poisson2D(a,b,c,d,Nx,Ny,fonctionf);
    % Calcul de la solution exacte
    SolExacte =zeros(Nx, Ny) ; 
    for i =1 :Nx 
        for j = 1 :Ny 
        SolExacte(i,j) = sin(pi * X(i,j)) * sin(pi * Y(i,j)) ; 
        end
    end
    
    hx = X(2,1) - X(1,1) ;
    hy = hx ; 
    tableau_h(q) = hx ;
    % Calcul de la norme L2 de l erreur (relative)
    % Matrice contenant l erreur en chaque point
    Erreur = U - SolExacte;
    % Norme L2 de l'erreur  (norme euclidienne) 
    Norme_L2_Erreur = sqrt ( hx * hy * sum(sum(Erreur.^2))) ;
    % Norme L2 de la solution exacte 
    Norme_L2_SolExacte =  sqrt ( hx * hy * sum(sum(SolExacte.^2))) ;
    % Erreur relative
    tableau_erreur(q) = Norme_L2_Erreur/ Norme_L2_SolExacte
    
end
% Calcul de la pente moyenne 
[a,b] =  MoindreCarre(log(tableau_h), log(tableau_erreur));
loglog((tableau_h), (tableau_erreur), '+-') 

title(['erreur relative en fonction de h :  pente moyenne =' , num2str(a)]) ;








% resolution du probleme de poisson 

% Calcul de la solution exacte  sur la grille definie par les matrices X et
% Y 







