tmcv3 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 T = 2 -3 -1 3 2 -3 4 0 -2 -3 0 0 U = round(10*rand(p,m))-5 U = 0 4 -2 -1 -5 -5 a = 3 a = 3 b = 2 b = 2 x = (1:n).' x = 1 2 3 4 y = 10*x % x,y jsou dva sloupcové vektory z R^n y = 10 20 30 40 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) ans = 55 88 -88 T*x + T*y % oba výsledky jsou stejné ans = 55 88 -88 % (2) T*(a*x) = a*(T*x) T*(a*x) ans = 15 24 -24 a*(T*x) % oba výsledky jsou stejné ans = 15 24 -24 pause; %------------------------------------------------------------- % 4.2 SLOŽENÍ DVOU OPERÁTORŮ je určeno součinem matic: (U*T)*x ans = 48 -5 U*(T*x) ans = 48 -5 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) E = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 T*E ans = 2 -3 -1 3 2 -3 4 0 -2 -3 0 0 % je stejná matice jako T: T T = 2 -3 -1 3 2 -3 4 0 -2 -3 0 0 pause; % neboli pro každé k=1,...,n platí for k=1:n k, k = 1 T*E(:,k) % obraz k-ho prvku báze E je roven k-mu sloupci T, ans = 2 2 -2 T(:,k) % jeho složky jsou souřadnice v přirozené bázi R^m (C^m) ans = 2 2 -2 pause; % POKRAČUJTE V PROCHÁZENÍ SLOUPCŮ MATICE k, k = 2 T*E(:,k) % obraz k-ho prvku báze E je roven k-mu sloupci T, ans = -3 -3 -3 T(:,k) % jeho složky jsou souřadnice v přirozené bázi R^m (C^m) ans = -3 -3 -3 pause; % POKRAČUJTE V PROCHÁZENÍ SLOUPCŮ MATICE k, k = 3 T*E(:,k) % obraz k-ho prvku báze E je roven k-mu sloupci T, ans = -1 4 0 T(:,k) % jeho složky jsou souřadnice v přirozené bázi R^m (C^m) ans = -1 4 0 pause; % POKRAČUJTE V PROCHÁZENÍ SLOUPCŮ MATICE k, k = 4 T*E(:,k) % obraz k-ho prvku báze E je roven k-mu sloupci T, ans = 3 0 0 T(:,k) % jeho složky jsou souřadnice v přirozené bázi R^m (C^m) ans = 3 0 0 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 r = 3 rank(T.') ans = 3 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) ans = 2 min(rank(U),rank(T)) ans = 2 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 x = 1 2 3 4 y=y(1:m) y = 10 20 30 y.'*(T*x) ans = -30 % neboli dot(y,T*x) % = ans = -30 % je totéž jako (T.'*y).'*x ans = -30 % neboli dot(T.'*y,x) % = ans = -30 pause; rank(T) ans = 3 rank(T.') % jsou stejné dle 3.88(5)(iv) ans = 3 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 x = 1.0000 + 1.0000i 2.0000 + 1.0000i 3.0000 + 1.0000i 4.0000 + 1.0000i y=y+2*i y = 10.0000 + 2.0000i 20.0000 + 2.0000i 30.0000 + 2.0000i y'*(T*x) ans = -32.0000 -90.0000i % neboli dot(y,T*x) % = ans = -32.0000 -90.0000i % je totéž jako (T'*y)'*x ans = -32.0000 -90.0000i % neboli dot(T'*y,x) % = ans = -32.0000 -90.0000i pause; rank(T) ans = 3 rank(T') % jsou stejné dle 3.88(5)(iv) ans = 3 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 T = 2 -3 -1 3 2 -3 4 0 -2 -3 0 0 U = zeros(m,0) % zde budeme skládat sloupce ONB U = Empty matrix: 3-by-0 for v=T % v probíhá sloupce T v % zpracovávaný sloupec T v = 2 2 -2 e = v-U*(U'*v) % od v odečteme jeho ortogonální projekci (=0 v 1.kroku) e = 2 2 -2 nrm = sqrt(e'*e) % spočteme normu reziduální složky nrm = 3.4641 nrm = norm(e) % nebo přímo příkazem 'norm' v MATLABu: nrm = 3.4641 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ý U = 0.5774 0.5774 -0.5774 % od nuly, přidáme jej do ONB end pause; % POKRAČUJTE V ORTOGONALIZACI v % zpracovávaný sloupec T v = -3 -3 -3 e = v-U*(U'*v) % od v odečteme jeho ortogonální projekci (=0 v 1.kroku) e = -2.0000 -2.0000 -4.0000 nrm = sqrt(e'*e) % spočteme normu reziduální složky nrm = 4.8990 nrm = norm(e) % nebo přímo příkazem 'norm' v MATLABu: nrm = 4.8990 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ý U = 0.5774 -0.4082 0.5774 -0.4082 -0.5774 -0.8165 % od nuly, přidáme jej do ONB end pause; % POKRAČUJTE V ORTOGONALIZACI v % zpracovávaný sloupec T v = -1 4 0 e = v-U*(U'*v) % od v odečteme jeho ortogonální projekci (=0 v 1.kroku) e = -2.5000 2.5000 0.0000 nrm = sqrt(e'*e) % spočteme normu reziduální složky nrm = 3.5355 nrm = norm(e) % nebo přímo příkazem 'norm' v MATLABu: nrm = 3.5355 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ý U = 0.5774 -0.4082 -0.7071 0.5774 -0.4082 0.7071 -0.5774 -0.8165 0.0000 % od nuly, přidáme jej do ONB end pause; % POKRAČUJTE V ORTOGONALIZACI v % zpracovávaný sloupec T v = 3 0 0 e = v-U*(U'*v) % od v odečteme jeho ortogonální projekci (=0 v 1.kroku) e = 1.0e-015 * 0 -0.4441 0.3553 nrm = sqrt(e'*e) % spočteme normu reziduální složky nrm = 5.6871e-016 nrm = norm(e) % nebo přímo příkazem 'norm' v MATLABu: nrm = 5.6871e-016 if nrm>10*eps % přibližný test na nulovost normy % od nuly, přidáme jej do ONB end pause; % POKRAČUJTE V ORTOGONALIZACI end pause; % Zkontrolujeme shodnost hodností (dimenzí): rank(T) ans = 3 rank(U) ans = 3 % Zkontrolujeme, zda U je ONB: U'*U % by měla být přibližně jednotková matice ans = 1.0000 0.0000 -0.0000 0.0000 1.0000 -0.0000 -0.0000 -0.0000 1.0000 pause; rank(U) ans = 3 size(U,2) % počet sloupců v U ans = 3 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 ans = 1.0000 0.0000 -0.0000 0.0000 1.0000 -0.0000 -0.0000 -0.0000 1.0000 % Dále zkontrolujeme, zda U' je inverzní k U: U' ans = 0.5774 0.5774 -0.5774 -0.4082 -0.4082 -0.8165 -0.7071 0.7071 0.0000 inv(U) ans = 0.5774 0.5774 -0.5774 -0.4082 -0.4082 -0.8165 -0.7071 0.7071 0 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) Q = -0.5774 -0.4082 0.7071 -0.5774 -0.4082 -0.7071 0.5774 -0.8165 -0.0000 R = -3.4641 1.7321 -1.7321 -1.7321 0 4.8990 -1.2247 -1.2247 0 0 -3.5355 2.1213 % 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 T = 2 -3 -1 3 2 -3 4 0 -2 -3 0 0 Q*R % T a Q*R jsou (až na numerické nepřesnosti) stejné, ans = 2.0000 -3.0000 -1.0000 3.0000 2.0000 -3.0000 4.0000 -0.0000 -2.0000 -3.0000 0.0000 0.0000 pause; % Zkontrolujeme shodnost hodností (dimenzí): rank(T) ans = 3 rank(Q) ans = 3 % Zkontrolujeme, zda Q je ONB: Q'*Q % by měla být přibližně jednotková matice ans = 1.0000 0 -0.0000 0 1.0000 0.0000 -0.0000 0.0000 1.0000 pause; rank(Q) ans = 3 size(Q,2) % počet sloupců v Q ans = 3 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 ans = 1.0000 -0.0000 0.0000 -0.0000 1.0000 0.0000 0.0000 0.0000 1.0000 % Dále zkontrolujeme, zda Q' je inverzní ke Q: Q' ans = -0.5774 -0.5774 0.5774 -0.4082 -0.4082 -0.8165 0.7071 -0.7071 -0.0000 inv(Q) ans = -0.5774 -0.5774 0.5774 -0.4082 -0.4082 -0.8165 0.7071 -0.7071 -0.0000 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) I = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 % hodnost je vždy n, neboť všechny její sloupce tvoří bázi a jsou % tedy maximální nezávislou podmnožinou. rank(I) ans = 4 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 = 1 2 3 4 D = diag(d) D = 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 % r(D)=počet nenulových prvků na diagonále (viz větu 3.14(5)(6)) rank(D) % hodnost je n ans = 4 pause; D1=D; D1(2,2)=0 D1 = 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 4 rank(D1) % hodnost je n-1, atd. ans = 3 pause; % každá diagonální matice a tedy i I je symetrická: D D = 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 D.' ans = 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 pause; %------------------------------------------------------------- % A*D je matice, kde k-tý sloupec A je vynásoben k-tym diagonálním % prvkem: A = ones(m,n) A = 1 1 1 1 1 1 1 1 1 1 1 1 A*D ans = 1 2 3 4 1 2 3 4 1 2 3 4 pause; % D*A je matice, kde k-tý řádek A je vynásoben k-tym diagonálním % prvkem: diag(1:m)*A ans = 1 1 1 1 2 2 2 2 3 3 3 3 pause; % Jako důsledek dostáváme T = I_m*T = T*I_n: I_m = eye(m) I_m = 1 0 0 0 1 0 0 0 1 I_n = eye(n) I_n = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 I_m*T ans = 2 -3 -1 3 2 -3 4 0 -2 -3 0 0 T*I_n ans = 2 -3 -1 3 2 -3 4 0 -2 -3 0 0 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 = 1 2 3 4 D1 = diag(d1) D1 = 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 d2 = 10:10+n-1 d2 = 10 11 12 13 D2 = diag(d2) D2 = 10 0 0 0 0 11 0 0 0 0 12 0 0 0 0 13 % Následující matice jsou shodné: diag(d1.*d2) ans = 10 0 0 0 0 22 0 0 0 0 36 0 0 0 0 52 D1*D2 ans = 10 0 0 0 0 22 0 0 0 0 36 0 0 0 0 52 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 Tu = 2 -3 -1 3 0 -3 4 0 0 0 0 0 Tl=tril(T) % tato operace vynuluje v T prvky nad hlavní diagonálou Tl = 2 0 0 0 2 -3 0 0 -2 -3 0 0 % 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) Tu0 = 2 -3 -1 0 -3 4 0 0 1 rank(Tu0) % zadny nulovy prvek => hodnost=3 ans = 3 Tu1 = Tu0; Tu1(2,2)=0 Tu1 = 2 -3 -1 0 0 4 0 0 1 rank(Tu1) % jeden nulovy prvek => hodnost=3-1=2 ans = 2 Tu2 = Tu1; Tu2(3,3)=0 Tu2 = 2 -3 -1 0 0 4 0 0 0 rank(Tu2) % dva nulove prvky, ale hodnost muze byt vetsi nez 3-2=1 ans = 2 pause; rank(Tl) ans = 2 Tl1 = Tl(:,1:m) Tl1 = 2 0 0 2 -3 0 -2 -3 0 Tl1(2,2)=0 Tl1 = 2 0 0 2 0 0 -2 -3 0 rank(Tl1) ans = 2 pause; %------------------------------------------------------------- % Součin dvou dolních (horních) trojúhelníkových matic je opět % dolní (horní) trojúhelníková matice. Tu Tu = 2 -3 -1 3 0 -3 4 0 0 0 0 0 Tu2 = triu(round(10*rand(n+2,m))-5) Tu2 = 2 1 3 0 2 4 0 0 3 0 0 0 0 0 0 0 0 0 Tu2*Tu ans = 4 -9 2 6 0 -6 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 % kde prvých m prvků na hlavní diagonále je součin odpovídajících % diagonálních prvků. pause; Tl Tl = 2 0 0 0 2 -3 0 0 -2 -3 0 0 Tl2 = tril(round(10*rand(n,m+2))-5) Tl2 = -3 0 0 0 0 4 0 0 0 0 1 4 1 0 0 1 -2 2 3 0 Tl*Tl2 ans = -6 0 0 0 0 -18 0 0 0 0 -6 0 0 0 0 % 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') KONEC diary off