Maticovo-vektorové násobenie na grafických kartách. Násobenie matice vektorom

Systém MatLab jednoducho vykonáva matematické operácie s maticami a vektormi. Najprv zvážte jednoduché operácie sčítania a násobenia matíc a vektorov. Nech sú dané dva vektory

a = ; % riadkového vektora
b =; % stĺpcového vektora

potom násobenie týchto dvoch vektorov možno zapísať ako

c = a*b; %c=1+2+3+4+5=16
d = b*a; %d - matica 5x5 prvkov

Podľa operácií s vektormi vynásobením riadkového vektora stĺpcovým vektorom získame číslo a vynásobením stĺpcového vektora riadkovým vektorom dvojrozmernú maticu, ktorá je výsledkom výpočtov vo vyššie uvedenom príklade, t.j.

Sčítanie a odčítanie dvoch vektorov sa zapíše ako

a1 =;
a2 =;
c = a1+a2; % c =;
c = a2-al; % c =;

Všimnite si, že operácie sčítania a odčítania možno vykonávať medzi dvoma stĺpcovými vektormi alebo dvoma riadkovými vektormi. V opačnom prípade MatLab vydá chybové hlásenie, pretože vektory rôznych typov nemožno pridať. To je prípad všetkých neplatných aritmetických operácií: ak sa nedajú vypočítať, systém MatLab ohlási chybu a program sa ukončí na príslušnom riadku.

Podobne sa vykonávajú operácie násobenia a sčítania medzi maticami:

A =;
B = jednotky (3);
C=A+B; % pridania dvoch matíc rovnakej veľkosti
D = A + 5; % pridania matice a čísla
E=A*B; % násobenie matice A B
F=B*A; % násobenie matice B A
G = 5*A; % násobenie matice číslom

Operácie výpočtu inverznej matice, ako aj transponovanie matíc a vektorov sú napísané takto:

a = ; % riadkového vektora
b = a'; % stĺpcový vektor tvorený
% transponovania riadkového vektora a.
A =; % matice 3x3 prvkov
B = a*A; %b= - riadkový vektor
C=A*b; % C = - stĺpcový vektor
D = a*A*a'; % D = 45 – číslo, súčet matice A
E = A'; % E je transponovaná matica A
F = inv(A); % F - inverzná matica A
G = A^-1; % G - inverzná matica A

Z vyššie uvedeného príkladu je vidieť, že operácia transponovania matíc a vektorov je označená symbolom ‘ (apostrof), ktorý je umiestnený za názvom vektora alebo matice. Výpočet inverznej matice možno vykonať volaním funkcie inv() alebo zvýšením matice na -1. Výsledok bude v oboch prípadoch rovnaký a pre jednoduché použitie pri implementácii rôznych algoritmov sú vytvorené dve metódy výpočtu.

Ak je v priebehu výpočtov potrebné vynásobiť, rozdeliť alebo zvýšiť prvky vektora alebo maticového prvku po prvku, potom sa na to používajú tieto operátory:

.* - násobenie po prvkoch;
./ a .\ - delenie podľa prvkov;
.^ - elementárne umocňovanie.

Zvážte fungovanie týchto operátorov v nasledujúcom príklade.

a = ; % riadkového vektora
b =; % riadkového vektora
c = a.*b; %c=
A = jednotky(3); % matica 3x3 pozostávajúca z jednotiek
B =; % matice 3x3
C = A.*B; % matrice 3x3, pozostávajúcej z
D = A./B; % matrice 3x3, pozostávajúcej z
E = A.\B; % matrice 3x3, pozostávajúcej z
F = A.^2; % kvadratúry prvkov matice A

Na záver tejto časti zvážte niekoľko funkcií, ktoré sú užitočné pri práci s vektormi a maticami.

Na nájdenie maximálnej hodnoty vektorového prvku sa používa štandardná funkcia max(), ktorá vráti nájdenú maximálnu hodnotu prvku a jeho pozíciu (index):

a = ;
= max(a); % v = 6, i = 2;

v = max(a); %v = 6;

Vyššie uvedený príklad ukazuje dva rôzne spôsoby volania funkcie max(). V prvom prípade sa určí maximálna hodnota prvku aj jeho index vo vektore a v druhom sa určí iba maximálna hodnota prvku.

V prípade matíc táto funkcia určuje maximálne hodnoty v stĺpcoch, ako je znázornené v príklade nižšie:

A =;
= max(A); % V=, I=
V = max(A); %V=

Úplnú syntax funkcie max() nájdete zadaním príkazu v príkazovom okne MatLab

Pomoc<название функции>

Podobne funguje aj funkcia min(), ktorá určuje minimálnu hodnotu prvku vektora alebo matice a jeho index.

Ďalšou užitočnou funkciou na prácu s maticami a vektormi je funkcia sum(), ktorá vypočítava súčet hodnôt prvkov vektora alebo stĺpcov matice:

a = ;
s = súčet(a); %s = 3+5+4+2+1=15
A =;
S1 = súčet (A); %S1=
S2 = súčet(súčet(A)); % S2 = 39

Pri výpočte súčtu S2 sa súčet hodnôt prvkov matice A najskôr vypočíta podľa stĺpcov a potom podľa riadkov. Výsledkom je, že premenná S2 obsahuje súčet hodnôt všetkých prvkov matice A.

Ak chcete zoradiť hodnoty prvkov vektora alebo matice vo vzostupnom alebo zostupnom poradí, použite funkciu sort() takto:

a = ;

b1 = triediť (a); %b1=
b2 = zoradiť (a, 'zostup'); %b2=
b3 = zoradiť (a, 'vzostup'); %b3=

pre matriky

A =;
B1 = triediť (A); %B1=
B2 = zoradiť (A, 'zostup'); %B2=

V mnohých praktických problémoch je často potrebné nájsť konkrétny prvok vo vektore alebo matici. Dá sa to urobiť pomocou štandardnej funkcie find(), ktorá berie ako argument podmienku, podľa ktorej sa nájdu požadované prvky, napríklad:

a = ;
b1 = nájsť (a == 2); %b1 = 4 – index prvku 2
b2 = nájsť (a ~= 2); % b2 = - indexy bez 2
b3 = nájsť (a > 3); %b3=

Vo vyššie uvedenom príklade symbol „==“ znamená kontrolu rovnosti a symbol „~=“ vykonáva kontrolu nerovnosti hodnôt prvkov vektora a. Viac podrobností o týchto operátoroch bude popísaných v časti o podmienených operátoroch.

Ďalšou užitočnou funkciou na prácu s vektormi a maticami je funkcia mean() na výpočet aritmetického priemeru, ktorá funguje nasledovne:

a = ;
m = priemer (a); %m = 3
A =;
M1 = priemer (A); %M1=
M2 = priemer (priemer (A)); % M2 = 4,333

V predchádzajúcej lekcii sme teda analyzovali pravidlá sčítania a odčítania matíc. Sú to také jednoduché operácie, že väčšina študentov im rozumie doslova hneď od začiatku.

Radujete sa však skoro. Darček sa skončil – prejdime k násobeniu. Hneď vás varujem: násobenie dvoch matíc vôbec neznamená násobenie čísel v bunkách s rovnakými súradnicami, ako si možno myslíte. Všetko je tu oveľa zábavnejšie. A musíte začať s predbežnými definíciami.

Konzistentné matice

Jednou z najdôležitejších vlastností matice je jej veľkosť. Už sme o tom hovorili stokrát: $A=\left[ m\times n \right]$ znamená, že matica má presne $m$ riadkov a $n$ stĺpcov. Už sme diskutovali o tom, ako nezamieňať riadky so stĺpcami. Teraz je dôležité niečo iné.

Definícia. Matice tvaru $A=\left[ m\krát n \right]$ a $B=\left[ n\krát k \right]$, v ktorých je počet stĺpcov v prvej matici rovnaký ako počet riadkov v druhom, sa nazývajú konzistentné.

Ešte raz: počet stĺpcov v prvej matici sa rovná počtu riadkov v druhej! Z toho vyvodíme dva závery naraz:

  1. Záleží nám na poradí matrík. Napríklad matice $A=\left[ 3\times 2 \right]$ a $B=\left[ 2\times 5 \right]$ sú konzistentné (2 stĺpce v prvej matici a 2 riadky v druhej) , ale naopak — matice $B=\left[ 2\times 5 \right]$ a $A=\left[ 3\times 2 \right]$ už nie sú konzistentné (5 stĺpcov v prvej matici je napr. boli, nie 3 riadky v druhom ).
  2. Konzistenciu je ľahké skontrolovať, ak zapíšete všetky rozmery jeden po druhom. Pomocou príkladu z predchádzajúceho odseku: "3 2 2 5" - rovnaké čísla sú v strede, takže matice sú konzistentné. Ale „2 5 3 2“ nie je dohodnuté, pretože v strede sú rôzne čísla.

