LAB 2. LINJÄR ALGEBRA 1 Inledning 2 Matrisfaktorisering

TANA18/25 februari 2016
LAB 2. LINJÄR ALGEBRA
1
Inledning
Lösning av ett linjärt ekvationssystem Ax = b förekommer ofta inom tekniska beräkningar. I
laborationen studeras Gauss-elimination med eller utan pivotering (radbyten). Gauss-elimination
kan tolkas så att man först beräknar matrisens LU-faktorisering. För att få lösningen x löses sedan
två triangulära ekvationssystem.
1.1
Innehåll
Du ska
1. använda MATLAB för LU-faktorisera matriser och lösa linjära ekvationssystem.
2. utnyttja LU-faktoriseringen för att lösa ekvationssystem med samma matris men olika
högerled.
3. undersöka aritmetiska komplexiteten vid lösning av ekvationssystem
4. studera hur pivotering påverkar noggrannheten i olika situationer.
5. studera hur storleken på konditionstalet påverkar noggrannheten.
6. använda minsta kvadratmetoden
1.2
Att komma igång, OBS!
Öppna ett terminalfönster. Skriv sedan i terminalfönstret:
TANA02setup
matlab &
2
Matrisfaktorisering och lösning till ekvationssystem
Vi skall lösa ekvationssystemet Ax = b:


 
0.8
6.6 10.2
5
 2
4
8 x =  0 .
−1.2 −1.9 −3.1
0.5
Uppgift 2.1
Skapa matrisen och högerledet i MATLAB. Beräkna matrisens faktorisering.
Skriv: [L, U, P] = lu(A)
Ange L, U och P .
Bilda L · U och ange vad du erhöll.
Svar:
Har pivotering använts? Ange hur du avgjorde det.
Svar:
1
Uppgift 2.2 Vi ska nu lösa ekvationssystemet Ax = b på några olika sätt.
(a) Lös ekvationssystemet genom att utnyttja LU -faktoriseringen. Använd kursbibliotekets program fram och bak (help fram och help bak ger information).
Beskriv anrop och ange resultat och mellanresultat.
Beräkna Ax − b för att kontrollera resultatet. Fick vi exakt lösning? Svar:
(b) Använd \-operatorn för att bestämma x. Jämför med resultatet från (a) och ange ev.
skillnad.
Svar:
(c) Bestäm Ax1 = b genom att använda A:s invers.
Beräkna Ax1 − b och förklara vad som är nackdelen med att bilda inversen.
Svar:
Matrisfaktoriseringen kan även utnyttjas för att lösa mer komplicerade problem. Ett exempel är
ekvationen
A4 x = b dvs A · A · A · Ax = b
där A är en godtycklig, icke-singulär matris. Vi kan införa beteckningar enligt
A · |{z}
A3 x = b,
z1
A · |{z}
A2 x = z1,
z2
A · |{z}
Ax = z2,
Ax = z3
z3
Uppgift 2.3 (frivillig) Skriv ett MATLAB-skript som först LU -faktoriserar en matris och sedan utnyttjar faktoriseringen för att beräkna x på ett effektivt sätt, dvs utan att bilda
A4 .
Du ska utnyttja MATLAB:s standardrutiner och program på kursbiblioteket.
Skriv ner ditt program.
Uppgift 2.4 (frivillig) Fortsätt med samma A och b som tidigare. Beräkna lösningen x till
ekvationssystemet A4 x = b. Använd programmet från uppgift 2.3. Ange lösningen.
Svar: x =
2
3
Aritmetisk komplexitet
Undersök effektiviteten vid beräkning av ett linjärt ekvationssystem Ax = b genom att mäta
tidsåtgången med hjälp av tic och toc.
Uppgift 3.1 Slumpmatriser av storlek n × n skapas genom kommandot A = rand(n,n); och
vektorer av längd n skapas genom b = rand(n,1);
Välj t.ex. n = 1000.
Skapa en matris och en vektor, lös ekvationssystemet med \-operatorn och mät tiden.
Skriv: n=1000; A=rand(n,n); b=rand(n,1); tic; x=A\b; toc
Använd inversen i stället och mät tiden. (tic; x=inv(A)*b; toc)
Dubbla matrisstorleken några gånger så länge tiderna inte överstiger några sekunder. Fyll
i tiderna, t(n), i tabellen samt räkna ut kvoterna mellan dem.
n
t(n) med \
t(2n)/t(n)
t(n) med inversen
t(2n)/t(n)
Antag att tiden beror på matrisens storlek som t(n) ≈ c · np . Bestäm p för \-operatorn
resp. inversen.
Svar: p =
för \-operatorn p =
för inversen
Uppgift 3.2 Vad drar du för slutsatser när det gäller att lösa ekvationssystem med hjälp av
inversen? Motivera ditt svar!
Svar:
Uppgift 3.3 (frivillig) Gör en liknande undersökning av tiden för att lösa ett övertriangulärt
ekvationssystem, dvs. göra en bakåtsubstitution.
n=1000; A=triu(rand(n,n)); b=rand(n,1); tic; x=A\b; toc
Dubbla matrisstorleken några gånger.
n
t(n) med \
t(2n)/t(n)
Antag att tiden beror på matrisens storlek som t(n) ≈ c · np . Bestäm p för bakårstubstitution.
Svar: p =
3
4
Effekten av partiell pivotering
Uppgift 4.1 Varför bör pivotering användas vid faktorisering av en godtycklig icke-singulär
matris?
Svar:
Vi söker en lösning till ekvationssystemet Ax = b, där

 −13
10
1
 1
2 1 

och
A=

1 0 1
1 2
Uppgift 4.2
Bestäm konditionstalet för A.
 
1
4

