echo on % ======================== % TEORIE MATIC - CVIČENÍ 2 % ======================== % 1. OPERACE PROVÁDĚNÉ PO SLOŽKÁCH % 2. UNÁRNÍ MATICOVÉ OPERACE % 3. MATICOVÉ NÁSOBENÍ % % Na příkladech budeme nyní ilustrovat všechny základní % maticové operace: % Nejprve náhodně vytvoříme matice rozměru m x n, které budou % dále užívány v ukázkách % (prvky jsou náhodně vybraná celá čísla v intervalu -5 až 5): pause; format compact m=3; n=4; A = round(10*rand(m,n))-5 B = round(10*rand(m,n))-5 C = round(10*rand(m))-5 % čtvercová matice řádu m % skaláry a = 2 % skaláry b = 3 pause; %------------------------------------------------------------- % 1. OPERACE PROVÁDĚNÉ PO SLOŽKÁCH % ============================= % 1.1 Sečítání (odečítání) % -------------------- % Pro matice téhož rozměru: X = A + B % kde X(r,s) = A(r,s) + B(r,s) Y = A - B % kde Y(r,s) = A(r,s) - B(r,s) pause; % Pro matici a skalár: Y = a + B % kde X(r,s) = a + B(r,s) Y = a - B % kde X(r,s) = a - B(r,s) Z = A + b % kde Z(r,s) = A(r,s) + b Z = A - b % kde Z(r,s) = A(r,s) - b pause; %------------------------------------------------------------- % 1.2 Násobení % -------- % Pro matice téhož rozměru: X = A .* B % kde X(r,s) = A(r,s) * B(r,s): tzv. Hadamardův součin pause; % Pro matici a skalár: Y = a .* B % nebo Y = a * B % kde Y(r,s) = a * B(r,s) Z = A .* b % nebo Z = A * b % kde Z(r,s) = A(r,s) * b pause; %------------------------------------------------------------- % 1.3 Dělení % ------ % POZOR: a/b=b\a je pro skaláry zápis téhož zlomku (a=čitatel, b=jmenovatel) % Pro matice téhož rozměru: X = A ./ B % nebo X = B .\ A % kde X(r,s) = A(r,s)/B(r,s) pause; % Pro matici a skalár: Y = a ./ B % nebo Y = B .\ a % kde Y(r,s) = a/B(r,s) pause; Z = A ./ b % nebo Z = b .\ A % kde Z(r,s) = A(r,s)/b pause; %------------------------------------------------------------- % 1.4 Umocňování % ---------- % Pro matice téhož rozměru: X = A .^ B % kde X(r,s) = A(r,s)^B(r,s) pause; % Pro matici a skalár: Y = a .^ B % kde Y(r,s) = a^B(r,s) Z = A .^ b % kde Z(r,s) = A(r,s)^b pause; %------------------------------------------------------------- % 2. UNÁRNÍ MATICOVÉ OPERACE % ======================= % 2.1 Transpozice matice % ------------------ X = A.' size(X) % X vznikne z A záměnou řádků a sloupců, tj. má rozměr n x m % Pro každé r,s platí A(r,s)=X(s,r), % například pro: r=2,s=3 % máme stejné prvky: A(r,s), X(s,r) pause; X.' % je opět původní matice A (A.').' % totéž jinak pause; %------------------------------------------------------------- % a) Symetrická matice S je čtvercová matice se stejnými % řádky i sloupci: S(r,s)=S(s,r) neboli S=S.' % b) Antisymetrická matice T je čtvercová matice, kde řádky a sloupce mají % opačné znaménko: T(r,s)=-T(s,r) neboli T=-T.' % Všimněte si (anti)symetrie vzhledem k hlavní diagonále) S = C+C.' S.' % zřejmě S=S.' pause; T = C-C.' T.' % zřejmě T=-T.' % Každou čtvercovou matici lze rozložit na její symetrickou a % antisymetrickou část: Cs = (C + C.')./2 Ca = (C - C.')./2 Ca + Cs % platí C=Cs+Ca pause; %------------------------------------------------------------- % 2.2 Hermitovská transpozice % ----------------------- % X vznikne z K transpozicí a komplexním sdružením všech prvků % X se také nazývá hermitovsky sdružená k A K = A + i*B % komplexní matice m x n: Re(K)=A, Im(K)=B po prvcích X = K' size(X) % Pro reálné matice transpzice = hermitovská transpozice A' A.' % Pro každé r,s platí A(r,s)=conj(X(s,r)) % například pro: r=2,s=3 % máme komplexně sdružené prvky: K(r,s), X(s,r) X' % je opět původní matice A (K')' % totéž jinak pause; %------------------------------------------------------------- % a) Hermitovsky symetrická matice S je čtvercová matice, kde % řádky a sloupce jsou komplexně sdružené: % S(r,s)=conj(S(s,r)) neboli S=S' % b) Hermitovsky antisymetrická matice T je čtvercová matice, kde % řádky a sloupce jsou komplexně sdružené a mají opačné znaménko: % T(r,s)=-conj(T(s,r)) neboli T=-T' % Všimněte si (anti)symetrie vzhledem k hlavní diagonále Kc = K(:,1:m) % Vybereme z K ctvercovou submatici m x m (= 3 x 3) S = Kc+Kc' S' % zřejmě S=S' pause; T = Kc-Kc' T' % zřejmě T=-T' % Každou (komplexní) čtvercovou matici lze rozložit na její (hermitovsky) % symetrickou a antisymetrickou část: Ks = (Kc + Kc')./2 Ka = (Kc - Kc')./2 Ka + Ks % platí Kc=Ks+Ka pause; %------------------------------------------------------------- % 2.3 Operátor vec A % -------------- % Tento operátor transformuje matici A na sloupcový vektor % obsahující pod sebou sloupce matice brane zleva doprava % a naskládané odshora dolů. A(:) pause; %------------------------------------------------------------- % 3. MATICOVÉ NÁSOBENÍ % ================= % Vytvořme matice užívané v KaSk, Př.7.3, s.65 A=[2,1,-1;0,-2,3] [m,n]=size(A) B=[3,1,0,1;0,1,2,-1;2,1,0,-2] [n,p]=size(B) pause; % 3.1 Definice a interpretace % ----------------------- C=A*B % kde C(r,s)=součet_k A(r,k)*B(k,s) % Pro pevný sloupec s a každý řadkový index r dostáváme: % C(:,s)=součet_k A(:,k)*B(k,s) % Maticový součin tedy můžeme interpretovat takto: % s-tý sloupec matice C je lineární kombinací sloupců matice A % pomocí koeficientů z s-tého sloupce matice B. % například pro s=2 A(:,1)*B(1,s)+A(:,2)*B(2,s)+A(:,3)*B(3,s) % je 2. sloupce C: C(:,s) pause; % Naopak pro pevný řádek r a každý sloupcový index s dostáváme: % C(r,:)=součet_k A(r,k)*B(k,:) % Maticový součin tedy můžeme duálně interpretovat také takto: % r-tý řádek matice C je lineární kombinací řádků matice B % pomocí koeficientů z r-tého řádku matice A. % například pro r=1 A(r,1)*B(1,:)+A(r,2)*B(2,:)+A(r,3)*B(3,:) % je 1. řádek C: C(r,:) pause; %------------------------------------------------------------- % Provedeme-li transpozici, pak role řádků a sloupců se zamění. % Platí tedy rovnost C.' = B.'*A.' neboli % transpozice součinu matic=součin transponovaných matic v % opačném pořadí: C.' B.'*A.' % Stejnou vlastnost má hermitovská transpozice, jestliže % navíc uvážíme, že komplexně sdružené číslo % k součtu součinů nějakých komplexních čísel % je součet součinů čísel k nim komplexně sdružených. % například pro: Ck = (A+i)*(B-i) % jsou identické matice Ck' % a (B-i)'*(A+i)' pause; % Součin je asociativní a distributivní zleva i zprava % (viz KaSk: V7.3, s.66) % Není ale obecně komutativní ani když operace dává smysl % což nastane např. pro čtvercové matice: % Uvažme čtvercové matice 2x2 vybrané z A,B: X=A(:,1:2) B(1:2,1:2) A(:,1:2)*B(1:2,1:2) B(1:2,1:2)*A(:,1:2) %------------------------------------------------------------- % 3.2 Speciální případy násobení matic % -------------------------------- % a) Násobení matice sloupcovým vektorem zprava % x=(1:3).' y=A*x % Odpovídá lineární kombinaci sloupců A: A(:,1)*x(1)+A(:,2)*x(2)+A(:,3)*x(3) % A tak definuje lineární operátor R^n -> R^m pause; %------------------------------------------------------------- % b) Násobení matice řádkovým vektorem zleva % x=(1:2) y=x*A % Odpovídá lineární kombinaci řádků A: x(1)*A(1,:)+x(2)*A(2,:) % A tak definuje také lineární operátor R^m -> R^n, % který vzhledem k vlastnosti transpozice můžeme % zapsat pomocí transponované matice: y=A.'*x.' % Operátor určený maticí A.' se nazývá adjungovaný k A % nad polem reálných čísel R. % Podobně operátor C^m -> C^n určený maticí A' se nazývá % adjungovaný k A nad polem komplexních čísel C. % % c) Součin sloupcového a řádkového vektoru % x=(1:3).' y=(1:4) M=x*y % je matice 3 x 4 s prvky M(r,s)=x(r)*x(s) pause; %------------------------------------------------------------- % d) Součin řádkového a sloupcového vektoru téže délky % x=(1:3).' y=(4:6).' m= y.'*x % je skalár x(1)*y(1)+x(2)*y(2)+x(3)*y(3) % nazývaný skalární součin vektorů x a y nad polem R, píšeme m= pause; % Skalární součin x a y nad polem C spočteme obdobně: x= (1:3).' y= i.*(4:6).' m= y'*x % je skalár x(1)*conj(y(1))+x(2)*conj(y(2))+x(3)*conj(y(3)) % V obou případech lze skalární součin spočíst přímo příkazem 'dot': dot(y,x) pause; %------------------------------------------------------------- % e) Vyjádření prvků součinu matic pomocí skalárního součinu: % % Dle části e) platí pro C=A'*B: % C(r,s)=A(:,r)'*B(:,s)= % (r,s)-tý prvek součinu matic = % = skalární součin s-ho sloupce matice B a r-ho sloupce matice A. % Například pro A = (A+i)' B = B+2*i C = A'*B r = 2, s= 3 % je C(r,s) % totéž jako A(:,r)'*B(:,s) % nebo jako dot(A(:,r),B(:,s)) % = pause; %------------------------------------------------------------- disp('KONEC')