Okrem toho sa zdá, že kapitán naznačuje, že štvorcové matice rovnakej veľkosti $\left[ n\times n \right]$ sú vždy konzistentné.

V matematike, keď je dôležité poradie enumerácie objektov (napríklad vo vyššie diskutovanej definícii je dôležité poradie matíc), často sa hovorí o usporiadaných pároch. Stretli sme sa s nimi v škole: Myslím si, že je zbytočné, že súradnice $\left(1;0 \right)$ a $\left(0;1 \right)$ definujú rôzne body v rovine.

Takže: súradnice sú tiež usporiadané dvojice, ktoré sa skladajú z čísel. Nič vám ale nebráni vyrobiť si takúto dvojicu matíc. Potom bude možné povedať: „Usporiadaný pár matíc $\left(A;B \right)$ je konzistentný, ak je počet stĺpcov v prvej matici rovnaký ako počet riadkov v druhej. "

No a čo?

Definícia násobenia

Uvažujme dve konzistentné matice: $A=\left[ m\krát n \right]$ a $B=\left[ n\krát k \right]$. A my im definujeme operáciu násobenia.

Definícia. Súčin dvoch konzistentných matíc $A=\left[ m\krát n \right]$ a $B=\left[ n\krát k \right]$ je nová matica $C=\left[ m\krát k \ vpravo] $, ktorého prvky sa vypočítajú podľa vzorca:

\[\begin(align) & ((c)_(i;j))=((a)_(i;1))\cdot ((b)_(1;j))+((a)_ (i;2))\cdot ((b)_(2;j))+\ldots +((a)_(i;n))\cdot ((b)_(n;j))= \\ & =\sum\limits_(t=1)^(n)(((a)_(i;t))\cdot ((b)_(t;j))) \end(align)\]

Takýto produkt sa označí štandardným spôsobom: $C=A\cdot B$.

Pre tých, ktorí túto definíciu vidia prvýkrát, sa okamžite vynárajú dve otázky:

  1. Čo je to za divokú hru?
  2. Prečo je to také ťažké?

No, prvé veci. Začnime prvou otázkou. Čo znamenajú všetky tieto indexy? A ako sa pri práci s reálnymi matricami nemýliť?

V prvom rade si všimneme, že dlhý riadok na výpočet $((c)_(i;j))$ (špeciálne vložte bodkočiarku medzi indexy, aby ste sa neplietli, ale nemusíte ich zadávať všeobecné - sám som bol unavený písaním vzorca do definície) sa skutočne scvrkáva na jednoduché pravidlo:

  1. Vezmite $i$-tý riadok v prvej matici;
  2. Vezmite $j$-tý stĺpec v druhej matici;
  3. Dostaneme dve postupnosti čísel. Prvky týchto sekvencií vynásobíme rovnakými číslami a potom sčítame výsledné produkty.

Tento proces je ľahko pochopiteľný z obrázku:


Schéma na násobenie dvoch matíc

Ešte raz: opravíme riadok $i$ v prvej matici, stĺpec $j$ v druhej matici, vynásobíme prvky rovnakými číslami a potom sčítame výsledné produkty - dostaneme $((c)_(ij) )) $. A tak pre všetky $1\le i\le m$ a $1\le j\le k$. Tie. takýchto "zvráteností" bude celkovo $m\krát k$.

S maticovým násobením sme sa totiž stretli už aj v školských osnovách, len v značne oklieštenej podobe. Nech sú dané vektory:

\[\begin(align) & \vec(a)=\left(((x)_(a));((y)_(a));((z)_(a)) \right); \\ & \overrightarrow(b)=\left(((x)_(b));((y)_(b));((z)_(b)) \right). \\ \end(zarovnať)\]

Potom ich skalárny produkt bude presne súčtom párových produktov:

\[\overrightarrow(a)\times \overrightarrow(b)=((x)_(a))\cdot ((x)_(b))+((y)_(a))\cdot ((y )_(b))+((z)_(a))\cdot ((z)_(b))\]

V skutočnosti sme v tých vzdialených rokoch, keď boli stromy zelenšie a obloha jasnejšia, jednoducho vynásobili riadkový vektor $\overrightarrow(a)$ stĺpcovým vektorom $\overrightarrow(b)$.

Dnes sa nič nezmenilo. Len teraz je tých riadkových a stĺpcových vektorov viac.

Ale dosť teórie! Pozrime sa na reálne príklady. A začnime najjednoduchším prípadom - štvorcovými maticami.

Násobenie štvorcových matíc

Úloha 1. Vykonajte násobenie:

\[\left[ \begin(pole)(*(35)(r)) 1 & 2 \\ -3 & 4 \\\end(pole) \right]\cdot \left[ \begin(pole)(* (35)(r)) -2 & 4 \\ 3 & 1 \\\koniec (pole) \vpravo]\]

Riešenie. Máme teda dve matice: $A=\ľavý[ 2\krát 2 \vpravo]$ a $B=\ľavý[ 2\krát 2 \vpravo]$. Je jasné, že sú konzistentné (štvorcové matice rovnakej veľkosti sú vždy konzistentné). Takže urobíme násobenie:

\[\začiatok(zarovnanie) & \left[ \begin(pole)(*(35)(r)) 1 & 2 \\ -3 & 4 \\\koniec (pole) \vpravo]\cdot \left[ \ begin(pole)(*(35)(r)) -2 & 4 \\ 3 & 1 \\\end(pole) \right]=\left[ \begin(pole)(*(35)(r)) 1\cdot \left(-2 \right)+2\cdot 3 & 1\cdot 4+2\cdot 1 \\ -3\cdot \left(-2 \right)+4\cdot 3 & -3\cdot 4+4\cbodka 1 \\\koniec (pole) \vpravo]= \\ & =\vľavo[ ​​\začiatok(pole)(*(35)(r)) 4 a 6 \\ 18 & -8 \\\ koniec(pole)\vpravo]. \end(align)\]

To je všetko!

Odpoveď: $\left[ \begin(pole)(*(35)(r))4 & 6 \\ 18 & -8 \\\end(pole) \right]$.

Úloha 2. Vykonajte násobenie:

\[\left[ \začiatok(matica) 1 & 3 \\ 2 & 6 \\\koniec (matica) \right]\cdot \left[ \begin(pole)(*(35)(r))9 & 6 \\ -3 & -2 \\\koniec (pole) \vpravo]\]

Riešenie. Opäť konzistentné matice, takže vykonáme nasledujúce akcie:\[\]

\[\začiatok(zarovnanie) & \left[ \začiatok(matica) 1 & 3 \\ 2 & 6 \\\koniec (matica) \right]\cdot \left[ \begin(pole)(*(35)( r)) 9 a 6 \\ -3 & -2 \\\koniec (pole) \vpravo]=\ľavý[ \začiatok(pole)(*(35)(r)) 1\cbodka 9+3\cbodka \ vľavo(-3 \vpravo) & 1\cbodka 6+3\cbodka \ľavá(-2 \vpravo) \\ 2\cbodka 9+6\cbodka \ľavá(-3 \vpravo) & 2\cbodka 6+6\ cdot \left(-2 \right) \\\end(pole) \right]= \\ & =\left[ \begin(matica) 0 & 0 \\ 0 & 0 \\\end(matica) \right] . \end(align)\]

Ako vidíte, výsledkom je matica naplnená nulami

Odpoveď: $\left[ \začiatok(matica) 0 & 0 \\ 0 & 0 \\\koniec (matica) \right]$.

Z vyššie uvedených príkladov je zrejmé, že maticové násobenie nie je až taká zložitá operácia. Aspoň pre štvorcové matice 2 x 2.

V procese výpočtov sme zostavili prechodnú maticu, kde sme priamo namaľovali, aké čísla sú zahrnuté v konkrétnej bunke. To je presne to, čo by sa malo robiť pri riešení skutočných problémov.

Základné vlastnosti matricového produktu

Stručne. Maticové násobenie:

  1. Nekomutatívne: $A\cdot B\ne B\cdot A$ vo všeobecnosti. Samozrejme existujú špeciálne matice, pre ktoré platí rovnosť $A\cdot B=B\cdot A$ (napríklad ak $B=E$ je matica identity), ale v drvivej väčšine prípadov to nefunguje. ;
  2. Asociatív: $\left(A\cdot B \right)\cdot C=A\cdot \left(B\cdot C \right)$. Tu nie sú žiadne možnosti: susedné matice možno násobiť bez toho, aby ste sa museli starať o to, čo je naľavo a napravo od týchto dvoch matíc.
  3. Distribučne: $A\cdot \left(B+C \right)=A\cdot B+A\cdot C$ a $\left(A+B \right)\cdot C=A\cdot C+B\cdot C $

