% EVD_matfuns--sent close all; clear all; format compact; format short; warning off; % zastosowania EVD w funkcjach macierzowych % -- "domena" matematykow i fizykow % -- (na naszym przedmiocie nieco mniej eksploatowane) % -- -- ... moze troszeczke w PCA i MDS % zrozumienie: bardzo przydatne! M = [3 1;2 2] [K,L] = eig(M) % K*L*inv(K) ("pelny") % czy K jest odwracalna? det(K) inv(K) K*L*inv(K) % K*L*inv(K) ("uproszczony") % czy K jest ortogonalna? det(K) K'*K [inv(K) K'] K*L*K' % WSZEDZIE DALEJ ZAKLADAMY: % analizowana macierz posiada rozklad EVD /w postaci K*L*inv(K)/ % (co oznacza, ze macierz K posiada odwrotnosc) M K*L*inv(K) % "symetria" funkcji "diag" d = diag(M) diag(d) diag(diag(M)) l = diag(L) diag(l) K*diag(l)*inv(K) M l = [5;3] diag(l) K*diag(l)*inv(K) M l = [16;1] diag(l) K*diag(l)*inv(K) M*M % druga potega, piata potega (wykladnik calkowity dodatni) l = diag(L) l.^2 diag(l.^2) K*diag(l.^2)*inv(K) M*M K*diag(l.^5)*inv(K) M*M*M*M*M % problem: wartosci i wektory wlasne potegi macierzy (takze innych funkcji) macierzy posiadajacych EVD [K,L] = eig(M*M*M*M*M) diag(l.^5) % wysoka potega (wykladnik calkowity ujemny) % -- zyski obliczeniowe! Big = randn(1000,1000)/32; %e=abs(eigs(M,1)), e^100 [K,L] = eig(Big); diag(L) Bp100 = K*diag(diag(L).^100)*inv(K); clear all; % pierwiastek (wykladnik ulamkowy dodatni) M = [3 1; 2 2] [K,L] = eig(M) K*diag(diag(L).^2)*inv(K) M*M K*diag(diag(L).^5)*inv(K) M*M*M*M*M K*diag(diag(L).^100)*inv(K) M^100 K*diag(diag(L).^(1/2))*inv(K) % pierwiastek kwadratowy M^(1/2) K*diag(diag(L).^(1/5))*inv(K) % pierwiastek piatego stopnia M^(1/5) % odwrotnosc (wykladnik -1) K*diag(diag(L).^(-1))*inv(K) inv(M) % odwrotnosc potegi (wykladnik calkowity ujemny) K*diag(diag(L).^(-2))*inv(K) inv(M*M) M^(-2) K*diag(diag(L).^(-5))*inv(K) inv(M*M*M*M*M) M^(-5) % wykladnik dowolny (rzeczywisty) pi K*diag(diag(L).^pi)*inv(K) M^pi -(1/pi) K*diag(diag(L).^-(1/pi))*inv(K) M^(-1/pi) % wykladnik dowolny (zespolony) i K*diag(diag(L).^i)*inv(K) M^i 1-i K*diag(diag(L).^(1-i))*inv(K) M^(1-i) % co, gdy wykladnik --> 0? K*diag(diag(L).^0)*inv(K) % co, gdy wykladnik --> +inf? K*diag(diag(L).^100)*inv(K) % co, gdy wykladnik --> -inf? K*diag(diag(L).^-100)*inv(K) % inne funkcje (exp(M), log(M)) % exp(M) diag(L) exp(diag(L)) K*diag(exp(diag(L)))*inv(K) % exp(M) diag(L) log(diag(L)) K*diag(log(diag(L)))*inv(K)