Jezyki Modelowania i Symulacji
Transkrypt
Jezyki Modelowania i Symulacji
Macierze rzadkie MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Jezyki ˛ Modelowania i Symulacji Macierze rzadkie Poszukiwanie wartości własnych Marcin Ciołek Poszukiwanie wartości i wektorów szczególnych Katedra Systemów Automatyki WETI, Politechnika Gdańska 14 grudnia 2011 Macierze rzadkie MC O czym bedziemy ˛ mówili? Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych 1 Macierze rzadkie 2 Macierz przyległości 3 Permutacja i zmiana rozmieszczenia elementów macierzy 4 Poszukiwanie wartości własnych 5 Poszukiwanie wartości i wektorów szczególnych Macierze rzadkie help sparse MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych Macierz rzadka zawiera stosunkowo mała˛ liczbe˛ niezerowych elmentów w swoich komórkach. Oszcz˛edność na: • czasie obliczeniowym, • pamieci ˛ do przechowywania elementów macierzy. Na przykład macierz jednostkowa n × n 1 0 ... 0 0 1 ... 0 .. .. . . . . . . .. 0 0 ... 1 Macierze rzadkie help sparse MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych Czy potrzba tyle samo pamieci, ˛ aby przechować element zerowy i niezerowy macierzy? MATLAB używa trzech wektorów, żeby przechować macierz rzadka: ˛ • wektor z niezerowymi elementami w formacie zmiennoprzecinkowym (nnz - długość wektora), • wektor z indeksami wierszy odpowiadajacymi ˛ niezerowym elementom(nnz - długość wektora), • wektor z ze wskaźnikami do poczatku ˛ każdej kolumny (n - długość wektora). Liczba bajtów potrzebna do zapisania macierzy rzadkiej: 8 × nnz + 4 × (nnz + n) Macierze rzadkie help sparse MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych A = 0 0 1 0 0 2 3 0 0 0 0 4 5 0 0 0 % konwersja macierzy A na macierz rzadka˛ >> S = sparse(A) S = (3,1) 1 (2,2) 2 (3,2) 3 (4,3) 4 (1,4) 5 % powrót do postaci pełnej >> A == full(S); Macierze rzadkie help sparse MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych A = 0 0 1 0 0 2 3 0 0 0 0 4 5 0 0 0 %bezpośrednie tworzenie macierzy rzadkich S = sparse([3 2 3 4 1],[1 2 2 3 4], [1 2 3 4 5],4,4) S = (3,1) 1 (2,2) 2 (3,2) 3 (4,3) 4 (1,4) 5 Macierze rzadkie help sparse MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych n = 5; E = eye(n) E = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 S = sparse(1:n,1:n,1); S = (1,1) 1 (2,2) 1 (3,3) 1 (4,4) 1 (5,5) 1 0 0 0 1 0 0 0 0 0 1 Macierze rzadkie help sparse MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych whos Name E S n Name E S n Size 5x5 5x5 1x1 Bytes 200 128 8 Class double double double Attributes Size 100x100 100x100 1x1 Bytes 80000 2408 8 Class double double double Attributes sparse sparse Macierze rzadkie help sparse MC Oczędność czasu obliczeniowego 350 Macierze rzadkie 300 Macierz przyległości 250 E-czas/S-czas Permutacja i zmiana rozmieszczenia elementów macierzy 200 150 100 Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych 50 0 0 10 20 30 40 50 60 Numer iteracji 70 %Postać klasyczna tic E^2; toc Elapsed time is 0.000697 seconds. %Postać rzadka tic S^2; toc Elapsed time is 0.000027 seconds. 80 90 100 Macierze rzadkie help sparse MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych spy (S) 0 10 20 30 40 50 60 70 80 90 100 0 20 40 60 nz = 100 80 100 Macierze rzadkie help spy MC Macierze rzadkie Macierz modeluje ósme stadium destylacji chemicznej 0 Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych 50 100 150 200 250 300 350 400 450 0 load west0479 spy(west0479) whos Name Size west0479 479x479 100 200 300 nz = 1887 Bytes 24564 400 Class double Attribute sparse Macierze rzadkie help sparse MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych nnz(S) - zwraca liczbe˛ niezerowych elementów macierzy rzadkiej nonzeros(S) - zwraca kolumne˛ niezerowych elementów macierzy rzadkiej nzmax(S) - zwraca liczbe˛ miejsc zarezerwowanych na niezerowe elementy macierzy [i,j,s] = find(S) - zwraca indeksy wierszy i kolumn niezerwoych elementów n = 5; S = sparse(1:n,1:n,1); nnz(S)-> ans = 5 nzmax(s)-> ans = 5 nonzeros(S)-> ans = 1 1 1 1 1 [i,j,s] = find(S) i = [1 2 3 4 5]' j = [1 2 3 4 5]' s = [1 1 1 1 1]; Macierze rzadkie help sparse MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych B=speye(4); % macierz jednostkowa diagonalna [i,j,s]=find(B); [i,j,s] = 1 1 1 2 2 1 3 3 1 4 4 1 B(3,1) = 42; ans = 1 1 3 1 2 2 3 3 4 4 1 42 1 1 1 Macierze rzadkie help sparse MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych C = 4 0 0 -1 0 4 0 -1 C=4*speye(4); 0 0 4 -1 -1 -1 -1 4 C(1:3,4)=-1; C(4,1:3)=-1; C=4*speye(4); for k=1:3 C(k,4)=-1; C(4,k)=-1; end % to jest dopiero dobre podejście i = [1 4 2 4 3 4 1 2 3 4]'; j = [1 1 2 2 3 3 4 4 4 4]'; s = [4 -1 4 -1 4 -1 -1 -1 -1 4]'; CSP = sparse(i,j,s); Macierze rzadkie help spdiags MC Macierze rzadkie Tworzenie macierzy rzadkiej z jej elementów diagonalnych S = spdiags(B, d, m, n) Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych B = d = 41 52 63 74 11 22 33 44 0 0 13 24 >> S = spdiags(B,d,7,4); >> full(S) S= 11 0 13 0 0 22 0 24 0 0 33 0 41 0 0 44 0 52 0 0 0 0 63 0 0 0 0 74 -3 0 2 Macierze rzadkie macierz przyległości MC Macierze rzadkie Macierz przyległości Zapisywanie siatki powiaza ˛ ń przedstawionej za pomoca˛ grafu Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych 1. 2. 3. 4. Kasia Basia Zosia Gosia 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 Macierze rzadkie gplot MC Graf połączeń 5 Macierze rzadkie 4.5 Macierz przyległości 4 3.5 Permutacja i zmiana rozmieszczenia elementów macierzy 3 2.5 2 Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych 1.5 1 1 1.2 1.4 1.6 1.8 2 2.2 A = 0 1 0 1 0 1 0 1 0 1 0 1 %kordynaty w˛ ezłów >> xy = [1 3; 2 1; 3 3 >> gplot(A,xy) 1 0 1 0 ; 2 5] 2.4 2.6 2.8 3 Macierze rzadkie bucky MC Macierze rzadkie Model czastki ˛ C60 , postać czystego wegla ˛ z 60 atomami w prawie sferycznej konfiguiracji Macierz przyległości Graf połączeń - piłka Bucky'ego 0.8 Permutacja i zmiana rozmieszczenia elementów macierzy 0.6 0.4 0.2 Poszukiwanie wartości własnych 0 -0.2 Poszukiwanie wartości i wektorów szczególnych -0.4 -0.6 -0.8 -1 [B,v]=bucky; gplot(B,v) axis equal -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 Macierze rzadkie bucky MC Macierze rzadkie Graf połączeń - piłka Bucky'ego 14 1 15 0.8 18 Macierz przyległości 0.4 Permutacja i zmiana rozmieszczenia elementów macierzy 13 17 11 0.6 19 12 16 2 0.2 20 10 3 9 0 -0.2 1 6 4 22 8 5 Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych -0.4 23 -0.6 26 24 30 25 -0.8 -1 -1 7 21 27 29 28 -0.5 0 0.5 1 k = 1:30; [B,v] = bucky; gplot(B(k,k),v(k,:)) axis square for j=1:30, text(v(j,1),v(j,2),int2str(j),... 'FontName','Times New Roman','FontSize',16); end Macierze rzadkie bucky MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych Położenie niezerowych elementów na płaszyźnie XY 0 10 20 30 40 50 60 0 k = 1:30; [B,v] = bucky; spy(B) 10 20 30 nz = 180 40 50 60 Macierze rzadkie MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych bucky Macierze rzadkie permutacja MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych p = [1 3 4 2 5]; I = eye(5,5); %permutacja wierszowa P = I(p,:) P = 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 %permutacja kolumnowa R = I(:,p) R = 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 Macierze rzadkie permutacja MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych n=5; I=speye(n); p = [1 3 4 2 5]; P = I(p,:) R = I(:,p) p = (1:n)*R I = (1,1) (1,1) (1,1) (1,1) (1,1) 1 1 1 1 1 1 3 P = (1,1) (4,2) (2,3) (3,4) (5,5) 1 1 1 1 1 R = (1,1) (3,2) (4,3) (2,4) (5,5) p = 4 2 5 1 1 1 1 1 Macierze rzadkie permutacja MC Macierze rzadkie Jak uzyskać wektor permutacji? Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych n=5; S = [ones(1,n); ones(n-1,1) speye(n-1,n-1)]; A = full(S) 1 1 1 1 1 1 1 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 1 j = colperm(S) j = 2 3 p = p = 4 5 1 sort(full(sum(spones(S)) 2 3 4 5 1 Macierze rzadkie permutacja MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych Jaki wpływ może mieć wstepna ˛ permutacja macierzy rzadkiej na wynik algorytmów Cholesky’ego i LU? L = lu(S); nnz(L) ans = 23 fill(L) ans = 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 -1.0000 0 1.0000 1.0000 1.0000 0 -1.0000 1.0000 1.0000 1.0000 -1.0000 -1.0000 2.0000 0.5000 1.0000 -1.0000 -1.0000 1.0000 1.5000 Macierze rzadkie permutacja MC Macierze rzadkie Jaki wpływ może mieć wstepna ˛ permutacja macierzy rzadkiej na wynik algorytmów Cholesky’ego i LU? Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy S = 1 1 1 1 1 1 1 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 1 2 3 4 5 1 S1 = S(j,j); S1 = 1 0 0 1 0 0 0 0 1 1 0 0 1 0 1 0 0 0 1 1 1 1 1 1 1 Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych j = Macierze rzadkie permutacja MC Macierze rzadkie Jaki wpływ może mieć wstepna ˛ permutacja macierzy rzadkiej na wynik algorytmów Cholesky’ego i LU? Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy S = 1 1 1 1 1 1 1 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 1 2 3 4 5 1 S1 = S(j,:); S1 = 1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 0 1 0 1 0 0 0 1 1 Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych j = Macierze rzadkie permutacja MC Macierze rzadkie Jaki wpływ może mieć wstepna ˛ permutacja macierzy rzadkiej na wynik algorytmów Cholesky’ego i LU? Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy S1 = 1 1 1 1 1 Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych j = 2 1 0 0 0 1 3 S2 = S1(:,j); S2 = 1 0 0 1 0 0 0 0 1 1 0 1 0 0 1 4 0 0 1 0 1 0 0 1 0 1 5 0 0 0 1 1 0 0 0 1 1 1 1 1 1 1 1 Macierze rzadkie permutacja MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych Jaki wpływ może mieć wstepna ˛ permutacja macierzy rzadkiej na wynik algorytmów Cholesky’ego i LU? L = lu(S(j,j)); nnz(L) ans = 13 fill(L) ans = 1 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 1 1 1 1 1 1 -3 Macierze rzadkie symrcm MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Zmiana uporzadkowania ˛ elementów macierzy(metoda Cuthill-McKee) umieszcza niezerowe elementy w pobliżu głównej diagonali, zachowujac ˛ symetrie˛ ich ułożenia Poszukiwanie wartości własnych • nie daje gwarancji znalezienia minimalnej „szerokości Poszukiwanie wartości i wektorów szczególnych • nadaje sie˛ zarówno dla macierzy symetrycznych i pasma”, niesymetrycznych, • użyteczna dla problemów „long and thin”. Macierze rzadkie symrcm MC Macierze rzadkie Macierz przyległości B Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych 4 B(p,p) 0 0 10 10 20 20 30 30 40 40 50 50 60 0 20 B = bucky; p = symrcm(B); R = B(p,p); 40 nz = 180 60 60 0 20 40 nz = 180 60 Macierze rzadkie MC symamd i colamd Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych Zmiana uporzadkowania ˛ elementów macierzy(metoda Minimum Degree Ordering) bazuje na obserwacji zmiany liczby połacze ˛ ń wezłów ˛ podczas algorytmu eliminacji Gaussa • macierz wynikowa jest rzadsza niż w przypadku zastosowania innych uporzadkowa ˛ ń, • dla macierzy symetrycznych - symamd, • dla macierzy niesymetrycznych - colamd. Macierze rzadkie symamd i colamd MC Macierze rzadkie Macierz przyległości B Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych 4 B(p,p) 0 0 10 10 20 20 30 30 40 40 50 50 60 0 20 B = bucky; p = symamd(B); R = B(p,p); 40 nz = 180 60 60 0 20 40 nz = 180 60 Macierze rzadkie lu MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych 4 n=length(B); B=B-3*speye(n); nnz(lu(B)) nnz(lu(B(r,r))) nnz(lu(B(p,p))) r = symrcm(B); p = symamd(B); ans = 1022 ans = 968 ans = 636 Macierze rzadkie chol MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy chol(B) Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych 4 chol(B(r,r)) chol(B(p,p)) 0 0 0 20 20 20 40 40 40 60 0 20 40 nz = 541 n=length(B); B=B+4*speye(n); nnz(chol(B)) nnz(chol(B(r,r))) nnz(chol(B(p,p))) 60 60 0 20 40 nz = 514 60 60 0 r = symrcm(B); p = symamd(B); ans = 541 ans = 514 ans = 348 20 40 nz = 348 60 Macierze rzadkie eigs MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych eigs(A, B, k , sigma, opts) Funkcja ta pozwala na iteracyjne znajdowanie (domyślnie jest 6 najwiekszych) ˛ wartości własnych dla bardzo dużych i rzadkich macierzy. Macierz musi być kwadratowa. • opts: ’lm’ - najwieksze ˛ wartości własne • opts: ’sm’ - najmniejsze wartości własne Macierze rzadkie eigs MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych 4 Poszukiwanie wartości i wektorów szczególnych %Symetryczna dodatnio określona macierz o rozmiarze %632x632, 18 wartości własnych powtarza si˛ e dla 4 A = delsq(numgrid('C',30)); d = eig(full(A)); [dum,ind] = sort(abs(d)); dlm = eigs(A); dsm = eigs(A,6,'sm'); Macierze rzadkie eigs MC 4 eigs(A,18,sigma) Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych 4 4 4 0 2 4 6 8 10 12 14 16 18 eigs(A,18,4.0) ??? %1/(lambda - 4.0) gdzie lambda jest estymata˛ %wartości własnej sigma = 4 - 1e-6; [V,D] = eigs(A,18,sigma); Macierze rzadkie svds MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych • Poszukiwanie wartości i wektorów szczególnych • A - mxn (nie musi być rzadka!) • s = svds(A); s – wektor sześciu najwiekszych ˛ wartości szczególnych macierzy A • s = svds(A, k); s = svds(A,k,’L’); s – wektor k najwiekszych ˛ wartości szczególnych • s = svds(A, k, sigma); s – wektor k wartości szczególnych najbliższych skalarnemu sigma Macierze rzadkie svds MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych • Poszukiwanie wartości i wektorów szczególnych • s = svds(A, k, sigma, options); opcja tol maxit disp znaczenie kryterium zbieżności: norm(AV-US,1)<=tol*norm(A,1) (A=USV’) ograniczenie liczby iteracji liczba wartości szczególnych wyświetlana w każdej iteracji domyślnie 1e-10 300 0 • Zwracane sa˛ tylko te wartości szczególne, dla których osiagni ˛ eto ˛ wymagana˛ dokładność Macierze rzadkie svds MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych • Poszukiwanie wartości i wektorów szczególnych • [U, S, V] = svds(A,...); U – macierz mxk o ortonormalnych kolumnach S – diagonalna kxk V – nxk o ortonormalnych kolumnach U*S*V’ – przybliżenie A (w 1-normie) o rz˛edzie najbliższym A • [U, S, V, flag] = svds(A,...); flag = 0 – zbieżność: norm(A*V-U*S,1) <= tol*norm(A,1)) 1 – brak zbieżności) Macierze rzadkie svds MC Macierze rzadkie Macierz przyległości Permutacja i zmiana rozmieszczenia elementów macierzy Poszukiwanie wartości własnych Poszukiwanie wartości i wektorów szczególnych load west0479 s = svd(full(west0479)); display(s(1:4)) ans = 1.0e+005 * [3.1895 3.1725 3.1695 3.1685] Elapsed time is 0.083878 seconds. sl = svds(west0479,4) sl = 1.0e+005 * [3.1895 3.1725 3.1695 3.1685] Elapsed time is 0.009256 seconds.