A teraz - všetko rovnaké, ale podrobnejšie.

Maticové násobenie je veľmi podobné klasickému násobeniu čísel. Existujú však rozdiely, z ktorých najdôležitejší je ten maticové násobenie je vo všeobecnosti nekomutatívne.

Zvážte znova matice z úlohy 1. Už poznáme ich priamy súčin:

\[\left[ \begin(pole)(*(35)(r)) 1 & 2 \\ -3 & 4 \\\end(pole) \right]\cdot \left[ \begin(pole)(* (35)(r)) -2 & 4 \\ 3 & 1 \\\koniec (pole) \vpravo]=\ľavý[ \začiatok(pole)(*(35)(r))4 & 6 \\ 18 & -8 \\\koniec (pole) \vpravo]\]

Ale ak vymeníme matice, dostaneme úplne iný výsledok:

\[\left[ \begin(pole)(*(35)(r)) -2 & 4 \\ 3 & 1 \\\end(pole) \right]\cdot \left[ \begin(pole)(* (35)(r)) 1 & 2 \\ -3 & 4 \\\koniec (pole) \vpravo]=\ľavý[ \začiatok (matica) -14 & 4 \\ 0 & 10 \\\koniec (matica )\správny]\]

Ukazuje sa, že $A\cdot B\ne B\cdot A$. Tiež operácia násobenia je definovaná len pre konzistentné matice $A=\left[ m\krát n \right]$ a $B=\left[ n\krát k \right]$, ale nikto nezaručil, že zostanú konzistentné, ak sú vymenené. Napríklad matice $\left[ 2\krát 3 \right]$ a $\left[ 3\krát 5 \right]$ sú v tomto poradí celkom konzistentné, ale rovnaké matice $\left[ 3\krát 5 \ vpravo] $ a $\left[ 2\krát 3 \right]$ napísané v opačnom poradí sa už nezhodujú. Smútok :(

Medzi štvorcovými maticami danej veľkosti $n$ budú vždy také matice, ktoré dávajú rovnaký výsledok ako pri priamom, tak aj v opačnom poradí. Ako opísať všetky takéto matice (a koľko ich je vo všeobecnosti) je téma na samostatnú hodinu. Dnes o tom nebudeme hovoriť. :)

Násobenie matice je však asociatívne:

\[\left(A\cdot B \right)\cdot C=A\cdot \left(B\cdot C \right)\]

Preto, keď potrebujete vynásobiť niekoľko matíc za sebou naraz, nie je to vôbec potrebné robiť vopred: je celkom možné, že niektoré susedné matice pri vynásobení poskytnú zaujímavý výsledok. Napríklad nulová matica, ako v 2. úlohe diskutovanej vyššie.

V reálnych úlohách sa najčastejšie musia násobiť štvorcové matice veľkosti $\left[ n\krát n \right]$. Množina všetkých takýchto matíc je označená $((M)^(n))$ (t.j. položky $A=\left[ n\krát n \right]$ a \ znamenajú to isté) určite obsahuje maticu $E$, ktorá sa nazýva matica identity.

Definícia. Matica identity veľkosti $n$ je matica $E$ taká, že pre akúkoľvek štvorcovú maticu $A=\left[ n\krát n \right]$ platí rovnosť:

Takáto matica vyzerá vždy rovnako: na jej hlavnej uhlopriečke sú jednotky a vo všetkých ostatných bunkách sú nuly.

\[\začiatok(zarovnanie) & A\cdot \left(B+C \right)=A\cdot B+A\cdot C; \\ & \left(A+B \right)\cdot C=A\cdot C+B\cdot C. \\ \end(align)\]

Inými slovami, ak potrebujete vynásobiť jednu maticu súčtom dvoch ďalších, potom ju môžete vynásobiť každou z týchto „ďalších dvoch“ a potom pridať výsledky. V praxi zvyčajne musíte vykonať inverznú operáciu: všimneme si rovnakú maticu, vyberieme ju zo zátvorky, vykonáme sčítanie a tým si zjednodušíme život. :)

Všimnite si, že na opis distributivity sme museli napísať dva vzorce: kde je súčet v druhom faktore a kde je súčet v prvom. Je to práve kvôli tomu, že násobenie matíc je nekomutatívne (a vôbec, v nekomutatívnej algebre existuje množstvo všelijakých vtipov, ktoré nám pri práci s obyčajnými číslami ani neprídu na um). A ak si napríklad pri skúške potrebujete zapísať túto vlastnosť, tak určite napíšte oba vzorce, inak sa učiteľ môže trochu nahnevať.

Dobre, všetko to boli rozprávky o štvorcových matriciach. A čo obdĺžniky?

Prípad pravouhlých matíc

Ale nič – všetko je ako pri hranatých.

Úloha 3. Vykonajte násobenie:

\[\left[ \začiatok(matica) \začiatok(matica) 5 \\ 2 \\ 3 \\\koniec (matica) & \začiatok(matica) 4 \\ 5 \\ 1 \\\koniec (matica) \ \\end(matica) \right]\cdot \left[ \begin(pole)(*(35)(r)) -2 & 5 \\ 3 & 4 \\\end(pole) \right]\]

Riešenie. Máme dve matice: $A=\vľavo[ ​​3\krát 2 \vpravo]$ a $B=\vľavo[ ​​2\krát 2 \vpravo]$. Napíšme čísla označujúce veľkosti v rade:

Ako vidíte, dve centrálne čísla sú rovnaké. To znamená, že matice sú konzistentné a možno ich násobiť. A na výstupe dostaneme maticu $C=\vľavo[ ​​3\krát 2 \vpravo]$:

\[\začiatok(zarovnanie) & \vľavo[ ​​\začiatok(matica) \začiatok(matica) 5 \\ 2 \\ 3 \\\koniec (matica) & \začiatok (matica) 4 \\ 5 \\ 1 \\ \end(matica) \\\end(matica) \right]\cdot \left[ \begin(pole)(*(35)(r)) -2 & 5 \\ 3 & 4 \\\end(pole) \right]=\left[ \begin(pole)(*(35)(r)) 5\cdot \left(-2 \right)+4\cdot 3 & 5\cdot 5+4\cdot 4 \\ 2 \cdot \left(-2 \right)+5\cdot 3 & 2\cdot 5+5\cdot 4 \\ 3\cdot \left(-2 \right)+1\cdot 3 & 3\cdot 5+1 \cdot 4 \\\koniec (pole) \vpravo]= \\ & =\vľavo[ ​​\začiatok(pole)(*(35)(r)) 2 a 41 \\ 11 a 30 \\ -3 a 19 \ \\koniec(pole)\vpravo]. \end(align)\]

Všetko je jasné: konečná matica má 3 riadky a 2 stĺpce. Celkom $=\vľavo[ ​​3\krát 2 \vpravo]$.

Odpoveď: $\left[ \begin(pole)(*(35)(r)) \begin(pole)(*(35)(r)) 2 \\ 11 \\ -3 \\\end(array) & \začiatok(matica) 41 \\ 30 \\ 19 \\\koniec (matica) \\\koniec (pole) \vpravo]$.

Teraz zvážte jednu z najlepších tréningových úloh pre tých, ktorí práve začínajú pracovať s matricami. V ňom nie je potrebné len rozmnožiť dve tablety, ale najprv určiť: je takéto rozmnožovanie prípustné?

Úloha 4. Nájdite všetky možné párové súčiny matíc:

\\]; $B=\left[ \začiatok(matica) \začiatok(matica) 0 \\ 2 \\ 0 \\ 4 \\\koniec (matica) & \začiatok (matica) 1 \\ 0 \\ 3 \\ 0 \ \\koniec(matica) \\\koniec(matica) \vpravo]$; $C=\vľavo[ ​​\začiatok(matica)0 & 1 \\ 1 & 0 \\\koniec (matica) \vpravo]$.

Riešenie. Najprv si napíšme rozmery matíc:

\;\ B=\vľavo[ ​​4\krát 2 \vpravo];\ C=\vľavo[ ​​2\krát 2 \vpravo]\]

Dostaneme, že maticu $A$ možno spárovať iba s maticou $B$, keďže počet stĺpcov v $A$ je 4 a iba $B$ má tento počet riadkov. Preto môžeme nájsť produkt:

