//Probleme Dirichlet 2D
// correction TP 2
//
// taille du domaine [0,L]x[0,H]
L=2;
H=3;
// nombre de points de discretisation et pas de maillage
N=50;
M=60;
l=L/(N+1);
h=H/(M+1);
// vecteur discretisation selon x
x=[l:l:L-l];
// vecteur discretisation selon y
y=[h:h:H-h];
//
//construction de la matrice A par ses diagonales (cf TD)
//
D0=(2/l^2+2/h^2)*sparse(ones(N*M,1));// diagonale principale
D1=-1/l^2*sparse(ones(N*M-1,1));// surdiagonale
D1(N:N:N*M-1,1)=0//correction de la surdiagonale
DN=-1/h^2*sparse(ones(N*M-N,1));
A=diag(D0,0)+diag(D1,1)+diag(D1,-1)+diag(DN,N)+diag(DN,-N);// A est pentadiagonale
//
//construction d'un second membre a l'aide de la fonction f(x,y)=sin(x)*cos(y) (exemple)
//
xx=x'*ones(1,M);// repetition de x sur un tableau de taille (N,M) ie xx(i,j)=x(i)
yy=ones(N,1)*y;// ici yy(i,j)=y(j)
ff=sin(xx).*cos(yy);// ff a la taille de xx et yy et f(i,j)=sin(x(i))*cos(y(j))
f=matrix(ff,N*M,1);// equivalent de reshape en matlab, 
                 //permet de construire f comme un vecteur colonne 
                 //avec la numerotation usuelle
//
//resolution du systeme lineaire creux
//
u=A\f;
uu=matrix(u,N,M)// permet de reconstruire uu comme un tableau a 2 indices, 
                //uu(i,j)=u(k), avec k la numerotation de TD
// representation graphique de la solution
uubord=zeros(N+2,M+2);
uubord(2:N+1,2:M+1)=uu;
surf(uubord)
