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