function Equa_diff_finies (N) ############################################################# # # Resolution de l'equation -u''(x) =sin(pi*x) # u(0)=u(1)=0 # par la methode des differences finies # u(i-1)-2*u(i)+u(i+1)=-h^2*sin[pi*x(i)] # # Argument d'entree: # N= nombre d'intervalles # ############################################################# ############################################################# # Auteur: Ambroise Brou # Fev 2007 ############################################################# 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