Rozdziaª 9 Liniowe zadania najmniejszych kwadratów
Transkrypt
Rozdziaª 9 Liniowe zadania najmniejszych kwadratów
Rozdziaª 9 Liniowe zadania najmniejszych kwadratów Liniowe zadania najmniejszych kwadratów polega na znalezieniu x∗ ∈ Rn , który minimalizuje kAx − bk2 dla danej macierzy A ∈ Rm,n i wektora b ∈ Rm . Zauwa»my, »e je±li m = n i A jest nieosobliwa, to LZNK jest równowa»ne rozwi¡zaniu ukªadu Ax = b. Funkcj¡ octave'a rozwi¡zuj¡c¡ dowolne LZNK jest operator \. Wywoªanie x=A\b powinno zwróci¢ rozwi¡zanie LZNK. W przypadku niejednoznaczno±ci LZNK rozwi¡zanie jest wybrane wedªug odpowiedniego kryterium, o którym napiszemy poni»ej w rozdziale 9.2. Przetestujmy ten operator na kilku bardzo prostych przykªadach macierzy wymiaru 3 × 2. Pierwszy przykªad z b b¦d¡cym pierwsz¡ kolumn¡: A=[1 1 1 ; 1 1 2 ] ' b=[1 1 1 ] ' x=A\b Tutaj rozwi¡zanie jest jednoznaczne. We¹my macierz o niezerowym j¡drze (przestrzeni zerowej), wtedy oczywi±cie dodanie wektora z j¡dra macierzy do x nie zmieni normy Ax − b. A=[1 1 1 ; −1 −1 − 1] ' b=[1 1 1 ] ' x=A\b 94 J¡dro macierzy: y=null (A) norm (A∗ ( x+y)−b , 2 ) 9.1 Regularne LZNK Je±li macierz A jest kolumnami regularna (tzn. kolumny stanowi¡ ukªad niezale»ny liniowo), to LZNK nazywamy regularnym i tylko wtedy ma ono jednoznaczne rozwi¡zanie. Rozwi¡»my najbardziej klasyczne zadanie najmniejszych kwadratów. Dla Pn danych punktów (xk , yk )m k=1 dopasuj krzyw¡ postaci j=1 aj fj (x) dla znanych funkcji {fj } tak, aby min aj X |yk − X aj fj (xk )|2 j k byªa minimalna. To jest oczywi±cie LZNK z macierz¡: A = (fj (xk ))k,j i wektorem prawej strony b = (yk ). Rozwi¡»my to zadanie dla dowolnych punktów zadanych poprzez dwa pionowe wektory x = (xk ) i y = (yk ) oraz krzywych postaci a1 cos(x) + a2 sin(x): function a=d o p a s u j ( x , y ,N=length ( x ) ) A=[ cos ( x ) , sin ( x ) ] ; a=A\y ; end Przetestujmy na punktach le»¡cych na wykresie funkcji sin. x=linspace ( 0 , 2 ∗ pi , 1 0 ) ' ; y=sin ( x ) ; a=d o p a s u j ( x , y ) Czyli a1 = 0 i a2 = 1 (tak, jak si¦ spodziewali±my). Teraz rozpatrzmy losowe punkty blisko wykresu cos, por. rysunek 9.1: y=cos ( x ) + 0 . 5 ∗ ( rand ( 1 0 , 1 ) − 0 . 5 ) ; a=d o p a s u j ( x , y ) z=linspace ( 0 , 2 ∗ pi ) ; plot ( x , y , "+" , z , a ( 1 ) ∗ cos ( z )+a ( 2 ) ∗ sin ( z ) , " ; . . . dopasowana krzywa ; " , z , cos ( z ) , " ; c o s ; " ) 95 Rysunek 9.1: Wykres funkcji cos oraz funkcji dopasowanej do punktów oznaczonych przez plusy. Teraz mo»emy np. doda¢ du»e dodatkowe zaburzenie np. y1 i zobaczy¢ jak zmieni si¦ dopasowywana krzywa. Pozostawimy to jako zadanie. 9.2 Nieregularne LZNK i rozkªad SVD W programie Matematyki Obliczeniowej nie ma tre±ci zwi¡zanych z nieregularnym LZNK, niemniej my w tym skrypcie poka»emy jak mo»na rozwi¡zywa¢ takie LZNK w octave'ie. W ogólno±ci nie ma miejsca wtedy jednoznaczno±ci rozwi¡zania - jak to ju» zauwa»yli±my. Do rozwi¡zywania nieregularnego LZNK sªu»y rozkªad macierzy SVD, czyli rozkªad wzgl¦dem szczególnych warto±ci macierzy. Rozkªad SVD macierzy A (dowolnej) to A = U ΛV T , gdzie U, V to macierze ortogonalne, a Λ to macierz diagonalna z nierosn¡cymi 96 nieujemnymi warto±ciami na diagonali. Wszystkie te warto±ci z diagonali, które s¡ nieujemne, oznaczmy przez σ1 , . . . , σr . Nazywamy je warto±ciami szczególnymi macierzy A. Wyznaczone one s¡ jednoznacznie, ale ju» sam rozkªad SVD nie jest jednoznaczny. Wida¢, »e kAx − bk22 = kU ΛV T x − bk22 = kΛy − U T bk22 dla y = V T x. Je±li wi¦c znajdziemy rozwi¡zanie y LZNK dla macierzy diagonalnej Λ z praw¡ stron¡ g = U T b, to od razu x = V y . Dalej otrzymujemy, »e kΛy − U T bk22 = r X |σk yk − gk |2 + k=1 n X |gk |2 . k=r+1 Bior¡c minimum po yk widzimy, »e rozwi¡zaniem tego LZNK jest dowolne y speªniaj¡ce: yk = gk σk k = 1, . . . , r. yr+1 , . . . , yn mog¡ przyj¡¢ dowolne warto±ci. Otrzymujemy wi¦c, »e rozwi¡zaniem wyj±ciowego LZNK jest podprzestrze«: w w 0 n−r n−r V :z∈R =V + V :z∈R z 0 z g dla w ∈ Rr takiego, »e wk = yk = σk . k Zbiorem rozwi¡za« jest podprzestrze« aniczna wymiaru n − r . Operator \ zwraca element zbioru rozwi¡za« o najmniejszej normie drugiej, czyli V w 0 . Do znalezienia rozkªadu SVD macierzy sªu»y funkcja SVD: [ U, S , V] = svd (A) gdzie U, V to macierze ortogonalne, S to macierz diagonalna z warto±ciami szczególnych macierzy A takie, »e U ∗ S ∗ V T = A. Mo»na te» wywoªa¢ t¦ funkcj¦ jako: S = svd (A) Wtedy funkcja zwróci tylko warto±ci szczególne macierzy w wektorze. Przetestujmy t¦ funkcj¦: 97 A=hilb ( 3 ) ; S=svd (A) [ U, S , V] = svd (A) norm (U∗ S ∗V' −A, 1 ) Przetestujmy t¦ funkcj¦ dla macierzy niekwadratowej: A=[1 1 1 ; 1 2 3 ] ; B=A ' ; [ U, S , V] = svd (A) norm (U∗ S ∗V' −A, 1 ) [ U, S , V] = svd (B) norm (U∗ S ∗V' −B, 1 ) Rozpatrzmy macierz kwadratow¡ osobliw¡: A=[1 1 ; 2 2 ] ; [ U, S , V] = svd (A) Formalnie wynik jest faªszywy. Druga wªasno±¢ szczególna powinna by¢ równa zero. Z uwagi na bª¦dy zaokr¡gle« nie mo»emy si¦ spodziewa¢ tego, »e otrzymamy zero, a wynik na poziomie 1e − 16 mo»emy uzna¢ za numeryczne zero. Rz¡d macierzy nie jest numerycznie dobrze uwarunkowany, najmniejsze zaburzenie macierzy mo»e zmieni¢ rz¡d, a wi¦c badanie rz¦du maciery w arytmetyce zmiennopozycyjnej jest wªa±ciwie niemo»liwe. Przetestujmy, jak dziaªa operator \ oraz funkcja svd() zastosowane do rozwi¡zania nieregularnego LZNK. Na pocz¡tek rozwa»ymy LZNK z macierz¡ o maksymalnym rz¦dzie, ale o wi¦kszej ilo±ci kolumn ni» wierszy: A=[1 1 1 ; 1 2 3 ] [ U, S , V] = svd (A) s =[1;0;0]; f=A∗ s ; xx=A\ f y=V ( : , 1 : 2 ) ∗ ( S ( 1 : 2 , 1 : 2 ) \ ( U' ∗ f ) ) norm (A∗ xx−f , 2 ) norm (A∗ y−f , 2 ) Rozpatrzmy f nie b¦d¡ce w przestrzeni kolumn macierzy A. f=rand ( 2 , 1 ) ; xx=A\ f y=V ( : , 1 : 2 ) ∗ ( S ( 1 : 2 , 1 : 2 ) \ ( U' ∗ f ) ) norm ( xx−y , 2 ) Zajmijmy si¦ macierz¡, która nie ma maksymalnego rz¦du: 98 A=[1 1 1 1 ; 2 2 2 2 ; 1 −1 2 3 ] ' [ U, S , V] = svd (A) s =[1;0;0]; f=A∗ s ; xx=A\ f g=U' ∗ f ; x=V ( : , 1 : 3 ) ∗ ( S ( 1 : 3 , 1 : 3 ) \ g ( 1 : 3 ) ) norm (A∗ xx−f , 2 ) norm (A∗ x−f , 2 ) Znów rozpatrzmy f nie b¦d¡ce w przestrzeni kolumn macierzy A: f=rand ( 4 , 1 ) ; xx=A\ f g=U' ∗ f ; x=V ( : , 1 : 3 ) ∗ ( S ( 1 : 3 , 1 : 3 ) \ g ( 1 : 3 ) ) norm (A∗ xx−f , 2 ) norm (A∗ x−f , 2 ) Wynik jest inny ni» tego oczekiwali±my. Przyjmijmy, »e trzecia warto±¢ szczególna wynosi zero: S(3 ,3)=0; x=V ( : , 1 : 2 ) ∗ ( S ( 1 : 2 , 1 : 2 ) \ g ( 1 : 2 ) ) norm (A∗ xx−f , 2 ) norm (A∗ y−f , 2 ) norm ( xx−x , 2 ) Otrzymali±my te same rozwi¡zania. W praktyce pojawia si¦ pytanie, jak ustali¢ epsilon takie, »e je±li |σk | ≤ , to przyjmiemy, »e σk jest równa zero. Jaki± próg musimy przyj¡¢, ale zawsze wrowadzi to pewien bª¡d do naszego przybli»onego rozwi¡zania LZNK. Przy pomocy rozkªadu SVD wyznacza si¦ te» wspóªczynnik uwarunkowania macierzy. Porównajmy wyniki obliczania przybli»onego uwarunkowania macierzy otrzymane przez svd(A) i funkcj¦ cond(A): H=hilb ( 1 5 ) ; S=svd (H ) ; max( S ) / min ( S ) cond (A) Otrzymali±my ten sam wynik. Wspóªczynnik uwarunkowania macierzy Hilberta dla N = 15 jest równy 2.7878e + 17. W przypadku, gdy A jest symetryczna i dodatnio okre±lona, to U = V w rozkªadzie SVD tej macierzy, tzn. rozkªad SVD jest równowa»ny znalezieniu bazy zªo»onej z ukªadu ortonormalnych wektorów wªasnych A. 99 H=hilb ( 4 ) ; [ U, S , V] = norm (U−V, 1 ) svd (H ) ; 100