\\cdot \left[ \begin(pole)(*(35)(r)) 0 & 1 \\ 2 & 0 \\ 0 & 3 \\ 4 & 0 \\\end(pole) \right]=\ vľavo[ ​​\začiatok(pole)(*(35)(r))-10 & 7 \\ 10 & 7 \\\koniec (pole) \vpravo]\]

Navrhujem, aby čitateľ vykonal medzikroky sám. Poznamenám len, že je lepšie určiť veľkosť výslednej matice vopred, ešte pred akýmikoľvek výpočtami:

\\cdot \left[ 4\krát 2 \vpravo]=\vľavo[ ​​2\krát 2 \vpravo]\]

Inými slovami, jednoducho odstránime „prechodové“ koeficienty, ktoré zaisťovali konzistenciu matíc.

Aké ďalšie možnosti sú možné? Určite je možné nájsť $B\cdot A$, keďže $B=\vľavo[ ​​4\krát 2 \vpravo]$, $A=\vľavo[ ​​2\krát 4 \vpravo]$, takže objednaný pár $\ left(B ;A \right)$ je konzistentné a rozmer produktu bude:

\\cdot \left[ 2\krát 4 \vpravo]=\vľavo[ ​​4\krát 4 \vpravo]\]

Stručne povedané, výstupom bude matica $\left[ 4\krát 4 \right]$, ktorej koeficienty sa dajú ľahko vypočítať:

\\cdot \left[ \začiatok(pole)(*(35)(r)) 1 & -1 & 2 & -2 \\ 1 & 1 & 2 & 2 \\\koniec (pole) \right]=\ vľavo[ ​​\začiatok(pole)(*(35)(r))1 & 1 & 2 & 2 \\ 2 & -2 & 4 & -4 \\ 3 & 3 & 6 & 6 \\ 4 & -4 & 8 a -8 \\\koniec (pole) \vpravo]\]

Samozrejme, môžete tiež spárovať $C\cdot A$ a $B\cdot C$ a je to. Preto jednoducho napíšeme výsledné produkty:

Bolo to ľahké.:)

Odpoveď: $AB=\left[ \začiatok(pole)(*(35)(r)) -10 & 7 \\ 10 & 7 \\\koniec(pole) \vpravo]$; $BA=\left[ \begin(pole)(*(35)(r)) 1 & 1 & 2 & 2 \\ 2 & -2 & 4 & -4 \\ 3 & 3 & 6 & 6 \\ 4 & -4 & 8 & -8 \\\koniec (pole) \vpravo]$; $CA=\left[ \začiatok(pole)(*(35)(r)) 1 & 1 & 2 & 2 \\ 1 & -1 & 2 & -2 \\\koniec (pole) \vpravo]$; $BC=\left[ \začiatok(pole)(*(35)(r))1 & 0 \\ 0 & 2 \\ 3 & 0 \\ 0 & 4 \\\koniec (pole) \vpravo]$.

Vo všeobecnosti veľmi odporúčam, aby ste túto úlohu vykonali sami. A ďalšia podobná úloha, ktorá je v domácej úlohe. Tieto zdanlivo jednoduché myšlienky vám pomôžu vypracovať všetky kľúčové kroky pri násobení matice.

Tým sa však príbeh nekončí. Prejdime k špeciálnym prípadom násobenia. :)

Riadkové vektory a stĺpcové vektory

Jednou z najbežnejších maticových operácií je násobenie maticou, ktorá má jeden riadok alebo jeden stĺpec.

Definícia. Stĺpcový vektor je $\left[ m\krát 1 \right]$ matica, t.j. pozostáva z niekoľkých riadkov a iba jedného stĺpca.

Riadkový vektor je matica veľkosti $\left[ 1\times n \right]$, t.j. pozostáva z jedného riadku a niekoľkých stĺpcov.

V podstate sme sa s týmito predmetmi už stretli. Napríklad obvyklý trojrozmerný vektor zo stereometrie $\overrightarrow(a)=\left(x;y;z \right)$ nie je nič iné ako riadkový vektor. Z teoretického hľadiska nie je takmer žiadny rozdiel medzi riadkami a stĺpcami. Pozor si treba dávať len pri koordinácii s okolitými multiplikačnými maticami.

Úloha 5. Vynásobte:

\[\left[ \begin(pole)(*(35)(r)) 2 & -1 & 3 \\ 4 & 2 & 0 \\ -1 & 1 & 1 \\\end(pole) \right] \cdot \left[ \začiatok(pole)(*(35)(r)) 1 \\ 2 \\ -1 \\\koniec (pole) \vpravo]\]

Riešenie. Máme súčin konzistentných matíc: $\ľavý[ 3\krát 3 \vpravo]\cdot \ľavý[ 3\krát 1 \vpravo]=\ľavý[ 3\krát 1 \vpravo]$. Nájdite tento kúsok:

\[\left[ \begin(pole)(*(35)(r)) 2 & -1 & 3 \\ 4 & 2 & 0 \\ -1 & 1 & 1 \\\end(pole) \right] \cdot \left[ \begin(pole)(*(35)(r)) 1 \\ 2 \\ -1 \\\end(pole) \right]=\left[ \begin(pole)(*(35 )(r)) 2\cdot 1+\left(-1 \right)\cdot 2+3\cdot \left(-1 \right) \\ 4\cdot 1+2\cdot 2+0\cdot 2 \ \ -1\cdot 1+1\cdot 2+1\cdot \left(-1 \right) \\\end(pole) \right]=\left[ \begin(array)(*(35)(r) ) -3 \\ 8 \\ 0 \\\koniec (pole) \vpravo]\]

Odpoveď: $\left[ \začiatok(pole)(*(35)(r))-3 \\ 8 \\ 0 \\\koniec(pole) \vpravo]$.

Úloha 6. Vykonajte násobenie:

\[\left[ \begin(pole)(*(35)(r)) 1 & 2 & -3 \\\end(pole) \right]\cdot \left[ \begin(array)(*(35) (r)) 3 & 1 & -1 \\ 4 & -1 & 3 \\ 2 & 6 & 0 \\\koniec (pole) \vpravo]\]

Riešenie. Opäť je všetko konzistentné: $\vľavo[ ​​1\krát 3 \vpravo]\cdot \ľavo[ ​​3\krát 3 \vpravo]=\vľavo[ ​​1\krát 3 \vpravo]$. Za prácu považujeme:

\[\left[ \begin(pole)(*(35)(r)) 1 & 2 & -3 \\\end(pole) \right]\cdot \left[ \begin(array)(*(35) (r)) 3 & 1 & -1 \\ 4 & -1 & 3 \\ 2 & 6 & 0 \\\koniec(pole) \vpravo]=\vľavo[ ​​\začiatok(pole)(*(35)( r))5 & -19 & 5 \\\koniec (pole) \vpravo]\]

Odpoveď: $\left[ \začiatok(matica) 5 & -19 & 5 \\\koniec (matica) \vpravo]$.

Ako vidíte, pri vynásobení riadkového vektora a stĺpcového vektora štvorcovou maticou je výstupom vždy riadok alebo stĺpec rovnakej veľkosti. Tento fakt má mnoho aplikácií – od riešenia lineárnych rovníc až po najrôznejšie transformácie súradníc (ktoré nakoniec spejú aj k sústavám rovníc, ale nehovorme o smutných veciach).

Myslím, že tu bolo všetko jasné. Prejdime k záverečnej časti dnešnej lekcie.

Umocňovanie matice

Spomedzi všetkých operácií násobenia si zvláštnu pozornosť zasluhuje umocňovanie - to je vtedy, keď ten istý objekt násobíme niekoľkokrát sám sebou. Matrice nie sú výnimkou, dajú sa povýšiť aj na rôzne právomoci.

Takéto práce sú vždy koordinované:

\\cdot \left[ n\krát n \vpravo]=\vľavo[ ​​n\krát n \vpravo]\]

A sú označené rovnakým spôsobom ako bežné stupne:

\[\begin(align) & A\cdot A=((A)^(2)); \\ & A\cdot A\cdot A=((A)^(3)); \\ & \underbrace(A\cdot A\cdot \ldots \cdot A)_(n)=((A)^(n)). \\ \end(zarovnať)\]

Na prvý pohľad je všetko jednoduché. Pozrime sa, ako to vyzerá v praxi:

Úloha 7. Zdvihnite maticu na určený výkon:

$((\left[ \začiatok(matica) 1 & 1 \\ 0 & 1 \\\koniec (matica) \right])^(3))$

Riešenie. Dobre, poďme stavať. Najprv to utvoríme na druhú:

\[\začiatok(zarovnanie) & ((\left[ \začiatok(matica) 1 & 1 \\ 0 & 1 \\\koniec (matica) \right])^(2))=\left[ \začiatok(matica ) 1 & 1 \\ 0 & 1 \\\koniec (matica) \vpravo]\cbodka \ľavá[ \začiatok (matica) 1 & 1 \\ 0 & 1 \\\koniec (matica) \vpravo]= \\ & =\left[ \begin(pole)(*(35)(r)) 1\cdot 1+1\cdot 0 & 1\cdot 1+1\cdot 1 \\ 0\cdot 1+1\cdot 0 & 0\cdot 1+1\cdot 1 \\\end(pole) \right]= \\ & =\left[ \begin(pole)(*(35)(r)) 1 & 2 \\ 0 & 1 \ \\end(pole) \right] \end(align)\]

\[\začiatok(zarovnanie) & ((\ľavý[ \začiatok(matica) 1 & 1 \\ 0 & 1 \\\koniec (matica) \vpravo])^(3))=((\ľavý[ \začiatok (matica) 1 & 1 \\ 0 & 1 \\\koniec (matica) \vpravo])^(3))\cdot \left[ \začiatok (matica) 1 & 1 \\ 0 & 1 \\\koniec( matica) \right]= \\ & =\left[ \begin(pole)(*(35)(r)) 1 & 2 \\ 0 & 1 \\\end(pole) \right]\cdot \left[ \začiatok(matica) 1 & 1 \\ 0 & 1 \\\koniec (matica) \vpravo]= \\ & =\vľavo[ ​​\začiatok(pole)(*(35)(r)) 1 & 3 \\ 0 & 1 \\\koniec (pole) \vpravo] \koniec (zarovnanie)\]

To je všetko.:)

Odpoveď: $\left[ \začiatok(matica)1 & 3 \\ 0 & 1 \\\koniec (matica) \right]$.

Problém 8. Zdvihnite maticu na zadaný výkon:

\[((\left[ \začiatok(matica) 1 & 1 \\ 0 & 1 \\\koniec (matica) \right])^(10))\]

Riešenie. Len teraz neplač nad tým, že „titul je príliš vysoký“, „svet nie je spravodlivý“ a „učitelia úplne stratili svoje banky“. V skutočnosti je všetko jednoduché:

\[\začiatok(zarovnanie) & ((\ľavý[ \začiatok(matica) 1 & 1 \\ 0 & 1 \\\koniec (matica) \vpravo])^(10))=((\ľavý[ \začiatok (matica) 1 & 1 \\ 0 & 1 \\\koniec (matica) \vpravo])^(3))\cdot ((\left[ \začiatok(matica) 1 & 1 \\ 0 & 1 \\\ koniec(matica) \right])^(3))\cdot ((\left[ \begin(matica) 1 & 1 \\ 0 & 1 \\\end(matica) \right])^(3))\ cdot \left[ \begin(matica) 1 & 1 \\ 0 & 1 \\\end(matica) \right]= \\ & =\left(\left[ \begin(matica) 1 & 3 \\ 0 & 2 \začiatok(matica) 1 & 3 \\ 0 & 1 \\\koniec (matica) \vpravo]\cdot \left[ \začiatok (matica) 1 & 1 \\ 0 & 1 \\\koniec (matica) \vpravo ] \right)= \\ & =\left[ \začiatok(matica) 1 & 6 \\ 0 & 1 \\\koniec (matica) \right]\cdot \left[ \začiatok(matica) 1 & 4 \\ 0 & 1 \\\koniec (matica) \vpravo]= \\ & =\vľavo[ ​​\začiatok (matica) 1 & 10 \\ 0 & 1 \\\koniec (matica) \vpravo] \koniec (zarovnanie)\ ]

Všimnite si, že v druhom riadku sme použili násobenie asociativity. V skutočnosti sme to použili v predchádzajúcej úlohe, ale tam to bolo implicitné.

Odpoveď: $\left[ \začiatok(matica) 1 & 10 \\ 0 & 1 \\\koniec (matica) \right]$.

Ako vidíte, nie je nič zložité pozdvihnúť matrix na moc. Posledný príklad možno zhrnúť takto:

\[((\left[ \začiatok(matica) 1 & 1 \\ 0 & 1 \\\koniec (matica) \right])^(n))=\left[ \begin(pole)(*(35) (r)) 1 & n \\ 0 & 1 \\\koniec (pole) \vpravo]\]

Tento fakt sa dá ľahko dokázať matematickou indukciou alebo priamym násobením. Nie vždy je však možné zachytiť takéto vzorce pri zvyšovaní sily. Preto buďte opatrní: často je jednoduchšie a rýchlejšie znásobiť niekoľko matíc „naprázdno“, ako tam hľadať nejaké vzory.

Vo všeobecnosti nehľadajte vyšší zmysel tam, kde žiadny nie je. Nakoniec uvažujme umocnenie väčšej matice – až $\left[ 3\krát 3 \right]$.

Problém 9. Zdvihnite maticu na určený výkon:

\[((\left[ \začiatok(matica) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\koniec (matica) \right])^(3))\]

Riešenie. Nehľadajme vzory. Pracujeme "cez":

\[((\left[ \začiatok(matica) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\koniec (matica) \right])^(3))=(( \left[ \začiatok(matica) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\koniec (matica) \right])^(2))\cdot \left[ \začiatok (matica)0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\koniec (matica) \vpravo]\]

Začnime kvadratúrou tejto matice:

\[\začiatok(zarovnanie) & ((\left[ \začiatok(matica) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\koniec (matica) \right])^( 2))=\left[ \začiatok(matica) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\koniec (matica) \right]\cdot \left[ \začiatok(matica ) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\koniec (matica) \vpravo]= \\ & =\vľavo[ ​​\začiatok(pole)(*(35)(r )) 2 & 1 & 1 \\ 1 & 2 & 1 \\ 1 & 1 & 2 \\\koniec (pole) \vpravo] \koniec (zarovnanie)\]

Teraz to poďme na kocky:

\[\začiatok(zarovnanie) & ((\left[ \začiatok(matica) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\koniec (matica) \right])^( 3))=\left[ \začiatok(pole)(*(35)(r)) 2 & 1 & 1 \\ 1 & 2 & 1 \\ 1 & 1 & 2 \\\koniec (pole) \vpravo] \cdot \left[ \begin(matica) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\end(matica) \right]= \\ & =\left[ \begin( pole)(*(35)(r)) 2 & 3 & 3 \\ 3 & 2 & 3 \\ 3 & 3 & 2 \\\koniec (pole) \vpravo] \koniec (zarovnanie)\]

To je všetko. Problém je vyriešený.

Odpoveď: $\left[ \začiatok(matica) 2 & 3 & 3 \\ 3 & 2 & 3 \\ 3 & 3 & 2 \\\koniec (matica) \right]$.

Ako vidíte, množstvo výpočtov sa zväčšilo, ale význam sa vôbec nezmenil. :)

Táto lekcia môže skončiť. Nabudúce zvážime inverznú operáciu: budeme hľadať pôvodné multiplikátory pomocou existujúceho produktu.

Ako ste už pravdepodobne uhádli, budeme hovoriť o inverznej matici a metódach na jej nájdenie.

Prednáška 6. Paralelné numerické algoritmy na riešenie typických problémov výpočtovej matematiky: maticové násobenie.

Násobenie matice vektorom. Dosiahnite najvyššiu možnú rýchlosť. Použitie paralelizmu strednej úrovne. Organizácia paralelných výpočtov pre p = n. Použitie obmedzenej sady procesorov. Maticové násobenie. Makrooperačná analýza algoritmov riešenia problémov. Organizácia paralelizmu založená na zdieľaní údajov.

Násobenie matice vektorom

Problém násobenia matice vektorom je definovaný vzťahmi

Získanie výsledného vektora teda zahŕňa opakovanie rovnakého typu operácií na násobenie riadkov matice a vektora . Získanie každej takejto operácie zahŕňa násobenie prvkov riadku matice a vektora po prvku a následné sčítanie výsledných produktov. Celkový počet požadovaných skalárnych operácií sa odhaduje podľa hodnoty

Ako vyplýva z akcií vykonaných pri násobení matice a vektora, paralelné metódy riešenia problému možno získať na základe paralelných sčítacích algoritmov (pozri odsek 4.1). V tejto časti bude analýza metód paralelizácie doplnená o úvahy o organizácii paralelných výpočtov v závislosti od počtu procesorov, ktoré sú k dispozícii na použitie. Okrem toho sa na príklade problému násobenia matice vektorom upozorní na potrebu zvoliť najvhodnejšiu topológiu výpočtového systému (existujúce komunikačné kanály medzi procesormi), aby sa znížili náklady na organizáciu interakcie medzi procesormi. .

