10.07.2015 Views

Calcul matriceal elementar

Calcul matriceal elementar

Calcul matriceal elementar

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.

14 SEMINAR 1. CALCUL MATRICEAL ELEMENTARAlgoritmul 1.7 GAXPY pe coloane: Fiind dată o matrice A ∈ IR m×n şi vectoriib ∈ IR n şi c ∈ IR m , algoritmul calculează c ← c + A ∗ b1. pentru j = 1 : n1. pentru i = 1 : m1. c i = c i + a ij ∗ b jComplexitatea celor doi algoritmi este aceeaşi N op ≈ 2mn dar există diferenţe între ei:primul este recomandat când matrica A este memorată pe linii şi al doilea când matricea Aeste memorată pe coloane.Problema 5. Fie trei matrice A ∈ IR m×n , B ∈ IR n×p şi C ∈ IR m×p date, scrieţi unalgoritm eficient care să calculeze C ← C + A ∗ B. (Dacă iniţial C = 0, atunci aceasta esteo problemă de înmulţire matrice-matrice C = A ∗ B).Soluţia. Soluţia standard se bazează pe formula binecunoscutăc ij ← c ij +n∑a ik ∗ b kj , i = 1 : m, j = 1 : p.k=1Având trei indici (i, j, k) putem scrie 3! = 6 algoritmi esenţial diferiţi. Complexitatea acestoralgoritmi este aceeaşi N op ≈ 2mnp. Prezentăm trei dintre aceştia cu scurte comentarii.a) Versiunea (i, j, k) se bazează pe partiţionarea lui A pe linii şi a lui B pe coloane.Ultimul ciclu intern calculează un produs DOT şi ultimele două cicluri calculează o operaţieGAXPY-linie, i.e. C(i, j) ← C(i, j) + A(i, :) · B(:, j) respectiv C(i, :) ← C(i, :) + A(i, :) · B.Algoritmul 1.8 Versiunea (i, j, k) a înmulţirii matrice-matrice. Date A ∈IR m×n , B ∈ IR n×p şi C ∈ IR m×p algoritmul calculează C ← C + A ∗ B.1. pentru i = 1 : m1. pentru j = 1 : p1. pentru k = 1 : n1. c ij = c ij + a ik ∗ b kjb) Versiunea (j, k, i) se bazează pe partiţionarea lui A şi a lui B pe coloane. Ultimul cicluintern calculează o SAXPY-coloană şi ultimele două cicluri calculează o GAXPY-coloană,i.e. C(:, j) ← C(:, j) + A(:, k) · B(k, j), respectiv C(:, j) ← C(:, j) + A · B(:, j).Algoritmul 1.9 Versiunea (j, k, i) a înmulţirii matrice-matrice.1. pentru j = 1 : p1. pentru k = 1 : n1. pentru i = 1 : m1. c ij = c ij + a ik ∗ b kjc) Versiunea (k, i, j) se bazează pe partiţionarea lui A pe coloane şi a lui B pe linii.Ultimul ciclu calculează un produs SAXPY-linie şi ultimele două cicluri calculează produsulOUT a doi vectori, concret C(i, :) ← C(i, :)+A(i, k)·B(k, :), respectiv C ← C+A(:, k)·B(k, :).

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

Saved successfully!

Ooh no, something went wrong!