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

Podobne dokumenty