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