Dosiahnutie najrýchlejšieho možného výkonu ()

Urobme analýzu informačných závislostí v algoritme násobenia matice-vektor, aby sme vybrali možné spôsoby paralelizácie. Ako vidíte, operácie násobenia jednotlivých riadkov matice vektorom vykonávané počas výpočtov sú nezávislé a možno ich vykonávať paralelne;



Násobenie každého riadku vektorom zahŕňa nezávislé násobenia prvkov a môže sa vykonávať aj paralelne;

Sčítanie výsledných produktov v každej operácii násobenia riadku matice vektorom možno vykonať pomocou jedného z predtým uvažovaných variantov súčtového algoritmu (sériový algoritmus, konvenčné a modifikované kaskádové schémy).

Maximálny požadovaný počet procesorov je teda určený hodnotou

Použitie takého počtu procesorov možno znázorniť nasledovne. Zostava procesorov je rozdelená do skupín

,

z ktorých každý predstavuje množinu procesorov na vykonávanie operácie násobenia jedného riadku matice vektorom. Na začiatku výpočtov dostane každý procesor zo skupiny prvok riadku matice a zodpovedajúci prvok vektora. Ďalej každý procesor vykoná operáciu násobenia. Následne sa vykonajú výpočty podľa kaskádovej schémy súčtu. Pre ilustráciu na obr. 6.1 je znázornená výpočtová schéma pre procesory skupiny s rozmerom matice.

Ryža. 6.1. Výpočtová schéma na násobenie riadku matice vektorom

Čas vykonávania paralelného algoritmu pri použití procesorov je určený časom vykonávania operácie paralelného násobenia a časom vykonávania kaskádovej schémy

V dôsledku toho sú ukazovatele výkonnosti algoritmu určené nasledujúcimi vzťahmi:

Pre uvažovaný problém násobenia matice vektorom sú najvhodnejšie topológie štruktúry, ktoré poskytujú rýchly prenos dát (cesty jednotkovej dĺžky) v kaskádovej sumačnej schéme (pozri obr. 4.5). Takéto topológie sú štruktúrou s úplným systémom spojení ( kompletný graf) a hyperkocka. Iné topológie vedú k predĺženiu komunikačného času v dôsledku dlhších dátových ciest. Takže s lineárnym usporiadaním procesorov so systémom spojení iba s najbližšími susedmi vľavo a vpravo ( pravítko alebo prsteň) pre kaskádovú schému je dĺžka prenosovej cesty každého prijatého čiastkového súčtu v iterácii , , rovná . Ak pripustíme, že prenos údajov po dráhe dĺžky v topológiách s lineárnou štruktúrou vyžaduje vykonanie operácií prenosu údajov, celkový počet paralelných operácií (celková dĺžka ciest) prenosu údajov je určený hodnotou

(okrem dátových prenosov pre bootstrapping procesory).

Aplikácia výpočtového systému s pravouhlou topológiou dvojrozmerná mriežka veľkosť vedie k jednoduchej a vizuálnej interpretácii vykonaných výpočtov (štruktúra siete zodpovedá štruktúre spracovávaných dát). Pre takúto topológiu je najvýhodnejšie umiestniť riadky matice pozdĺž vodorovných línií mriežky; v tomto prípade musia byť prvky vektora odoslané pozdĺž vertikál výpočtového systému. Vykonávanie výpočtov s týmto usporiadaním údajov sa môže vykonávať paralelne pozdĺž čiar mriežky; v dôsledku toho je celkový počet dátových prenosov rovnaký ako výsledky pre ruler().

Komunikačné akcie vykonávané pri riešení problému sú prenos dát medzi pármi procesorov MCS. Podrobná analýza trvania vykonávania takýchto operácií je vykonaná v bode 3.3.

4. Odporúčania pre implementáciu paralelného algoritmu. Pri implementácii paralelného algoritmu je vhodné vyčleniť počiatočnú fázu načítania použitých procesorov počiatočnými údajmi. Takáto inicializácia sa najjednoduchšie poskytuje pre topológiu výpočtového systému s topológiou vo forme kompletný graf(načítanie je zabezpečené jednou operáciou paralelného prenosu dát). Pri organizovaní súboru spracovateľov vo formulári hyperkocka Môže byť užitočné mať dvojúrovňové riadenie bootstrap procesu, v ktorom centrálny riadiaci procesor distribuuje maticové a vektorové riadky do riadiacich procesorov skupín procesorov , ktoré zasa distribuujú prvky matice a vektorových riadkov k výkonným procesorom. Pre topológie vo forme vládcovia alebo krúžky vyžadujú sa sekvenčné operácie prenosu údajov so sekvenčne klesajúcim množstvom údajov prenášaných z prvkov.

Použitie paralelnosti strednej úrovne ()

1. Výber metódy paralelného výpočtu. So znížením dostupného počtu použitých procesorov () sa zvyčajná kaskádová sumačná schéma pri vykonávaní operácií násobenia riadkov matice vektorom stáva nepoužiteľnou. Pre jednoduchosť prezentácie materiálu predpokladáme a používame upravenú kaskádovú schému. Počiatočné zaťaženie každého procesora sa v tomto prípade zvyšuje a procesor je zaťažený () časťami riadkov matice a vektora . Čas vykonania operácie násobenia matice vektorom možno odhadnúť ako hodnotu

Pri použití počtu procesorov potrebných na implementáciu upravenej kaskádovej schémy, t.j. pri , tento výraz udáva odhad času vykonania (na ).

S počtom procesorov, kedy sa čas vykonávania algoritmu odhaduje na , možno navrhnúť novú schému paralelného vykonávania výpočtov, v ktorej sa pre každú iteráciu použije kaskádové sčítanie. neprekrývajúce sa sady procesorov. S týmto prístupom je dostupný počet procesorov dostatočný na implementáciu iba jednej operácie násobenia riadku matice a vektora. Okrem toho pri vykonávaní ďalšej iterácie kaskádového súčtu sú procesory zodpovedné za vykonanie všetkých predchádzajúcich iterácií voľní. Táto nevýhoda navrhovaného prístupu sa však môže zmeniť na výhodu použitím nečinných procesorov na spracovanie ďalších riadkov matice. V dôsledku toho je možné vytvoriť nasledujúcu schému dopravník vykonať maticové a vektorové násobenie:

Sada procesorov je rozdelená do neprekrývajúcich sa skupín procesorov

,

skupina , pozostáva z procesorov a používa sa na iteráciu kaskádového algoritmu (skupina sa používa na implementáciu násobenia po prvkoch); celkový počet procesorov;

Inicializácia výpočtu spočíva v načítaní procesorov skupiny po jednotlivých prvkoch hodnotami 1 riadku matice a vektora; po bootstrape sa vykoná paralelná operácia násobenia po prvkoch a následná implementácia konvenčného kaskádového sčítacieho obvodu;

Pri vykonávaní výpočtov sa vždy po dokončení operácie násobenia po prvkoch do procesorov skupiny načítajú prvky ďalšieho riadku matice a spustí sa proces výpočtu pre novonačítané údaje.

Výsledkom aplikácie opísaného algoritmu je, že množstvo procesorov implementuje potrubie na vykonávanie operácie násobenia riadku matice vektorom. Na takomto potrubí môže byť niekoľko jednotlivých radov matrice súčasne v rôznych štádiách spracovania. Takže napríklad po vynásobení prvkov prvého riadka a vektora po prvkoch vykonajú skupinové procesory prvú iteráciu kaskádového algoritmu pre prvý riadok matice a skupinové procesory vykonajú prvok - násobenie hodnôt druhého riadku matice atď. Pre ilustráciu na obr. 6.2 ukazuje situáciu výpočtového procesu po 2 iteráciách potrubia pri .

Ryža. 6.2. Stav potrubia pre operáciu násobenia riadku matice vektorom po vykonaní 2 iterácií

2. Hodnotenie ukazovateľov výkonnosti algoritmu. Násobenie prvého riadku vektorom podľa kaskádovej schémy sa dokončí ako obvykle po vykonaní () paralelných operácií. Pre ostatné riadky sa v súlade so schémou usporiadania výpočtov výsledky násobenia každého nasledujúceho riadku objavia po dokončení každej nasledujúcej iterácie potrubia. Výsledkom je, že celkový čas vykonávania operácie násobenia maticového vektora možno vyjadriť ako

Tento odhad je o niečo dlhší ako čas vykonania paralelného algoritmu opísaného v predchádzajúcom odseku (), avšak novo navrhovaná metóda vyžaduje prenos menšieho množstva údajov (vektor sa odošle iba raz). Okrem toho použitie schémy vedenia vedie k skoršiemu výskytu niektorých výsledkov výpočtov (čo môže byť užitočné v mnohých situáciách spracovania údajov).

