Université de Montpellier Année Universitaire 2014-2015
Faculté des Sciences
Mathématiques. 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 ARn×net un second membre bRn×n,
calculer xsolution 1du système triangulaire A x =b.
Pour créer facilement des matrices triangulaires de taille quelconque, vous utilis-
erez successivement les instructions rand(n,p)qui génère une matrice aléatoire
n×pet 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 %%%
1Evidemment 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 nvariant entre 2et
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 n7→ t(n)en coordonnées cartésiennes, ainsi
qu’en échelle logarithmique. Comparez sur les mêmes graphes avec la courbe
n7→ n2. Que constatez vous? Quelle est la pente commune de ces courbes?
Quelle est la complexité de l’algorithme? Comme les npetits 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)
2En 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
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !