26.12.2014 Views

metode de calcul numeric matriceal. algoritmi fundamentali

metode de calcul numeric matriceal. algoritmi fundamentali

metode de calcul numeric matriceal. algoritmi fundamentali

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

36 CAPITOLUL 1. ALGORITMI ELEMENTARI<br />

Algoritmul 1.11 (Se dau A ∈ R m×l , B ∈ R l×n . Se <strong>calcul</strong>ează<br />

C = AB ∈ R m×n . Forma jki.)<br />

1. C ← 0<br />

2. Pentru j = 1 : n<br />

1. Pentru k = 1 : l<br />

1. C(:, j) ← Saxpy(B(k, j), A(:, k), C(:, j))<br />

Din nou cele două bucle interioare se pot înlocui cu Gaxpy.<br />

Forma kji a algoritmului este o implementare directă a formulei (1.15), care<br />

evi<strong>de</strong>nţiază produse exterioare.<br />

Algoritmul 1.12 (Se dau A ∈ R m×l , B ∈ R l×n . Se <strong>calcul</strong>ează<br />

C = AB ∈ R m×n folosind operaţii OUT.)<br />

1. C ← 0<br />

2. Pentru k = 1 : l<br />

1. C ← C + OUT(A(:, k), B(k, :))<br />

Apelul rutinei OUT înlocuieşte buclele Pentru cu indicii j şi i.<br />

Formele ijk, kij şi ikj sunt, în această ordine, variante ale celor trei forme<br />

prezentate mai sus. Permutarea buclelor i şi j nu este esenţială, <strong>de</strong>oarece acestea<br />

au rolul <strong>de</strong> parcurgere a matricei C, pe linii sau pe coloane. Acest lucru poate<br />

<strong>de</strong>veni important dacă se ţine seama <strong>de</strong> modul <strong>de</strong> adresare a elementelor matricei<br />

impus <strong>de</strong> limbajul <strong>de</strong> programare utilizat. De exemplu, în FORTRAN se preferă<br />

organizarea pe coloane, corespunzător formelor jik, jki, kji, <strong>de</strong>oarece matricele<br />

sunt memorate pe coloane.<br />

În oricare dintre formele menţionate, înmulţirea <strong>de</strong> matrice necesită 2mnl flopi,<br />

<strong>de</strong>ci 2n 3 în cazul matricelor pătrate, şi face parte din grupul operaţiilor <strong>de</strong> nivel 3.<br />

Vom face referire la ea în forma C = MM(A, B).<br />

Înmulţirea matricelor complexe. Algoritmii <strong>de</strong> mai sus, ca şi toate consi<strong>de</strong>raţiile<br />

care îi preced, sunt valabili şi pentru înmulţirea matricelor complexe<br />

C = AB ∈ C m×n , cu A ∈ C m×l , B ∈ C l×n . Diferenţa constă în numărul <strong>de</strong><br />

flopi necesari execuţiei. Dacă adunarea a două numere complexe se face în doi flopi<br />

(unul pentru partea reală, altul pentru partea imaginară), în schimb înmulţirea<br />

necesită şase:<br />

(α + iβ)(γ + iδ) = αγ − βδ + i(αδ + βγ). (1.20)<br />

Aşadar înmulţirea matricelor complexe se execută în aproximativ 8mnl flopi (câte<br />

mnl înmulţiri şi adunări <strong>de</strong> scalari complecşi).<br />

Aceeaşi observaţie poate fi făcută scriind A = A 1 + iA 2 , cu A 1 , A 2 ∈ R m×l ,<br />

B = B 1 + iB 2 , cu B 1 , B 2 ∈ R l×n , şi<br />

C = A 1 B 1 − A 2 B 2 + i(A 1 B 2 + A 2 B 1 ). (1.21)<br />

Înmulţirea matricelor complexe se poate efectua <strong>de</strong>ci prin patru produse (şi două<br />

adunări) <strong>de</strong> matrice reale.<br />

Numărul <strong>de</strong> operaţii se poate reduce printr-un mic artificiu <strong>de</strong> <strong>calcul</strong>; o formă<br />

echivalentă cu (1.20) este<br />

(α + iβ)(γ + iδ) = αγ − βδ + i((α + β)(γ + δ) − αγ − βδ). (1.22)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!