V dôsledku toho sú ukazovatele výkonnosti algoritmu určené nasledujúcimi vzťahmi:

3. Voľba topológie počítačového systému. Vhodná topológia výpočtového systému je úplne určená výpočtovou schémou - toto je kompletné binárny strom výška . Počet dátových prenosov s takouto topológiou siete je určený celkovým počtom iterácií vykonaných pipeline, t.j.

Inicializácia výpočtov začína od listov stromu, výsledky súčtu sú akumulované v koreňovom procesore.

Analýza zložitosti komunikačných činností vykonávaných pre počítačové systémy s inými topológiami medziprocesorovej komunikácie sa má vykonávať ako samostatná úloha (pozri tiež časť 3.4).

Organizácia paralelných výpočtov s

1. Výber metódy paralelného výpočtu. Pri použití procesorov na násobenie matice vektorom je možné použiť paralelný algoritmus násobenia riadok po riadku, o ktorom sme už hovorili v príručke, v ktorom sú riadky matice rozdelené medzi procesormi riadok po riadku a každý procesor implementuje operáciu. vynásobením ľubovoľného jednotlivého riadku matice vektorom . Ďalším možným spôsobom, ako organizovať paralelné výpočty, môže byť budovanie pipeline schéma operácie násobenia riadku matice vektorom(bodový súčin vektorov) usporiadaním všetkých dostupných procesorov v lineárnom poradí ( vládcovia).

Takáto schéma výpočtu môže byť definovaná nasledovne. Predstavme si množinu procesorov ako lineárnu postupnosť (pozri obr. 4.7):

každý procesor sa používa na násobenie prvkov stĺpca matice a prvku vektora. Vykonávanie výpočtov na každom procesore pozostáva z nasledujúcich krokov:

Vyžaduje sa ďalší prvok stĺpca matice;

Prvky a sú znásobené;

Vyžaduje sa výsledok výpočtov predchádzajúceho procesora;

Pridávajú sa hodnoty;

Výsledok sa odošle ďalšiemu spracovateľovi.

Ryža. 6.3. Stav lineárneho potrubia pre operáciu násobenia riadku matice vektorom po vykonaní dvoch iterácií

Pri inicializácii opísanej schémy je potrebné vykonať niekoľko ďalších akcií:

Počas prvej iterácie si každý procesor dodatočne vyžiada prvok vektora;

Na synchronizáciu výpočtov (počas vykonávania ďalšej iterácie obvodu sa vyžaduje výsledok výpočtu predchádzajúceho procesora) v inicializačnej fáze procesor , , vykoná () čakaciu slučku.

Okrem toho, pre jednotnosť opísanej schémy pre prvý procesor, ktorý nemá žiadny predchádzajúci procesor, je vhodné zaviesť prázdnu operáciu sčítania ( ).

Pre ilustráciu na obr. 6.3 ukazuje stav procesu výpočtu po druhej iterácii potrubia pri .

2. Hodnotenie ukazovateľov výkonnosti algoritmu. Násobenie prvého riadku vektorom podľa opísanej schémy potrubia bude dokončené po vykonaní () paralelných operácií. Výsledok násobenia nasledujúcich riadkov nastane po dokončení každej ďalšej iterácie potrubia (pripomeňme, že iterácia každého procesora zahŕňa vykonanie operácií násobenia a sčítania). Výsledkom je, že celkový čas vykonania operácie násobenia maticového vektora možno vyjadriť ako:

Tento odhad je tiež väčší ako minimálny možný čas vykonania paralelného algoritmu pre . Užitočnosť použitia potrubnej výpočtovej schémy je, ako bolo uvedené v predchádzajúcom odseku, v znížení množstva prenášaných údajov a v skoršom výskyte časti výsledkov výpočtu.

Výkonnostné ukazovatele tejto výpočtovej schémy sú určené vzťahmi:

, ,

3. Voľba topológie počítačového systému. Požadovaná topológia výpočtového systému pre implementáciu opísaného algoritmu je jednoznačne určená navrhovanou výpočtovou schémou - ide o lineárne usporiadanú množinu procesorov ( pravítko).

Používanie obmedzenej sady procesorov ()

1. Výber metódy paralelného výpočtu. Keď sa počet procesorov zníži na hodnotu, môže sa získať paralelná výpočtová schéma pre násobenie maticového vektora ako výsledok prispôsobenia algoritmu násobenia riadok po riadku. V tomto prípade kaskádová schéma sčítania výsledkov elementárneho násobenia degeneruje a operácia násobenia riadku matice vektorom sa úplne vykonáva na jedinom procesore. Výpočtovú schému získanú týmto prístupom možno špecifikovať takto:

Vektorové a maticové riadky sa posielajú každému z dostupných procesorov;

Operácia násobenia riadkov matice vektorom sa vykonáva pomocou obvyklého sekvenčného algoritmu.

Je potrebné poznamenať, že veľkosť matice nemusí byť násobkom počtu procesorov, a teda riadky matice nemožno medzi procesory rozdeliť rovnomerne. V týchto situáciách je možné odchýliť sa od požiadavky rovnomernosti zaťaženia procesora a v záujme získania jednoduchšej výpočtovej schémy akceptovať pravidlo, že dáta sú na procesory umiestňované len riadok po riadku (t.j. prvky jedného riadku matice nemožno zdieľať medzi viacerými spracovateľmi). Iný počet riadkov má za následok rôzne výpočtové zaťaženie procesorov; teda dokončenie výpočtov (celkové trvanie riešenia problému) bude určené prevádzkovým časom najviac zaťaženého procesora (v tomto prípade môžu byť niektoré procesory nečinné z dôvodu vyčerpania svojho podielu na výpočtoch). Nerovnomerné zaťaženie procesorov znižuje efektivitu používania MCS a ako výsledok zváženia tohto príkladu môžeme konštatovať, že problém s vyvážením

3. Voľba topológie počítačového systému. V súlade s charakterom medziprocesorových interakcií vykonávaných v navrhovanej výpočtovej schéme je organizácia procesorov vo forme hviezdy(pozri obr. 1.1). Riadiaci procesor takejto topológie sa môže použiť na načítanie výpočtových procesorov počiatočnými dátami a na príjem výsledkov vykonaných výpočtov.

Maticové násobenie

Problém násobenia matice maticou je definovaný vzťahmi

.

(pre jednoduchosť budeme predpokladať, že vynásobené matice a sú štvorcové a majú poradie).

Analýzu možných spôsobov paralelného vykonávania tejto úlohy je možné vykonať analogicky s uvažovaním problému násobenia matice vektorom. Ponechaním takejto analýzy na nezávislú štúdiu ukážeme na príklade problému násobenia matíc použitie niekoľkých všeobecných prístupov, ktoré nám umožňujú vytvárať paralelné metódy na riešenie zložitých problémov.

Definícia 1

Súčin matíc (C=AB) je operácia len pre konzistentné matice A a B, v ktorých sa počet stĺpcov matice A rovná počtu riadkov matice B:

C ⏟ m × n = A ⏟ m × p × B ⏟ p × n

Príklad 1

Údaje matice:

  • A = a (i j) s rozmermi m × n;
  • B = b (i j) p × n

Matica C, ktorej prvky c i j sa vypočítajú podľa nasledujúceho vzorca:

c i j = a i 1 × b 1 j + a i 2 × b 2 j +. . . + a i p × b p j , i = 1 , . . . m, j = 1,. . . m

Príklad 2

Vypočítajme súčin AB=BA:

A = 1 2 1 0 1 2, B = 1 0 0 1 1 1

Riešenie pomocou pravidla násobenia matice:

A ⏟ 2 × 3 × B ⏟ 3 × 2 = 1 2 1 0 1 2 × 1 0 0 1 1 1 = 1 × 1 + 2 × 0 + 1 × 1 1 × 0 + 2 × 1 + 1 × 1 0 × 1 + 1 × 0 + 2 × 1 0 × 0 + 1 × 1 + 2 × 1 = = 2 3 2 3 ⏟ 2 × 2

B ⏟ 3 × 2 × A ⏟ 2 × 3 = 1 0 0 1 1 1 × 1 2 1 0 1 2 = 1 × 1 + 0 × 0 1 × 2 + 0 × 1 1 × 1 + 0 × 2 0 × 1 + 1 × 0 0 × 2 + 1 × 1 0 × 1 + 1 × 2 1 × 1 + 1 × 0 1 × 2 + 1 × 1 1 × 1 + 1 × 2 = 1 2 1 0 1 2 1 3 3 ⏟ 3×3

