1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| function run()
%% Exécution de la résolution
% les paramètres
a=0; b=1; Nx=10;
Tf=1; Nt=10;
v = 1-pi^2;
% le second membre
rhs = inline('0','x','t');
% la solution analytique
solEx = inline('exp(-t)*sin(pi*x)','x','t');
% la solution initiale
u0 = inline('sin(pi*x)');
% résolution
eqChaleur1D(v,rhs,u0,a,b,Nx,Tf,Nt,'implicite');
disp(' ')
disp('Pressez une touche pour continuer')
disp(' ')
pause
eqChaleur1D(v,rhs,u0,a,b,Nx,Tf,Nt,'explicite');
function eqChaleur1D(v,RHSfunc,INITfunc,a,b,Nx,Tf,Nt,methode, EXfunc)
%% Approximation numérique de l'équation de la chaleur
%% sur le segment [a,b]. Utilise un maillage comptant (Nx+1) éléments en espace
%% et (Nt+1) éléments en temps
%%
%% Entrée :
%% v : le coefficient de réaction
%% RHSfunc : le second membre (une fonction)
%% INITfunc : la donnée initiale (une fonction)
%% a,b : les bornes du domaine spatial
%% Nx : le nombre d'intervalles de discrétisation spatiale
%% Tf : le temps final
%% Nt : le nombre d'intervalles de temps
%% methode : le type de schéma de résolution (implicite/explicite)
%% EXfunc : la solution exacte (une fonction) si connue (argument optionnel)
% discrétisations
...
% construction des diagolnales de la matrice A
...
if methode == 'implicite'
% Assemblage de la matrice A
...
% condition de Dirichlet sur les bords
...
end;
if methode == 'explicite'
% Assemblage de la matrice A
...
% condition de Dirichlet sur les bords
...
end;
% donnée initiale
...
disp('Résolution de l''équation de la chaleur')
disp(['en utilisant un schéma ' methode])
disp('Pressez une touche pour continuer')
disp(' ')
pause
figure;
for k=1:Nt
% évaluation de la fonction f
...
% conditions de bord
...
if methode == 'implicite'
% construction du second membre
...
% résolution
...
end;
if methode == 'explicite'
% résolution
...
end;
if nargin == 9
plot(X,u,'r')
title(['Solution de l''équation de la chaleur avec schéma ' methode])
drawnow
end;
% if nargin == 10
% uEx = feval(EXfunc,X,(k*ht));
% subplot(2,1,1); plot(X,u,':r',X,uEx,'-.b')
% h = legend('Numérique','Exacte',2);
% set(h,'Interpreter','none')
% title(['Solutions de l''équation de la chaleur avec schéma ' methode])
% subplot(2,1,2); plot(X,uEx'-u,'r')
% title('Erreur')
% drawnow
% e=norm(uEx'-u,inf);
% fprintf('Erreur à l''instant %f : %e \n',k*ht,e)
% end;
end; |
Partager