b=
2 .
3
κ∞ (A) =
Eftersom konditionstalet är litet är det möjligt att få god noggrannhet när vi löser Ax = b.
Uppgift 4.3 Utan pivotering Använd format short e
Vi beräknar först lösningen x utan pivotering.
Beräkna matrisens faktorisering A = Lu · Uu med kursbibliotekets program gauss.
Ange största elementet i Lu :
Utnyttja faktoriseringen för att beräkna lösningen x.
Ange x = xu =
Uppgift 4.4 Med pivotering
Vi beräknar lösningen x till ekvationssystemet i uppgift 4.3 på nytt. Denna gång ska pivotering användas. Använd \-operatorn, det är enklast.
Ange x = xm =
Ange det största elementet i L då
pivotering används (kan anges utan att L beräknas).
Svar:
Uppgift 4.5 Slutsatser
Vilken lösning (med/utan pivotering) kan vi lita på? Motivera svaret!
4
5
Felanalys
MATLAB:s avrundningsenhet är µ = 2−53 . Vid lagringen av högerledet, b, görs ett avrundningsfel. De relativa och absoluta felen vid lagringen av ett element, bi , i b blir
k∆bk∞
|∆bi |
≤ µ så |∆bi | ≤ µ|bi |. Vi kan då uppskatta k∆bk∞ ≤ µ max |bi | så
≤µ
i
|bi |
kbk∞
k∆bk∞
k∆xk∞
≤ κ∞ (A)
≤ κ∞ (A) · µ
och feluppskattningsformeln blir
kxk∞
kbk∞
Återskapande av en deformerad bild
Uppgift 5.1 I Småland finns ett intressant besöksmål för turister. Objektet beskrivs med en
vektor a ∈ R101 i programmet bild. Skriv bild
En turist befinner sig långt borta och ser objektet endast vagt. Programmet bild har
skapat en 101 × 101 matris A som beskriver hur bilden har försämrats för turisten. Den
försämrade bilden betecknas med b och bildas med b = A · a. Bilda och rita b ( plot(b) ) .
Skissa bilderna a och b.
Turisten har en laptop med sig och försöker att återskapa den riktiga bilden a. Då måste ekvationssystemet Ax = b lösas.
Uppgift 5.2 Lös ekvationssystemet i MATLAB. Plotta lösningen.
(a) Skissa lösningen x.
(b) Verkar lösningen rimlig?
Svar:
(c) Hur stort är det verkliga felet k∆xk∞ i den beräknade lösningen ungefär? Svar:
Vi ska nu teoretiskt undersöka noggrannheten hos den beräknade lösningen.
Uppgift 5.3 Beräkna konditionstalet κ∞ (A) ( cond(A, inf) ) samt den övre teoretiska gränsen för relativa felet uttryckt i maxnorm. Beräkna slutligen k∆xk∞ .
κ∞ (A) =
k∆xk∞
≤
kxk∞
k∆xk∞ ≤
Uppgift 5.4 Jämför feluppskattningen i uppgift 5.3 med det verkliga felet som du bestämde
i uppgift 5.2. Förutsäger den teoretiska uppskattningen vad som händer vid den praktiska
beräkningen?
Är problemet att beräkna lösningen x välkonditionerat? Motivera svaren.
Svar:
5
6
Minsta kvadratmetoden
Gauss prediktion av Ceres bana.
Carl Friedrich Gauss var den mest betydande och inflytelserika matematikern under första hälften
av 1800-talet. Gauss var också intresserad av tillämpad matematik, t.ex var han skicklig i att
utföra komplicerade uträkningar för hand.
Ceres upptäcktes på nyårsdagen 1801 av astronomen Giuseppe Piazzi. Med en diameter på ca
950 km är den den största och mest massiva asteroiden i asteroidbältet.
Piazzi fortsatte att observera Ceres till den 11 februari då han hindrades att fortsätta på grund av
sjukdom. När han återupptog sina observationer hade Ceres försvunnit då dess bana skymdes av
solen. För att återfinna asteroiden utvecklade Gauss (han var då 23 år) minsta kvadratmetoden.
Metoden visade sig fungera då Ceres blev återfunnen av tyska astronomer påföljande år precis
där Gauss förutsagt.
Vi ska återupprepa (något förenklat) Gauss metod och ansätter därför följande modell för att
beskriva en elliptisk bana i planet:
c0 y 2 + c1 xy + c2 x + c3 y = x2 .
Tabellen ceres (fås genom att skriva ceres i matlab-fönstret) innnehåller m = 9 observationer
av asteroidens läge {xi , yi }m
1 .
x = (0, 1, 2, 3, 4, 5, 6, 5, 4),
y = (0, 1.5, 2.5, 3, 2.75, 2, 0, −1, −2)
Skriv in det överbestämda ekvationssystemet i MATLAB.
Tips. Matrisen kan skrivas in som A=[y.ˆ2 x.*y x y]
Hur fås högerledet b?
Svar:
Bilda sedan normalekvationerna och lös dem i Matlab. Ange nedan vilka MATLAB kommandon
som du använde samt värdena på c0 , c1 , c2 och c3 .
Matlab-kommandon:
c0 =
c1 =
c2 =
c3 =
Plotta den beräknade kurvan.
Tips. Kurvor kan enkelt ritas med kommandot ezplot. Exempel: kurvan 1 − x2 + 2x3 = y 2 ritas
med kommandot
ezplot(’1-x^2+2*x^3-y^2’)
Observera att numeriska värden på koefficienterna måste användas. Det räcker att ta med 2
decimaler i de uträknade värdena på koefficienterna c0 – c3 . Plotta sedan tabellvärdena i samma
figur (skriv först hold on och sedan plot(x,y,’*’)).
Redovisa figuren antingen med en utskrift eller handritad skiss nedan.
6