echo on % ======================== % TEORIE MATIC - CVIČENÍ 3 % ======================== % 4. MATICE JAKO LINEÁRNÍ OPERÁTOR A HODNOST MATICE % 5. NĚKTERÉ SPECIÁLNÍ MATICE A JEJICH HODNOSTI % format compact p=2; m=3; n=4; T = round(10*rand(m,n))-5 U = round(10*rand(p,m))-5 a = 3 b = 2 x = (1:n).' y = 10*x % x,y jsou dva sloupcové vektory z R^n pause; %------------------------------------------------------------- % 4. MATICE JAKO LINEÁRNÍ OPERÁTOR A HODNOST MATICE % ============================================== % 4.1 Matice jako lineární operátor % ----------------------------- % Zobrazení x->T*x definuje lineární operátor R^n->R^m (resp. C^n->C^m), % přičemž součinu matic odpovídá složení příslušných operátorů. % (viz KaSk: V7.3, s.66). % Na příkladu ověříme vlastnosti (1) a (2) z věty 3.27: % (1) T*(x+y) = T*x + T*y T*(x+y) T*x + T*y % oba výsledky jsou stejné % (2) T*(a*x) = a*(T*x) T*(a*x) a*(T*x) % oba výsledky jsou stejné pause; %------------------------------------------------------------- % 4.2 SLOŽENÍ DVOU OPERÁTORŮ je určeno součinem matic: (U*T)*x U*(T*x) pause; %------------------------------------------------------------- % Sloupce matice T představují souřadnicové vyjádření (def. 3.35) % operátoru T v přirozených bázích: totiž složky každého vektoru jsou % přímo souřadnice v příslušné přirozené bázi. % Jednotková matice řádu n je čtvercová matice, jejíž sloupce tvoří % přirozenou bázi v R^n, resp. v C^n. E = eye(n) T*E % je stejná matice jako T: T pause; % neboli pro každé k=1,...,n platí for k=1:n k, T*E(:,k) % obraz k-ho prvku báze E je roven k-mu sloupci T, T(:,k) % jeho složky jsou souřadnice v přirozené bázi R^m (C^m) pause; % POKRAČUJTE V PROCHÁZENÍ SLOUPCŮ MATICE end pause; %------------------------------------------------------------- % 4.3 Hodnost matice % -------------- % Sloupcová hodnost matice T: % = dimenze podprostoru v R^m (C^m) generovaného sloupci matice T % (všechny součiny T*x), neboli % = dimenze prostoru R(T), nebo s uvážením 3.20 % = počet prvků maximální nezávislé podmnožiny sloupců % Řádková hodnost matice T: % = dimenze podprostoru v R^n (C^n) generovaného řádky matice T % (všechny součiny x.'*T), neboli % = počet prvků maximální nezávislé podmnožiny řádků % = sloupcová hodnost matice transponované T.' (totiž x.'*T = (T.'*x).') % = dimenze prostoru R(T.') % Podle věty 3.88(5)(iv)jsou obě hodnosti stejné a nazývají se % hodnost matice T, píšeme r= r(T), což je totéž jako r(T.') % r = rank(T) % výpočet hodnosti příkazem MATLABu rank(T.') pause; %------------------------------------------------------------- % Platí r(U*T)<=min(r(U),r(T)), neboť % a) R(U*T) je podprostor v R(U) => dim(R(U*T))<=dim(R(U))=r(U) % b) R((U*T).')= R(T.'*U.') je podprostor v R(T.') => % dim(R(U*T))=dim(R((U*T).'))<=dim(R(T.'))=dim(R(T))=r(T). rank(U*T) min(rank(U),rank(T)) pause; %------------------------------------------------------------- % r(T)=počet sloupců n (pak musí být m>=n) % ... T je matice SLOUPCOVĚ PLNÉ HODNOSTI a % T určuje izomorfní vnoření R^n->R^m (C^n->C^m) % Duálně T.' určuje surjekci R^m->R^n (C^m->C^n) % (viz též 3.36(6) a 3.88(5)) % r(T)=počet řádků m (pak musí být m<=n) % ... T je matice ŘÁDKOVĚ PLNÉ HODNOSTI a % T je surjektivní operátor z R^n->R^m (C^m->C^n). % Duálně T.' určuje izomorfní vnoření R^m->R^n (C^m->C^n) % T čtvercová (m=n), r(T)=n ... T se nazývá REGULÁRNÍ % T i T.' určuje izomorfizmus R^n->R^n (C^n->C^n) dle 3.36(6), % neboť sloupce i řádky T tvoří bázi dle 3.24(ii). % V MATLABu matici inverzního operátoru získáme příkazem inv(T). % DŮSLEDKY: % Součin U*T dvou matic U,T sloupcově (řádkově) plné hodnosti je % opět matice sloupcově (řádkově) plné hodnosti, neboť je složením % dvou izomorfních vnoření (surjektivních zobrazení). % Zejména součin dvou regulárních čvercových matic téhož řádu je opět % regulární matice (složení dvou izomorfizmů je izomorfizmus). % % 5. NĚKTERÉ SPECIÁLNÍ MATICE (OPERÁTORY) A JEJICH HODNOSTI % ====================================================== % 5.1 ADJUNGOVANÁ MATICE (viz 3.82): % a) Reálný případ % T.' je matice operátoru adjungovaného k T: R^n->R^m: % = y.'*(T*x) = (y.'*T)*x = (y.'*T.'.')*x = (T.'*y).'*x = % = x y=y(1:m) y.'*(T*x) % neboli dot(y,T*x) % = % je totéž jako (T.'*y).'*x % neboli dot(T.'*y,x) % = pause; rank(T) rank(T.') % jsou stejné dle 3.88(5)(iv) pause; %------------------------------------------------------------- % b) Komplexní případ analogicky % T' je matice operátoru adjungovaného k T: C^n->C^m: % = y'*(T*x) = (y'*T)*x = (y'*T'')*x = (T'*y)'*x = % = x=x+i y=y+2*i y'*(T*x) % neboli dot(y,T*x) % = % je totéž jako (T'*y)'*x % neboli dot(T'*y,x) % = pause; rank(T) rank(T') % jsou stejné dle 3.88(5)(iv) pause; %------------------------------------------------------------- % 5.2 UNITÁRNÍ MATICE (viz 3.89 a 3.90(2)): % Matice U reprezentující unitární operátor musí být čtvercová a % regulární, neboť unitární operátor je speciálním případem % izomorfizmu. Přirozená báze je zřejmě ortonormální, takže % sloupce matice U musí být jakožto její obraz rovněž ortonormální. % Musí tedy platit U'*U = I [viz část 3.2e) v tmcv2] % Podle 3.90 je U'=inv(U), takže platí rovněž U*U'=I. % Taková matice se nazývá UNITÁRNÍ (v reálném případě ORTOGONÁLNÍ) % % K dané matici T můžeme vždy zkonstruovat matici U téže hodnosti, % jejíž sloupce (řádky) jsou ortonormální a generují týž podprostor % jako původní matice T. Generují-li celý prostor, pak U je unitární, % jinak U určuje pouze unitárně izomorfní vnoření. % Užijeme Gram-Schmidtovu ortogonalizci spojenou s ortonormalizací % (viz 3.78 a 3.66): T U = zeros(m,0) % zde budeme skládat sloupce ONB for v=T % v probíhá sloupce T v % zpracovávaný sloupec T e = v-U*(U'*v) % od v odečteme jeho ortogonální projekci (=0 v 1.kroku) nrm = sqrt(e'*e) % spočteme normu reziduální složky nrm = norm(e) % nebo přímo příkazem 'norm' v MATLABu: if nrm>10*eps % přibližný test na nulovost normy U = [U,e./nrm] % je-li nově vytvořený vektor dostečně různý % od nuly, přidáme jej do ONB end pause; % POKRAČUJTE V ORTOGONALIZACI end pause; % Zkontrolujeme shodnost hodností (dimenzí): rank(T) rank(U) % Zkontrolujeme, zda U je ONB: U'*U % by měla být přibližně jednotková matice pause; rank(U) size(U,2) % počet sloupců v U if size(U,2)==rank(U) % Kontrola nezávislosti sloupců v U (počet sl.=hodnost?) % U je unitární jen v případě, že rank(T)=m % (sloupce T a tedy i U generují celý prostor): if rank(T)==m U*U' % by měla být přibližně jednotková matice % Dále zkontrolujeme, zda U' je inverzní k U: U' inv(U) end else disp('Projev numerické nestability: sloupce U jsou lineárně závislé') end pause; %------------------------------------------------------------- % Vzhledem k numerické nespolehlivosti testu na nulovost není % Gram-Schmidtův algoritmus numericky stabilní. Doporučuje se % místo něj užít tzv. QR-algoritmus: [Q,R] = qr(T) % Zde sloupce Q udávají rovněž nějakou (obecně jinou) ONB a % sloupce matice R jsou souřadnice původních sloupců T v této ONB, % tj. platí T=Q*R: T Q*R % T a Q*R jsou (až na numerické nepřesnosti) stejné, pause; % Zkontrolujeme shodnost hodností (dimenzí): rank(T) rank(Q) % Zkontrolujeme, zda Q je ONB: Q'*Q % by měla být přibližně jednotková matice pause; rank(Q) size(Q,2) % počet sloupců v Q if size(Q,2)==rank(Q) % Kontrola nezávislosti sloupců v Q (počet sl.=hodnost?) % Q je unitární jen v případě, že rank(T)=m % (sloupce T a tedy i Q generují celý prostor): if rank(T)==m Q*Q' % by měla být přibližně jednotková matice % Dále zkontrolujeme, zda Q' je inverzní ke Q: Q' inv(Q) end else disp('Projev numerické nestability: sloupce Q jsou lineárně závislé') end pause; %------------------------------------------------------------- % 5.3 Jednotková matice % ----------------- % Reprezentuje identický operátor (speciální případ unitárního operátoru). % Obvykle se značí I nebo E, resp. I_n nebo E_n ke zdůraznění řádu n: I = eye(n) % hodnost je vždy n, neboť všechny její sloupce tvoří bázi a jsou % tedy maximální nezávislou podmnožinou. rank(I) pause; %------------------------------------------------------------- % 5.4 Diagonální matice % ----------------- % vzniknou z jednotkové matice vynásobením jejích sloupců prvky, % které chceme mít na diagonále: % například d = 1:n D = diag(d) % r(D)=počet nenulových prvků na diagonále (viz větu 3.14(5)(6)) rank(D) % hodnost je n pause; D1=D; D1(2,2)=0 rank(D1) % hodnost je n-1, atd. pause; % každá diagonální matice a tedy i I je symetrická: D D.' pause; %------------------------------------------------------------- % A*D je matice, kde k-tý sloupec A je vynásoben k-tym diagonálním % prvkem: A = ones(m,n) A*D pause; % D*A je matice, kde k-tý řádek A je vynásoben k-tym diagonálním % prvkem: diag(1:m)*A pause; % Jako důsledek dostáváme T = I_m*T = T*I_n: I_m = eye(m) I_n = eye(n) I_m*T T*I_n pause; % Další důsledek: % součin dvou diagonálních matic je opět diagonální matice, % kde na diagonále je součin odpovídajících diagonálních prvků: d1 = d D1 = diag(d1) d2 = 10:10+n-1 D2 = diag(d2) % Následující matice jsou shodné: diag(d1.*d2) D1*D2 pause; %------------------------------------------------------------- % 5.5 Dolní (horní) trojúhelníková matice % ----------------------------------- % Dolní (horní) trojúhelníková matice, která má všechny prvky % nad (pod) hlavní diagonáloui nulové: Tu=triu(T) % tato funkce vynuluje v T prvky pod hlavní diagonálou Tl=tril(T) % tato operace vynuluje v T prvky nad hlavní diagonálou % Diagonální matice je specialním případem jak dolní tak i horní % čtvercové trojúhelníkové matice. % Analogicky platí: % Hodnost čtvercové dolní (horní) trojúhelníkové matice>=počet nenulových % prvků na hlavní diagonále (je-li na diagonále nejvyse jeden nulovy prvek, % pak nastane rovnost): Tu0 = Tu(:,1:m); Tu0 = Tu0+diag(diag(Tu)==0) rank(Tu0) % zadny nulovy prvek => hodnost=3 Tu1 = Tu0; Tu1(2,2)=0 rank(Tu1) % jeden nulovy prvek => hodnost=3-1=2 Tu2 = Tu1; Tu2(3,3)=0 rank(Tu2) % dva nulove prvky, ale hodnost muze byt vetsi nez 3-2=1 pause; rank(Tl) Tl1 = Tl(:,1:m) Tl1(2,2)=0 rank(Tl1) pause; %------------------------------------------------------------- % Součin dvou dolních (horních) trojúhelníkových matic je opět % dolní (horní) trojúhelníková matice. Tu Tu2 = triu(round(10*rand(n+2,m))-5) Tu2*Tu % kde prvých m prvků na hlavní diagonále je součin odpovídajících % diagonálních prvků. pause; Tl Tl2 = tril(round(10*rand(n,m+2))-5) Tl*Tl2 % kde prvých n prvků na hlavní diagonále je součin odpovídajících % diagonálních prvků. pause; %------------------------------------------------------------- % Jesltiže nějaká matice A obsahuje dolní (horní) čtvercovou % trojúhelníkovou submatici s k nenulovými prvky na diagonále, % pak r(A)>=k. % Speciálním případem takových matic jsou matice ve schodovitém tvaru % diskutované dále v tmcv4/část 7 . pause; %------------------------------------------------------------- disp('KONEC')