tmcv12 echo on format compact format short % Pr 35: Ho/35 % Operator dany matici A v bazi U: load Diagmat1 A A = 3 -2 -1 4 -3 2 8 -7 6 % Nova baze V: v1=2*u1+3*u2+u3; v2=3*u1+4*u2+u3; v3=u1+2*u2+2*u3 % Matice P prechodu U<-V: P=[2 3 1;3 4 2;1 1 2] P = 2 3 1 3 4 2 1 1 2 % Matice reprezentujici operator A v bazi V: X = inv(P)*A*P X = 9.0000 6.0000 16.0000 -6.0000 -4.0000 -12.0000 -1.0000 0.0000 1.0000 % Neboli reseni maticove rovnice P*X=A*P: X = P\A*P X = 9.0000 6.0000 16.0000 -6.0000 -4.0000 -12.0000 -1.0000 0 1.0000 % *************************************** pause; % 2) DIAGONALIZOVANI MATIC % % Pr. 13.4/KaSk s.123 (matice nediagonalizovatelna v komplexnim oboru) load Diagmat2 A A = 2 1 1 2 1 -2 -1 0 -2 n = length(A) n = 3 % Charakteristicky polynom: p = poly(A) p = 1.0000 -1.0000 -5.0000 -3.0000 pause; % Vlastni cisla jako jeho koreny: lambda = roots(p) lambda = 3.0000 -1.0000 -1.0000 % Zkontrolujeme presnost korenu pk = polyval(p,lambda) pk = 1.0e-013 * -0.2931 -0.0089 -0.0089 if max(abs(pk)) > 100*eps lambda = round(lambda) % Zkusime zaokrouhlit lambda = 3 -1 -1 pk = polyval(p,lambda) pk = 1.0e-013 * -0.2931 0.0355 0.0355 if max(abs(pk)) > 100*eps warning('Problem s presnosti korenu: osetrete rucne') Warning: Problem s presnosti korenu: osetrete rucne > In Z:\matlab\PMZMII\tmcv12.m at line 34 keyboard % Zkusime vypocet dokoncit return end end pause; % Algebraicke nasobnosti: an1 = 1 an1 = 1 an2 = 2 an2 = 2 % Matice soustav pro hledani vlastnich vektoru prislusnych % k jednotlivym vlastnim cislum: A1 = lambda(1)*eye(n)-A A1 = 1 -1 -1 -2 2 2 1 0 5 A2 = lambda(2)*eye(n)-A A2 = -3 -1 -1 -2 -2 2 1 0 1 pause % Geometricke nasobnosti: gn1 = n-rank(A1) gn1 = 1 gn2 = n-rank(A2) gn2 = 1 an1==gn1 & an2==gn2 ans = 0 % Neni diagonalizovatelna, nebot an2~=gn2 % *************************************** pause; % Pr. 13.5/KaSk s.124 (matice diagonalizovatelna dokonce v realnem oboru) load Diagmat3 A A = 3 0 6 0 -3 0 5 0 2 n = length(A) n = 3 % Charakteristicky polynom: p = poly(A) p = 1 -2 -39 -72 pause; % Vlastni cisla jako jeho koreny: lambda = roots(p) lambda = 8.0000 -3.0000 + 0.0000i -3.0000 - 0.0000i % Zkontrolujeme presnost korenu pk = polyval(p,lambda) pk = 1.0e-012 * -0.9805 0.0426 + 0.0000i 0.0426 - 0.0000i if max(abs(pk)) > 100*eps lambda = round(lambda) % Zkusime zaokrouhlit lambda = 8 -3 -3 pk = polyval(p,lambda) pk = 0 0 0 if max(abs(pk)) > 100*eps end end pause; % Algebraicke nasobnosti: an1 = 1 an1 = 1 an2 = 2 an2 = 2 % Matice soustav pro hledani vlastnich vektoru prislusnych % k jednotlivym vlastnim cislum: A1 = lambda(1)*eye(n)-A A1 = 5 0 -6 0 11 0 -5 0 6 A2 = lambda(2)*eye(n)-A A2 = -6 0 -6 0 0 0 -5 0 -5 pause % Geometricke nasobnosti: gn1 = n-rank(A1) gn1 = 1 gn2 = n-rank(A2) gn2 = 2 an1==gn1 & an2==gn2 ans = 1 % Matice je diagonalizovatelna, nebot an1==gn1 a an2=gn2 pause; % Nalezneme baze vektorovych prostoru prislusnych vlastnim cislum: % Baze algoritmem prevodu na schodovity tvar (nemusi byt ortonormalni) V1 = null(A1,'r') V1 = 1.2000 0 1.0000 V1'*V1 % Kontrola (ne)ortonormality ans = 2.4400 V2 = null(A2,'r') V2 = 0 -1 1 0 0 1 V2'*V2 % Kontrola (ne)ortonormality ans = 1 0 0 2 V = [V1,V2] % Sloupce jsou vlastni vektory V = 1.2000 0 -1.0000 0 1.0000 0 1.0000 0 1.0000 V'*V % Neni ortonormalni ans = 2.4400 0 -0.2000 0 1.0000 0 -0.2000 0 2.0000 D = diag(lambda) D = 8 0 0 0 -3 0 0 0 -3 % Kontrola A*V = V*D A*V - V*D ans = 0 0 0 0 0 0 0 0 0 % Diagonalizace inv(V)*A*V ans = 8.0000 0 0.0000 0 -3.0000 0 0 0 -3.0000 pause % Rozklad se stejnymi vlasnimi cisly, ale pripadne jinymi vlastnimi % vektory primo pomoci prikazu 'eig': help eig EIG Eigenvalues and eigenvectors. E = EIG(X) is a vector containing the eigenvalues of a square matrix X. [V,D] = EIG(X) produces a diagonal matrix D of eigenvalues and a full matrix V whose columns are the corresponding eigenvectors so that X*V = V*D. [V,D] = EIG(X,'nobalance') performs the computation with balancing disabled, which sometimes gives more accurate results for certain problems with unusual scaling. If X is symmetric, EIG(X,'nobalance') is ignored since X is already balanced. E = EIG(A,B) is a vector containing the generalized eigenvalues of square matrices A and B. [V,D] = EIG(A,B) produces a diagonal matrix D of generalized eigenvalues and a full matrix V whose columns are the corresponding eigenvectors so that A*V = B*V*D. EIG(A,B,'chol') is the same as EIG(A,B) for symmetric A and symmetric positive definite B. It computes the generalized eigenvalues of A and B using the Cholesky factorization of B. EIG(A,B,'qz') ignores the symmetry of A and B and uses the QZ algorithm. In general, the two algorithms return the same result, however using the QZ algorithm may be more stable for certain problems. The flag is ignored when A and B are not symmetric. See also CONDEIG, EIGS. Overloaded methods help lti/eig.m help sym/eig.m pause [V1,D1]=eig(A) V1 = 0.7682 -0.7071 0 0 0 1.0000 0.6402 0.7071 0 D1 = 8 0 0 0 -3 0 0 0 -3 V1'*V1 % Neni ortonormalni ans = 1.0000 -0.0905 0 -0.0905 1.0000 0 0 0 1.0000 % Diagonalizace inv(V1)*A*V1 ans = 8.0000 0 0 0.0000 -3.0000 0 0 0 -3.0000 pause % Jen vlastni cisla spocteme pomoci eig(A) ans = 8 -3 -3 % ****************************************************** pause; % Pr. 13.6/KaSk s.128 % (symetricka matice ortogonalne diagonalizovatelna dokonce v realnem oboru) load Diagmat4 A A = 8 -2 2 -2 5 4 2 4 5 n = length(A) n = 3 % Charakteristicky polynom: p = poly(A) p = 1 -18 81 0 pause; % Vlastni cisla jako jeho koreny: lambda = roots(p) lambda = 0 9.0000 9.0000 % Zkontrolujeme presnost korenu pk = polyval(p,lambda) pk = 1.0e-012 * 0 0.1279 0.1279 if max(abs(pk)) > 100*eps lambda = round(lambda) % Zkusime zaokrouhlit lambda = 0 9 9 pk = polyval(p,lambda) pk = 0 0 0 if max(abs(pk)) > 100*eps end end pause; % Algebraicke nasobnosti: an1 = 1 an1 = 1 an2 = 2 an2 = 2 % Matice soustav pro hledani vlastnich vektoru prislusnych % k jednotlivym vlastnim cislum: A1 = lambda(1)*eye(n)-A A1 = -8 2 -2 2 -5 -4 -2 -4 -5 A2 = lambda(2)*eye(n)-A A2 = 1 2 -2 2 4 -4 -2 -4 4 pause % Geometricke nasobnosti: gn1 = n-rank(A1) gn1 = 1 gn2 = n-rank(A2) gn2 = 2 an1==gn1 & an2==gn2 ans = 1 % Matice je diagonalizovatelna, nebot an1==gn1 a an2=gn2 pause; % Nalezneme baze vektorovych prostoru prislusnych vlastnim cislum: % Ortonormalni baze algoritmem singularniho rozkladu V1 = null(A1) V1 = 0.3333 0.6667 -0.6667 V1'*V1 % Kontrola ortonormality ans = 1.0000 V2 = null(A2) V2 = 0.9428 0 -0.2357 0.7071 0.2357 0.7071 V2'*V2 % Kontrola ortonormality ans = 1.0000 0.0000 0.0000 1.0000 V = [V1,V2] % Sloupce jsou vlastni vektory V = 0.3333 0.9428 0 0.6667 -0.2357 0.7071 -0.6667 0.2357 0.7071 V'*V % Je ortonormalni ans = 1.0000 0.0000 -0.0000 0.0000 1.0000 0.0000 -0.0000 0.0000 1.0000 D = diag(lambda) D = 0 0 0 0 9 0 0 0 9 % Kontrola A*V = V*D A*V - V*D ans = 1.0e-015 * 0 0 0.2220 0 -0.4441 0 0 0.4441 -0.8882 % Ortogonalni (unitarni) diagonalizace V'*A*V ans = 0 0 0 0 9.0000 0.0000 0 0.0000 9.0000 pause; % Rozklad se stejnymi vlasnimi cisly, ale pripadne jinymi vlastnimi % vektory primo pomoci prikazu 'eig': [V1,D1]=eig(A) V1 = 0.3333 0.2981 0.8944 0.6667 0.5963 -0.4472 -0.6667 0.7454 0 D1 = 0 0 0 0 9 0 0 0 9 V1'*V1 ans = 1.0000 -0.0000 0.0000 -0.0000 1.0000 0 0.0000 0 1.0000 % Ortogonalni (unitarni) diagonalizace V1'*A*V1 ans = 0.0000 -0.0000 0.0000 -0.0000 9.0000 0 0.0000 0 9.0000 % ****************************************************** pause; % Ukazka nalezeni singularniho rozkladu pomoci % prikazu 'svd' (Singular Value Decomposition) help svd SVD Singular value decomposition. [U,S,V] = SVD(X) produces a diagonal matrix S, of the same dimension as X and with nonnegative diagonal elements in decreasing order, and unitary matrices U and V so that X = U*S*V'. S = SVD(X) returns a vector containing the singular values. [U,S,V] = SVD(X,0) produces the "economy size" decomposition. If X is m-by-n with m > n, then only the first n columns of U are computed and S is n-by-n. See also SVDS, GSVD. Overloaded methods help sym/svd.m pause; m=3, n=5 m = 3 n = 5 % Nahodne vygenerujeme celociselnou matici: A = -2+round(10*rand(m,n)) A = -2 7 6 5 5 5 3 3 6 2 2 2 0 -2 6 [U,D,V] =svd(A) U = -0.8107 0.1247 -0.5721 -0.5398 -0.5376 0.6477 -0.2268 0.8339 0.5032 D = 13.9046 0 0 0 0 0 6.4940 0 0 0 0 0 5.8727 0 0 V = -0.1101 -0.1955 0.9177 -0.3273 -0.0209 -0.5572 0.1429 -0.1796 -0.3561 -0.7142 -0.4663 -0.1331 -0.2536 -0.5166 0.6585 -0.4918 -0.6575 0.0034 0.5698 -0.0328 -0.4670 0.7009 0.2476 0.4177 0.2341 pause % Kontrola ortonormality matic U,V: U'*U ans = 1.0000 0.0000 -0.0000 0.0000 1.0000 0.0000 -0.0000 0.0000 1.0000 V'*V ans = 1.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 1.0000 0 -0.0000 -0.0000 -0.0000 0 1.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 1.0000 0 -0.0000 -0.0000 0.0000 0 1.0000 % Kontrola rozkladu A = U*D*V' A - U*D*V' ans = 1.0e-014 * 0.0444 -0.0888 0 0.0888 -0.0888 -0.4441 -0.0888 -0.0444 -0.5329 0.1776 0.2887 -0.1332 0.0444 0.3109 -0.2665 pause % Neboli zapis diagonalizace: U'*A*V ans = 13.9046 0.0000 -0.0000 -0.0000 -0.0000 0.0000 6.4940 0.0000 0.0000 -0.0000 -0.0000 0.0000 5.8727 -0.0000 0.0000 % je prave matice D, na jejiz diagonale jsou tzv. singularni cisla. D D = 13.9046 0 0 0 0 0 6.4940 0 0 0 0 0 5.8727 0 0 pause; % Jen singularni cisla pocita jednoduchy prikaz: svd(A) ans = 13.9046 6.4940 5.8727 % Jsou to odmocniny z kladnych vlastnich cisel matice A'*A: lambda = eig(A'*A) lambda = -0.0000 0.0000 34.4884 42.1724 193.3392 sqrt(lambda(lambda>100*eps)) ans = 5.8727 6.4940 13.9046 % ******************************** pause; % Pomoci 'svd' lze unitarne diagonalizovat i nediagonalizovatelne % ctvercove matice. Musime vsak pouzit ruzne matice U,V. % Uzijeme matici z prikladu 13.4: load Diagmat2 A A = 2 1 1 2 1 -2 -1 0 -2 n = length(A) n = 3 [U,D,V] =svd(A) U = -0.5937 0.4851 0.6421 -0.7936 -0.4851 -0.3673 0.1333 -0.7276 0.6729 D = 3.3028 0 0 0 3.0000 0 0 0 0.3028 V = -0.8804 0.2425 -0.4075 -0.4200 -0.0000 0.9075 0.2201 0.9701 0.1019 % Matice U a V jsou ruzne pause % Kontrola ortonormality matic U,V: U'*U ans = 1.0000 -0.0000 0.0000 -0.0000 1.0000 0.0000 0.0000 0.0000 1.0000 V'*V ans = 1.0000 -0.0000 -0.0000 -0.0000 1.0000 -0.0000 -0.0000 -0.0000 1.0000 % Kontrola rozkladu A = U*D*V' A - U*D*V' ans = 1.0e-014 * 0 0 0.0444 0.0222 0.0333 -0.1776 0 0.0111 -0.0888 pause % Neboli zapis diagonalizace: U'*A*V ans = 3.3028 -0.0000 -0.0000 -0.0000 3.0000 0.0000 0.0000 0.0000 0.3028 % je prave matice D, na jejiz diagonale jsou tzv. singularni cisla. D D = 3.3028 0 0 0 3.0000 0 0 0 0.3028 diary off