1 Algorithme de remontée. - Université de Montpellier

publicité
Université de Montpellier
Faculté des Sciences
Mathématiques.
Année Universitaire 2014-2015
HLMA405
TP 2
1
Algorithme de remontée.
Ecrire un script (ou une fonction) qui réalise la tâche suivante: Etant donnés
une matrice triangulaire supérieure A ∈ Rn×n et un second membre b ∈ Rn×n ,
calculer x solution 1 du système triangulaire A x = b.
Pour créer facilement des matrices triangulaires de taille quelconque, vous utiliserez successivement les instructions rand(n, p) qui génère une matrice aléatoire
n × p et A = triu(A) qui ne conserve que la partie triangulaire supérieure. Vous
prévoirez un test pour détecter si la matrice n’est pas inversible et vous vérifierez
vos calculs en calculant la norme du résidu norm(Ax − b)
%% resolution d’un systeme lineaire triangulaire par substitution
% donnee A une matrice triangulaire
% second membre b
% sortie solution x de Ax=b
%previent si coefficient diagonal trop petit: matrice presque singuliere
%verifie la solution en calculant la norme du résidu
%%
A=triu(rand(n,n));%matrice triangulaire aleatoire
b=rand(n,1);%second membre aleatoire
x=zeros(n,1);%initialisation
%%
if A(n,n) < 1e-12; disp(’attention matrice presque singuliere’);
return;
end
x(n)= b(n)/A(n,n);% calcule la dernière composante
%%
for l=n-1:-1:1 % la substitution à rebours
%%%%A completer %%%%
end;
%% A completer %%%
1 Evidemment vous n’utiliserez pas dans ce TP la fonction Matlab ’\’ de résolution de
système x = A\b
1
2
Vérification de la complexité de l’algorithme
de remontée.
Vous utiliserez les instructions de chronométrage de temps CPU fournie par
Matlab
tic; instructions ; duree=toc; qui compte en secondes le temps CPU pour
effectuer les instructions comprises entre tic et duree=toc et range ce nombre
réel dans la variable duree.2
Exécuter le programme précédent pour des matrices de taille n variant entre 2 et
1000 et chronométrez le temps d’exécution de la remontée. Il faut placer tic et
duree=toc aux bons endroits pour mesurer uniquement la durée de l’algorithme
de remontée et non la génération des matrices et des second membres.
%% Estimation du temps cpu par rapport à n
% trace la complexité en fonction de n
nmax=1000;
for n=2:nmax
%initialisation
t=zeros(1,nmax);
%A COMPLETER
tic;
%A COMPLETER
t(n)=toc;
end
Vous tracerez ensuite la courbe n 7→ t(n) en coordonnées cartésiennes, ainsi
qu’en échelle logarithmique. Comparez sur les mêmes graphes avec la courbe
n 7→ n2 . Que constatez vous? Quelle est la pente commune de ces courbes?
Quelle est la complexité de l’algorithme? Comme les n petits ne sont pas
représentatifs, on peut tracer à partir de n = 10:
plot((10:nmax), t(10:nmax))
%% Trace l’allure de la courbe des durées de calcul
%
plot(t);xlabel(’taille n du système’);ylabel(’durée t de résolution’);
title(’durée elimination vs taille du systeme’);
display(’taper un caractère pour continuer’);
pause;
%% C’est mieux en coordonnées logarithmiques.
%
clf;loglog(t);
title(’échelle log-log’);
hold on
%%A COMPLETER POUR TRACER n->n^2 en echelle log-log
%% afficher la pente
NB : Vous trouverez une introduction à Matlab ainsi qu’un aide-mémoire
des principales commandes sur l’ENT (fichiers pdf)
2 En fait ces instructions lisent l’horloge interne de la machine et donc la performance peut
être modifiée selon les applications qui tournent en même temps que Matlab.
2
Téléchargement