Documente Academic
Documente Profesional
Documente Cultură
Elemente teoretice : Calitatea unui algoritm este apreciat prin eficiena sa spaial (memoria necesar datelor i programului ) i temporal ( timpul de calcul necesar obinerii soluiei ) . Pentru a determina dependena timpului de calcul de dimensiunea problemei rezolvate de algoritm se consider ca referin timpul necesar efecturii unei operaii elementare , adunare sau nmulire de numere reale i apoi se evalueaz numrul acestor operaii . O problem poate avea doi sau mai muli algoritmi de rezolvare cu ordine de complexitate diferite . n algoritmii numerici timpul de calcul este consumat preponderent n operaiile repetate ciclic . De aceea ordinul de complexitate este dat , n general , de numrul ciclurilor : c = a b ; ordinul 0 pentru c = a b i i i pentru i =1, n
j = 1, n pentru c = a b ij i j
i = 1, n
; ordinul 1
; ordinul 2
; ordinul 3
2. Chestiuni de studiat : 2.1. Studierea funciilor Matlab rand , clock , etime , sum , for , a operaiilor cu tablouri , polyfit , polyval . 2.2. Determinarea eficienei temporale a algoritmului de obinere a produsului scalar a doi vectori aleatori n dimensionali . 2.3. Determinarea eficienei temporale a algoritmului de obinere a produsului a dou matrici ptratice aleatoare n dimensionale . 2.4. Determinarea erorii relative de rotunjire pentru staia de lucru curent . 3. Modul de lucru : 3.1. Determinarea eficienei temporale a algoritumului de obinere a produsului scalar a doi vectori n dimensionali :
Lucrarea i propune s determine dependena timpului de calcul a produsului scalar n funcie de dimensiunea vectorilor i s estimeze ordinul de complexitate temporal . Se va crea un program Matlab . Cei doi vectori vor fi generai aleator folosind funcia rand() din Matlab . Aceast funcie genereaz o secven de numere aleatoare uniform distribuite n intervalul (0,1) . Apelat cu rand(n) genereaz o matrice patratic de numere aleatoare , de dimensiune n . Pentru generarea celor doi vectori , x(n) i y(n) funcia va fi apelat cu rand(1,n) . Pentru determinarea timpului de execuie se folosete funcia Matlab etime . Timpul de execuie al unei secvene de instruciuni se determin cu etime n felul urmtor : t0=clock; instruciuni etime(clock,t0) Funcia clock determin ora i data curent . Pentru determinarea produsului scalalr se folosete funcia sum , care sumeaz elementele unui vector . Utilizarea operatorului .* (operaii cu tablouri ) permite nmulirea celor doi vectori , component cu component . Instruciunea x.*y genereaz un vector ale crui componente sunt produsele x(i)*y(i) . Instruciunea sum(x.*y) determin suma lor . Funcia plot permite reprezentarea grafic a vectorului timp de execuie tf n funcie de vectorul n care conine valorile dimensiunilor vectorilor . Instruciunea n=100:200:1000 genereaz un vector ale crui componente variaz cu pasul 200 pn la 1000 . Generarea vectorilor cu o anumit dimensiune , determinarea produsului scalar corespunztor acesteia i a timpului de execuie tf se fac n interiorul unui ciclu for . La fiecare valoare a lui n se determin un i care este un contor pentru vectorul tf . De exemplu cnd n=100 i=1 i deci n prima component a vectorului tf , tf(1) se stocheaz prima valoare a timpului de execuie corespunztoare lui n=100 . Algoritmul se repat pn cnd n=100 . Apoi i este incrementat la i+1 pentru a se memora tf-ul urmtor n locaia 2 din vectorul tf . O versiune de program Matlab ce poate fi folosit pentru scopul lucrrii este : t0=clock; i=1; for n=100:200:1000, x=rand(1,n) y=rand(1,n) P=sum(x.*y); tf(i)=etime(clock,t0); i=i+1; end
n=100:200:1000; plot(n,tf)
0.4
0.35
0.3
0.25
0.2
0.15
0.1
0.05 100
200
300
400
500
600
700
800
900
Se observa o variatie cvasi liniara care este in concordanta cu teoria care afirma ca algoritmul are ordinul de complexitate temporala liniar O(n) . 3.2 Determinarea eficientei temporale a algoritmului de obtinere a produslui a doua matrici patratice aleatoare n dimensionale Se va crea un program in Matlab . Cele doua matrice patratice vor fi generate aleator folosind functia rand () din Matlab , apelata cu sintaxa rand(n) . O versiune de program Matlab ce poate fi folosit pentru scopul lucrarii este :
200
300
400
500
600
700
800
900
Se observa o variatie care confirma faptul ca algoritmul este de ordinul 3 , T=O(n) . 3.3 Determinarea erorii relative de rotunjire . Aceasta eroare relativa de rotunjire specifica sistemului de calcul care este cel mai mare numar real care adaugat la unitate nu modifica valoarea acesteia . Ordinul de marime al erorii relative de rotunjire la calculatoarele numerice uzuale este de 10 5 10 20 si poate di determinat pentru fiecare sistem de calcul cu urmatorul algoritm :
repeta err=err/2 pana cand 1+err=1 scrie err Eroarea relativa de rotunjire err este cunoscuta sub numele de zeroul masinii sin u trebuie confundata cu cel mai mic numar pozitiv , nenul , reprezentabil in calculator , care este de ordinul 10 64 . err=1; while(1+err)~=1, err=err/2 end err Pentru un computer cu procesor de 3 GHz si 512 MB de RAM s-a obtinut valoarea err= 1.1102e-016 Care este cuprinsa in intervalul teoretic .