Linjära system Mål Vektorer i Matlab Vektorer i Matlab

Linjära system 1
Linjära system 1
Linjära system
Mål
Jämför målen med matematiks linjäralgebrakurs:
I
I
I
I
I
I
I
Matematikkursen:
I
I
Denna föreläsning:
I
I
I
Lösning av linjära ekvationssystem: huvuddelen av exekveringstiden i
många beräkningsprogram!
I
Om vektorer och matriser i Matlab
Algoritmer: grundalgoritm för gausselimination, bakåtsubstitution
Grundalgoritmen instabil!
Stabilisering via radpivotering
Exekveringstid
LU-faktorisering
att förstå egenskaper hos linjära ekvationssystem i allmänhet
att kunna lösa små ekvationssystem för hand
Här:
I
I
att kunna lösa stora ekvationssystem med dator
att förstå de datoranpassade algoritmerna och deras egenskaper
Dessa anteckningar bygger på material av Stefan Pålsson, Avdelningen
för teknisk databehandling, Uppsala Universitet
Martin Berggren ()
Numeriska metoder för civilingenjörer
Linjära system 1
7 november 2008
Linjära system 1
7 november 2008
2 / 33
Vektorer och matriser i Matlab
Vektorer i Matlab
>> vk = [1; 2; 3; 4; 5];
>> vr = [5 6 7 8];
>> vk
I
vr(1) till vänster om =
betyder tilldelning av ett tal i
1:a komponenten av vektorn
vk =
vr
1
2
3
4
5
I
Tecknet ’ betyder transponat
Numeriska metoder för civilingenjörer
vr =
-1.1000
3.5000
7.0000
8.0000
>> vk = vr’;
>> vk
-1.1000
3.5000
7.0000
8.0000
vr =
5
>> vr(1) = -1.1; vr(2) = 3.5;
>> vr
vk =
>> vr
Martin Berggren ()
Numeriska metoder för civilingenjörer
Vektorer och matriser i Matlab
Vektorer i Matlab
Semikolon ger radbyte!
Martin Berggren ()
1 / 33
6
7
8
7 november 2008
3 / 33
Martin Berggren ()
Numeriska metoder för civilingenjörer
7 november 2008
4 / 33
Linjära system 1
Vektorer och matriser i Matlab
Linjära system 1
Vektorer, matriser i Matlab
Bygga matriser
>> A = [1 7; 5 3];
>> vk = [1; 2; 3; 4; 5];
>> size(A), size(vk), length(vk)
ans =
2
2
Bestämma storlek och längd
ans =
ans =
Martin Berggren ()
5
>> A = [A; 2 1]
Givet A D
!
5
alternativt
1 7
, skapa
5 3
1
0
1 7
AQ D @5 3A
2 1
1
"
>> temp = [2 1];
>> A = [A; temp];
>> A
A =
>> A(1,1) = 1; A(1,2) = 7;
>> A(2,1) = 5; A(2,2) = 3;
>> A
!
"
1 7
AD
5 3
A =
Skilj på rad- och kolonnvektorer!
1
5
7
3
Numeriska metoder för civilingenjörer
Linjära system 1
7 november 2008
Martin Berggren ()
5 / 33
Vektorer och matriser i Matlab
7 november 2008
6 / 33
7 november 2008
8 / 33
Vektorer och matriser i Matlab
Bygga matriser
Matlab kan behandla hela
eller delar av rader, kolonner
och submatriser
Kolon (:) betecknar hel rad
resp kolonn
Martin Berggren ()
7
3
1
Numeriska metoder för civilingenjörer
A =
>> A(2,:)
I
1
5
2
>> tempk = [2; 1];
>> A = [A; tempk]
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.
Linjära system 1
Bygga matriser
I
Vektorer och matriser i Matlab
ans =
5
Kolonnotationen gör det enkelt att
hantera delmatriser
3
1
0
2
7
0
1
6
5
3
>> A(2,:) = [0 0];
I
A(:,j)
kolonn j i A
>> B = A(2:3, 1:2)
A =
1
0
2
I
A(i,:)
rad i i A
B =
I
A(i:k,j:m)
delmatris
rader i , i C 1, . . . , k ;
kolonner j , j C 1, . . . , m
7
0
1
Numeriska metoder för civilingenjörer
7 november 2008
7 / 33
Martin Berggren ()
0
2
0
1
Numeriska metoder för civilingenjörer
Linjära system 1
Algoritmer: gausselimination, bakåtsubstitution
Linjära system 1
Algoritmer
I
Algoritmer: gausselimination, bakåtsubstitution
Gausselimination—grundalgoritmen
Matlabs “backslash”-operator (\) löser systemet Ax D b
Gausselimination genomförs i två steg:
>> x = A\b
I
Standardalgoritm: gausselimination baserad på LU-faktorisering
(dagens ämne!)
I
“Intelligent” operator: väljer olika metoder beroende på matrisens
struktur
I
Egentlig gausselimination: Systemet Ax D b transformeras via
elementära radoperationer till formen Ux D d där U är en
övertriangulär matris
I
Bakåtsubstitution: Systemet Ux D d löses
“Naiv” version (som när man räknar för hand):
I
Indata: A, b , n (matrisordning)
1. Bilda totalmatrisen AO D ŒA b!
2. För kolonn k D 1, 2, . . . , n ! 1
Nollställ elementen i kolonn k för alla rader i nedanför kolonn k genom
att addera lämplig multipel av rad k till rad i D k C 1, k C 2, . . . , n
Martin Berggren ()
Numeriska metoder för civilingenjörer
Linjära system 1
7 november 2008
9 / 33
Algoritmer: gausselimination, bakåtsubstitution
Indata: A , b , n (matrisordning)
I
Bilda totalmatrisen Aug = [A
I
Indata: U, d, n
b]
I
x(n) = d(n)/U(n,n)
för k = 1: n-1
för i = k+1:n
Lik = Aug(i,k)/Aug(k,k)
Aug(i,k:n+1) = Aug(i,k:n+1) - Lik*Aug(k,k:n+1)
I
för i = n-1:-1:1
I
Obs att U skrivs in i övertriangeln av Aug(1:n,1:n) och d in i
Aug(1:n,n+1)!
I
Denna överskrivning gör att man sparar minne. Viktigt då matrisen är
stor!
Numeriska metoder för civilingenjörer
7 november 2008
10 / 33
Algoritmer: gausselimination, bakåtsubstitution
Bakåtsubstitution i pseudokod
I
Martin Berggren ()
Numeriska metoder för civilingenjörer
Linjära system 1
Gausselimination—naiv version i pseudokod
I
Martin Berggren ()
7 november 2008
x(i)= ( d(i) - U(i,i+1:n)*x(i+1:n) )/(U(i,i)
11 / 33
I
Obs att i praktiken används Aug(1:n,1:n) istället för U
I
Vanligen lagras x i Aug(1:n,n+1) (d v s man skriver över vektorn d) i
stället för i en separat variabel x!
Martin Berggren ()
Numeriska metoder för civilingenjörer
7 november 2008
12 / 33
Linjära system 1
Algoritmer: gausselimination, bakåtsubstitution
Linjära system 1
Naiv gausselimination är instabil
Naiv gausselimination är instabil
Exempel:
0
1
0
1
3 !1
2
8
2:01
) @0 0:333 !1:67 !3:67A ) fl.x/ D @!0:848A
0
0
11:0
22:1
1:61
0
1
0 1
3 !1 2
8
1
.A j b/ D @1 0 !1 !1A med exakta lösningen x D @!1A
4 2 !3 !4
2
vilket är långt från den riktiga lösningen x D .1; !1; 2/T
Låt Li k vara faktorn som används för att nollställa ai k . Anta 3 siffrors
noggrannhet
fl.L21 / D fl.1=3/ D 0:333
Instabil algoritm: algoritmen förstärker successivt avrundningsfelen. Orsakar
ett stort fel i lösningen
fl.L31 / D fl.4=3/ D 1:33
0
1
3 !1
2
8
) @0 0:333 !1:67 !3:67A
0 3:33 !5:67 !14:6
Kom ihåg:
Aug(i,k:n+1) = Aug(i,k:n+1) - Lik*Aug(k,k:n+1)
Problemet: om jLi k j > 1 så kommer multiplikationen att förstora
avrundningsfelen!
fl.L32 / D fl.3:33=0:333/ D 10
Martin Berggren ()
Numeriska metoder för civilingenjörer
Linjära system 1
Avrundningsfelen kommer successivt att bli värre och värre
7 november 2008
13 / 33
Martin Berggren ()
Linjära system 1
Stabilisering via radpivotering
Åtgärd: radpivotering
I
För varje nytt k , hitta på vilken rad m det gäller att
Aug(m,k) " Aug(i,k), i = k, k+1, ..., n
I
I ord: hitta det till beloppet största elementet i kolonn k i nedanför och
inkluderande diagonalen
I
Byt plats på rad m och k
I
När Li k skapas divideras då med det största elementet i kolonnen
I
Resultat: jLi k j # 1, vilken stabiliserar algoritmen
Numeriska metoder för civilingenjörer
7 november 2008
14 / 33
Algoritmer: gausselimination, bakåtsubstitution
Radpivotering
Tidigare exempel:
Martin Berggren ()
Numeriska metoder för civilingenjörer
Algoritmer: gausselimination, bakåtsubstitution
I
Algoritmer: gausselimination, bakåtsubstitution
0
1
3 !1 2
8
.A j b/ D @1 0 !1 !1A
4 2 !3 !4
0
1
4 2 !3 !4
@1 0 !1 !1A
3 !1 2
8
fl.L21 / D fl.1=4/ D 0:25
0
fl.L31 / D fl.3=4/ D 0:75
1
4
2
!3
!4
) @0 !0:5 !0:25 0 A
0 !2:5 4:25 11
7 november 2008
ˇ
ˇ
ˇ
ˇ Byt plats på rad 1 och 3
ˇ
15 / 33
Martin Berggren ()
ˇ
ˇ
ˇ
ˇ Byt plats på rad 2 och 3
ˇ
Numeriska metoder för civilingenjörer
7 november 2008
16 / 33
Linjära system 1
Algoritmer: gausselimination, bakåtsubstitution
Linjära system 1
Radpivotering
Exekveringstid
0
1
4
2
!3
!4
) @0 !2:5 4:25 11 A
0 !0:5 !0:25 0
fl.L32 / D fl.!0:5= ! 2:5/ D 0:2
)
Martin Berggren ()
0
1
4
2
!3
!4
@0 !2:5 4:25
11 A
0
0
!1:1 !2:2
Numeriska metoder för civilingenjörer
Linjära system 1
)
x1 D 1
x2 D !1
x3 D 2
7 november 2008
I
För stora matriser kan det ta mycket lång tid att exekvera (utföra)
gausselimination
I
Lämpligt med ett datoroberoende mått på hur beräkningskrävande en
algoritm är
I
Centralt begrepp: en algoritms komplexitet
I
Komplexitet mäts på olika sätt för olika typer av algoritmer
17 / 33
Martin Berggren ()
Linjära system 1
I
Lämpligt komplexitetsmått: antal aritmetiska operationer
I
Exekveringstiden kommer väsentligen att vara proportionell mot detta
(minneshanteringen påverkar också exekveringstiden, särskilt för
mycket stora problem)
Centralt problem: hur beror antalet aritmetiska operationer på matrisen
ordning?
18 / 33
Algoritmer: gausselimination, bakåtsubstitution
I
Undersök gausseliminationen för ett godtyckligt k D 1, . . . , n ! 1
för i = k+1:n
Lik = Aug(i,k)/Aug(k,k)
Aug(i,k:n+1) =
Aug(i,k:n+1) - Lik*Aug(k,k:n+1)
#
$
Antal op: .n ! k/ 1 C 2.n ! k C 2/ $ 2.n ! k/2
7 november 2008
19 / 33
utförs n ! k gånger
1 op
n ! k C 2 element
2 op per element
(räknar enbart högsta
potens)
Summera över alla k :
n!1
X
kD1
Numeriska metoder för civilingenjörer
7 november 2008
Komplexitetsanalys
I
Martin Berggren ()
Numeriska metoder för civilingenjörer
Algoritmer: gausselimination, bakåtsubstitution
Komplexitet hos gausselimination
I
Algoritmer: gausselimination, bakåtsubstitution
2
2.n ! k/2 D n3 C O.n2 /
3
(Lemma 8.3.1 i bok)
I
Slutsats: gausselimination av ett n % n-system kräver 23 n3 C O.n2 /
aritmetiska operationer
I
Analog analys: bakåtsubstitution kräver
operationer
Martin Berggren ()
n2
2
Numeriska metoder för civilingenjörer
C O.n/ aritmetiska
7 november 2008
20 / 33
Linjära system 1
Algoritmer: gausselimination, bakåtsubstitution
Linjära system 1
Komplexitetsanalys
Komplexitetsanalys
Vad betyder detta i exekveringstid?
Hur stort system kan lösas på en timme om datorn klarar 1 Gflop/s? (Gflop =
109 flyttalsoperationer)
Antag tf D 10!9 s/flyttalsop (s/flop); ett realistiskt tal
n
103
106
faktorisering
bakåtsubstitution
2 3
3 n tf
n2 tf
10!3 s
103 s $ 17 min
0:67 s
0:67 % 109 s $ 21 år
Martin Berggren ()
Numeriska metoder för civilingenjörer
Linjära system 1
Svar: 32 n3 & 10!9 D 3 600 ) n $ 18 000
Hur stort system kan lösas på en minut?
Svar: 23 n3 & 10!9 D 60 ) n $ 4 500
7 november 2008
Linjära system 1
I
Alternativ:
Utnyttja struktur i matrisen, om möjligt. Finns versioner av
gausselimination t ex för bandade eller mycket glesa matriser
En helt annan typ av algoritmer, iterativa algoritmer, blir nödvändiga för
mycket stora, glesa matriser
I
I
Sådana matriser kommer ofta från lösning av partiella
differentialekvationer
För sådana problem förekommer matrisordningar upp till n D 108 !
Kräver stora paralleldatorer (t ex den nya Akka här i Umeå) och speciellt
anpassade algoritmer
Martin Berggren ()
Numeriska metoder för civilingenjörer
7 november 2008
22 / 33
Algoritmer: gausselimination, bakåtsubstitution
LU-faktorisering
Komplexiteten O.n3 / begränsar användbarheten hos gausselimination
I
Numeriska metoder för civilingenjörer
Algoritmer: gausselimination, bakåtsubstitution
I
I
Martin Berggren ()
21 / 33
Behov av effektiva algoritmer
I
Algoritmer: gausselimination, bakåtsubstitution
7 november 2008
23 / 33
I
I
Vanlig situation: följd av ekvationssystem med samma matris men med
olika högerled:
Ax .k/ D b .k/ ; k D 1, . . . , m
Idé: faktorisera A en gång för alla:
I Spara U
I Spara faktorerna L
i k i en matris L
I
Spara informationen om pivoteringen i en matris P
I
Detta kallas LU-faktorisering av A
I
Kan visa att LU D PA
Martin Berggren ()
Numeriska metoder för civilingenjörer
7 november 2008
24 / 33
Linjära system 1
Algoritmer: gausselimination, bakåtsubstitution
Linjära system 1
LU-faktorisering
I
I
LU-faktorisering
Givet A, beräkna L, U , P , så att LU D PA
Ax D b ) PAx D P b ) LU D P b
Vad vinner man på LU-faktorisering jämfört med “vanlig” gausselimination?
(faktorisering, O.n3 /)
I
Ineffektiv strategi: Lös varje system med x=A\b
I
För varje högerled b .k/ , utför
I
I
Lös problemet
(framåtsubstitution, O.n2 /)
Ld D P b
I
I
I
I
(bakåtsubstitution, O.n2 /)
Ux D d
I
för att bestämma lösningen x .k/
Numeriska metoder för civilingenjörer
Linjära system 1
7 november 2008
Martin Berggren ()
d = L\b
x = U\d
Komplexitet: 23 n3 C 2mn2
(1 faktorisering + m framåt- och bakåtsubstitution)
Martin Berggren ()
25 / 33
Numeriska metoder för civilingenjörer
Algoritmer: gausselimination, bakåtsubstitution
Linjära system 1
LU-faktorisering i Matlab
>> A = [3 -1 2; 1 0 -1; 4 2
>> b = [8; -1; -4];
>> [L, U, P] = lu(A);
L =
1.0000
0
0
0.7500
1.0000
0
0.2500
0.2000
1.0000
U =
4.0000
2.0000
-3.0000
0
-2.5000
4.2500
0
0
-1.1000
P =
0
0
1
1
0
0
0
1
0
A kommer att faktoriseras på nytt för varje högerled!
Komplexitet: m. 23 n3 C n2 / (m system med faktorisering +
bakåtsubstitution)
Effektiv strategi: LU-faktorisera A (lu(A) i Matlab) och lös sedan varje
system med
för att bestämma d
Lös problemet
Martin Berggren ()
Algoritmer: gausselimination, bakåtsubstitution
7 november 2008
26 / 33
Algoritmer: gausselimination, bakåtsubstitution
LU-faktorisering i Matlab
-3];
Numeriska metoder för civilingenjörer
Kolla:
Lösning med LU-faktorisering
>> P*A
ans =
4
3
1
>> L*U
ans =
4
3
1
>> d = L\(P*b)
d =
-4.0000
11.0000
-2.2000
>> x = U\d
x =
1
-1
2
2
-1
0
-3
2
-1
2
-1
0
-3
2
-1
Obs: När matriserna är under- eller övertriangulära väljer
backslashoperatorn algoritmerna för framåt- respektive bakåtsubstitution
7 november 2008
27 / 33
Martin Berggren ()
Numeriska metoder för civilingenjörer
7 november 2008
28 / 33
Linjära system 1
Algoritmer: gausselimination, bakåtsubstitution
Linjära system 1
LU-faktorisering i Matlab
LU-faktorisering: exempel
Matematiskt objekt
Använder backslash LU-faktorisering? Testa!
2
-4
-2
2
-2
2
-2
2
9
matris
0
1
!4 !2 !2
@2
2 !2A
!2 3
9
I Indikerar användning av LU-faktorisering
40 högerled lagras i matrisen B40 D Œb1 b2 : : : b40 !
permutationsvektor
-4
2
-2
-2
2
2
2
-2
9
matris
Martin Berggren ()
Numeriska metoder för civilingenjörer
Linjära system 1
7 november 2008
29 / 33
2
1
3
permutationsvektor
7 november 2008
30 / 33
Algoritmer: gausselimination, bakåtsubstitution
LU-faktorisering: exempel
-4
-2
-1/2 1
1/2 4
2
-1
8
matris
Elimination, kolonn 2, med faktorer L32 D 1=4:
2
1
3
0
1
!4 !2 !2
@0
4
8A
0
0 !3
permutationsvektor
Radbyte:
-4
-2
2
1/2 4
8
-1/2 1/4 -3
matris
Klart! Matristolkning av datastrukturerna:
-4
-2
1/2 4
-1/2 1
matris
Martin Berggren ()
Numeriska metoder för civilingenjörer
Linjära system 1
Elimination, kolonn 1, med faktorer L21 D !1=2, L31 D 1=2:
0
1
!4 !2 !2
@0
4
8A
0
1 !1
Martin Berggren ()
Algoritmer: gausselimination, bakåtsubstitution
LU-faktorisering: exempel
1
ˇ 0
!4 !2 !2
ˇ
ˇ @
1 !1A
ˇ! 0
ˇ
! 0
4
8
1
2
3
Radbyte:
40 system med samma matris läses nästan lika fort som 1 system!
I Observera att
Datastrukturer
1
ˇ 0
2 !2
ˇ! 2
ˇ @
ˇ! !4 !2 !2A
ˇ
!2 3
9
>> n = 2000;
>> A = rand(n,n);
>> B40 = rand(n, 40); b1 = rand(n,1);
>> tic; X = A\B40; toc
Elapsed time is 1.883686 seconds.
>> tic; x = A\b1; toc
Elapsed time is 1.481570 seconds.
I
Algoritmer: gausselimination, bakåtsubstitution
Numeriska metoder för civilingenjörer
2
8
-1
0
2
3
1
permutationsvektor
7 november 2008
31 / 33
1
1
0 0
1 0A ;
L D @ 1=2
!1=2 1=4 1
Martin Berggren ()
0
1
!4 !2 2
4
8 A;
U D@ 0
0
0 !3
Numeriska metoder för civilingenjörer
2
3
1
permutationsvektor
0
1
0 1 0
P D @0 0 1A
1 0 0
7 november 2008
32 / 33
Linjära system 1
Algoritmer: gausselimination, bakåtsubstitution
LU-faktorisering: exempel
0
I
I
I
1
LU D @ 1=2
!1=2
0
0
PA D @0
1
10
1 0
1
0 0
!4 !2 2
!4 !2 2
1 0A @ 0
4
8 A D @!2 3
9A
1=4 1
0
0 !3
2
2 !2
10
1 0
1
1 0
2
2 !2
!4 !2 2
0 1A @!4 !2 2 A D @!2 3
9A
0 0
!2 3
9
2
2 !2
Slutsats: LU D PA
L och U lagras i A:s minnesutrymme
Permutationsinformationen lagras i en vektor (en full matris P med
mest nollor vore slöseri med minnesutrymme)
Martin Berggren ()
Numeriska metoder för civilingenjörer
7 november 2008
33 / 33