Súčin A B a B A sú nájdené, ale ide o matice rôznych veľkostí: A B sa nerovná B A.

Vlastnosti násobenia matíc

Vlastnosti násobenia matice:

  • (A B) C = A (B C) - asociativita násobenia matíc;
  • A (B + C) \u003d A B + A C - distribučné násobenie;
  • (A + B) C \u003d A C + B C - distributivita násobenia;
  • λ (A B) = (λ A) B
Príklad 1

Skontrolujte vlastnosť č. 1: (A B) C = A (B C):

(A × B) × A = 1 2 3 4 × 5 6 7 8 × 1 0 0 2 = 19 22 43 50 × 1 0 0 2 = 19 44 43 100,

A (B × C) = 1 2 3 4 × 5 6 7 8 1 0 0 2 = 1 2 3 4 × 5 12 7 16 = 19 44 43 100 .

Príklad 2

Skontrolujeme vlastnosť č. 2: A (B + C) \u003d A B + A C:

A × (B + C) = 1 2 3 4 × 5 6 7 8 + 1 0 0 2 = 1 2 3 4 × 6 6 7 10 = 20 26 46 58,

A B + A C \u003d 1 2 3 4 × 5 6 7 8 + 1 2 3 4 × 1 0 0 2 \u003d 19 22 43 50 + 1 4 3 8 \u003d 20 26 46 58 .

Súčin troch matíc

Súčin troch matíc A B C sa vypočíta 2 spôsobmi:

  • nájdite A B a vynásobte C: (A B) C;
  • alebo nájdite najprv B C a potom vynásobte A (B C) .
Príklad 3

Vynásobte matice 2 spôsobmi:

4 3 7 5 × – 28 93 38 – 126 × 7 3 2 1

Akčný algoritmus:

  • nájdite súčin 2 matíc;
  • potom znova nájdite súčin 2 matíc.

jeden). A B \u003d 4 3 7 5 × - 28 93 38 - 126 \u003d 4 (- 28) + 3 × 38 4 × 93 + 3 (- 126) 7 (- 28) + 5 × 38 7 × 93 + 5 (- 126 ) = 2 - 6 - 6 21

2). A B C = (A B) C = 2 - 6 - 6 21 7 3 2 1 = 2 × 7 - 6 × 2 2 × 3 - 6 × 1 - 6 × 7 + 21 × 2 - 6 × 3 + 21 × 1 = 2 0 0 3 .

Používame vzorec A B C \u003d (A B) C:

jeden). B C = - 28 93 38 - 126 7 3 2 1 = - 28 × 7 + 93 × 2 - 28 × 3 + 93 × 1 38 × 7 - 126 × 2 38 × 3 - 126 × 1 = - 10 9 14 - 12

2). A B C \u003d (A B) C \u003d 7 3 2 1 - 10 9 14 - 12 \u003d 4 (- 10) + 3 × 14 4 × 9 + 3 (- 12) 7 (- 10) + 5 × 14 7 × 9 + 5 (- 12) = 2 0 0 3

Odpoveď: 4 3 7 5 - 28 93 38 - 126 7 3 2 1 = 2 0 0 3

Násobenie matice číslom

Definícia 2

Súčin matice A číslom k je matica B \u003d A k rovnakej veľkosti, ktorá sa získa z originálu vynásobením daným počtom všetkých jej prvkov:

b i , j = k × a i , j

Vlastnosti násobenia matice číslom:

  • 1 × A = A
  • 0 × A = nulová matica
  • k(A + B) = kA + kB
  • (k + n) A = kA + nA
  • (k×n)×A = k(n×A)
Príklad 4

Nájdite súčin matice A \u003d 4 2 9 0 x 5.

5 A = 5 4 2 9 0 5 × 4 5 × 2 5 × 9 5 × 0 = 20 10 45 0

Násobenie matice vektorom

Definícia 3

Ak chcete nájsť súčin matice a vektora, musíte násobiť podľa pravidla riadok po stĺpci:

  • ak vynásobíte maticu stĺpcovým vektorom, počet stĺpcov v matici sa musí zhodovať s počtom riadkov v stĺpcovom vektore;
  • výsledkom násobenia stĺpcového vektora je iba stĺpcový vektor:

A B = a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋯ ⋯ ⋯ ⋯ a m 1 a m 2 ⋯ a m n b 1 b 2 ⋯ b 1 n = a 11 × 2 + 1 + 1 n × b n a 21 × b 1 + a 22 × b 2 + ⋯ + a 2 n × b n ⋯ ⋯ ⋯ ⋯ a m 1 × b 1 + a m 2 × b 2 + ⋯ + a m n × b n = c 1 c 2 1 m

  • ak vynásobíte maticu riadkovým vektorom, potom matica, ktorá sa má vynásobiť, musí byť výlučne stĺpcový vektor a počet stĺpcov sa musí zhodovať s počtom stĺpcov v riadkovom vektore:

A B = a a ⋯ a b b ⋯ b = a 1 × b 1 a 1 × b 2 ⋯ a 1 × b n a 2 × b 1 a 2 × b 2 ⋯ a 2 × b n ⋯ ⋯ ⋯ ⋯ a n × b 1 a n × b a n × b n = c 11 c 12 ⋯ c 1 n c 21 c 22 ⋯ c 2 n ⋯ ⋯ ⋯ ⋯ c n 1 c n 2 ⋯ c n n

Príklad 5

Nájdite súčin matice A a stĺpcového vektora B:

A B \u003d 2 4 0 - 2 1 3 - 1 0 1 1 2 - 1 \u003d 2 × 1 + 4 × 2 + 0 × (- 1) - 2 × 1 + 1 × 2 + 3 × (- 1) - 1 × 1 + 0 × 2 + 1 × (- 1) = 2 + 8 + 0 - 2 + 2 - 3 - 1 + 0 - 1 = 10 - 3 - 2

Príklad 6

Nájdite súčin matice A a riadkového vektora B:

A \u003d 3 2 0 - 1, B \u003d - 1 1 0 2

A B = 3 2 0 1 × - 1 1 0 2 = 3 × (- 1) 3 × 1 3 × 0 3 × 2 2 × (- 1) 2 × 1 2 × 0 2 × 2 0 × (- 1) 0 × 1 0 × 0 0 × 2 1 × (- 1) 1 × 1 1 × 0 1 × 2 = - 3 3 0 6 - 2 2 0 4 0 0 0 0 - 1 1 0 2

Odpoveď: A B \u003d - 3 3 0 6 - 2 2 0 4 0 0 0 0 - 1 1 0 2

Ak si všimnete chybu v texte, zvýraznite ju a stlačte Ctrl+Enter


Každý vektor možno zobraziť ako jednostĺpcovú alebo jednoriadkovú maticu. Jednostĺpcovú maticu budeme nazývať stĺpcový vektor a jednoriadkovú maticu budeme nazývať riadkový vektor.

Ak A je matica veľkosti m*n, potom stĺpcový vektor b má veľkosť n a riadkový vektor b má veľkosť m.

Aby sme teda maticu vynásobili vektorom, musíme s vektorom zaobchádzať ako so stĺpcovým vektorom. Pri násobení vektora maticou sa s ním musí zaobchádzať ako s riadkovým vektorom.

multiplikačná matica

na komplexný vektor

Dostaneme výsledok

Ako vidíte, pri nezmenenej dimenzii vektora môžeme mať dve riešenia.

Chcel by som upozorniť na skutočnosť, že matica v prvej a druhej verzii je napriek rovnakým hodnotám úplne odlišná (majú iné rozmery)

V prvom prípade sa vektor považuje za stĺpec a potom je to potrebné vynásobte maticu vektorom, a v druhom prípade máme riadkový vektor a potom máme súčin vektora a matice.

Tento robot tiež násobí vektory a matice, ktoré majú komplexné hodnoty. Založené na úplnejšej kalkulačke Násobenie matíc s komplexnými hodnotami online

Vlastnosti násobenia maticou vektorom

Matrix

Vektorový stĺpec

Riadkový vektor

Ľubovoľné číslo

1. Súčin matice súčtom stĺpcových vektorov sa rovná súčtu súčinov matice každým z vektorov.

2. Súčin súčtu riadkových vektorov maticou sa rovná súčtu súčinov vektorov maticou

3. Spoločný faktor vektora môže byť vyňatý zo súčinu matice vektorom / vektora maticou

4. Súčin riadkového vektora súčinom maticového a stĺpcového vektora je ekvivalentný súčinu súčinu riadkového vektora súčinom matice a stĺpcového vektora.