Johan Helsing, 11 oktober 2018 FMNF15 HT18: Beräkningsprogrammering Numerisk Analys, Matematikcentrum Inlämningsuppgift 3 Sista dag för inlämning: onsdag den 5 december. Syfte: att träna på att hitta lösningar till linjära ekvationssystem, samt på att bedöma noggrannheten i svaren. Innan du startar: Se till att du förstår programmet mylog.m på kursens webbsida. Problem 1. Ett enkelt linjärt ekvationssystem: Vi har ett linjärt ekvationssystem Ax = b, där x är en kolonnvektor med tre okända element och systemmatrisen A och högerledet b ges av A = 1 2 3 2 4 α 4 5 6 och b = Talet α skall varieras. Lös först detta system för x i Matlab med hjälp av backslashoperatorn och med α = 1. Vad blir lösningen? Beräkna också konditionstalet för A med hjälp av Matlabs funktion cond. Vad blir det? Lös nu ekvationssystemet för 30 olika α, jämnt fördelade i intervallet α [1, 6]. Vad händer med konditionstalet när α närmar sig 6? Hur stort blir det för α = 6? Vilka är egenvärdena hos A för α = 6? (Använd eig). Finns det någon entydig lösning x för α=6? Motivera ditt svar. Redovisning: Lämna in svar på alla frågor. Lämna också in en förklaring till vad som hände för α=6. Överkurs: Finns det någon lösning x för α = 6 om b ändras till b = [50; 100; 23]? Om det finns en lösning så finns det också oändligt många. Försök, om detta är fallet, att hitta den lösning x som har minst 2-norm. Problem 2. Konditionstalet för en tridiagonal systemmatris. En viss tridiagonal n n matris D, som ofta dyker upp i strukturmekaniska beräkningar, har element 2 på huvuddiagonalen och element 1 på första super- och subdiagonalerna. Matrisen kan skapas i Matlab genom sup=ones(n-1,1); cen=-2*ones(n,1); sub=ones(n-1,1); D=diag(sub,-1)+diag(cen,0)+diag(sup,1); 2.1 3.4 7.2. sida 1 av 5
Undersök experimentellt hur konditionstalet κ hos matrisen D beror av systemstorlek n. Gör så här: Skapa en vektor nvec=ceil(logspace(1,2,20)) och låt elementen i denna vektor vara de systemstorlekar du skall jobba med. Konstruera sedan en for-loop som beräknar konditionstalet hos D för de 20 olika systemstorlekarna i nvec. Matrisen D skall skapas i en underfunktion som anropas i for-loopen. Plotta konditionstalet som funktion av n i ett loglog-diagram. Gör två figurer: en av typen plot(log10(n),log10(κ), * ) och en av typen loglog(n,κ, * ). Hitta en formel för kurvan du ser, det vill säga för hur konditionstalet hos D beror på systemstorlek n. Hur stora linjära ekvationssystem är meningsfulla att lösa då D är systemmatris och högerledet är känt med en relativ noggrannhet av 0.0001? Du får själv bestämma hur stort fel du kan tolerera i lösningen. Redovisning: Lämna in programkod, figurer, formel för kurvan, och svar på frågan. Ange vilka kvantiteter som plottas med xlabel och ylabel. Problem 3. Lösning av ett tridiagonalt ekvationssystem. Du skall lösa ett linjärt system av n ekvationer för de n obekanta variablerna u i, i = 1, 2,..., n. Ekvationssystemet ges på ett kompakt och mycket vanligt skrivsätt av u i+1 + (2 λh 2 )u i u i 1 = 0, i = 1, 2,... n, u 0 = 1, (1) u n+1 = 1, där h = 1/(n + 1) och talet λ är känt. Antag att u i representerar lösningen till något balkproblem vid positionerna x i = ih, i = 0, 1, 2,..., n, n + 1. Övertyga dig om att (1) verkligen är ett system av n linjära ekvationer för de n obekanta värdena u i, i = 1, 2,..., n. Värdena u 0 och u n+1 är ju kända. Formulera nu ekvationssystemet (1) på matris-vektor-formen Du = b, (2) där D är en tridiagonal n n systemmatris, u är en kolonnvektor med de n obekanta värdena u i, och b är ett högerled på kolonnvektorform. Lös sedan systemet (2) tre gånger för u med tre olika λ. Använd Matlabs backslashoperator. Välj λ = 10, λ = 100, och λ = 1000. Plota, till sist, för varje λ-värde, u i som funktion av positionerna x i. Notera att du skall plotta alla värden u i, i = 0, 1, 2,..., n, n + 1. Testa n = 3, n = 9, och n = 99. Plotten för n = 99 skall se ut som den i Figur 1 på nästa sida. Redovisning: Lämna in programkod och plot för n = 99. 4. Överkurs: Konvergensstudie. Ekvationssystemet (1) kommer från en diskretisering av randvärdesproblemet u (x) = λu(x), 0 x 1, u(0) = u(1) = 1. (3) sida 2 av 5
1 0.9 0.8 =-10 =-100 =-1000 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Figur 1: Lösning till ekvation (1). När n ökar blir diskretiseringen allt bättre och den numeriska lösningen konvergerar (närmar sig) den exakta lösningen u(x) till det matematiska problemet (3). Lös systemet (1) med λ = 10 igen. Studera konvergensen för u i motsvarande position x i = 0.5 när n ökar. Om du väljer n udda så kommer index i = (n + 1)/2 alltid motsvara x i = 0.5. Kontrollera att svaret konvergerar mot u i = 0.3947709748714294 för i = (n + 1)/2. Hur stora system klarar du av att lösa? Hur snabbt konvergerar lösningen? (Som vilken potens av n avtar det relativa felet i u i?) Händer det något konstigt för riktigt stora n? Försök i så fall att förklara detta. Tips: Om du skapar systemmatrisen med spdiags i stället för med diag så bör du kunna lösa för system med n upp till hundra tusen på några sekunder. 5. Överkurs: Lösning av ett ickelinjärt ekvationssystem. Det ickelinjära ekvationssystemet x 2 + y 2 = 4, e x + y = 1, har två reellvärda lösningspar (x, y ). Hitta dessa par med högsta möjliga noggrannhet och med hjälp av Newtons metod för system. Tips: Börja med att plotta de kurvor som beskrivs av respektive ekvation. Skärningspunkterna kan användas som startgissningar. Om du hittar startgissningar som är korrekta med en decimal så skall du få lösningsparen med en relativ noggrannhet av 10 15 på fem iterationer. Programmeringen blir enkel om du har förstått programmet för att hitta roten till en ickelinjär ekvation med Newtons metod. Derivatan skall ersättas med Jacobianmatrisen (ibland kallad Jacobianen eller funktionalmatrisen) och abs kan behöva bytas mot norm. sida 3 av 5
6. Överkurs: en uppgift från Byggnadsfysiken. Inom Byggnadsfysiken löses ofta den endimensionella värmeledningsekvationen för temperaturen T (x, t) ( λ T ) = ρc T x x t, 0 x L, t 0. (4) Om värmeledningen i området, λ [W/(mK)], är konstant kan (4) skrivas som 2 T x 2 = 1 a T t, a = λ ρc. (5) Här är a [m 2 /s] värmediffustivitet och ρc är värmekapacitet per volymsenhet [kg/m 3 J/(kgK)= J/(m 3 K)]. För att värmeledningsekvationen skall ha en entydig lösning krävs begynnelsevillkor och randvillkor, till exempel T (x, 0) = T B0, 0 x L, (6) T (0, t) = T R1, T (L, t) = T R2, t > 0. (7) Detta betyder att temperaturen är T B0 överallt vid tiden t = 0. Därefter ändras temperaturen på ränderna så att den är T R1 för x = 0 och T R2 för x = L. Efter lång tid kommer temperaturen då att variera linjärt genom området. Detta kallas stationär lösning T stat (x) = T R1 + x L (T R2 T R1 ). (8) För korta tider kommer lösningen att ligga mellan dessa ytterligheter. Systemet (5), (6), och (7) kan lösas analytiskt, men uppgiften här är att lösa det numeriskt med en vanlig metod. Området 0 x L delas in i N lika breda celler med bredd x = L/N och mittpunkter x n, n = 1,..., N. Tiden delas in i tidpunkter t i = i t, i = 0, 1,..., där t är tidssteget. Vi söker temperaturer i punkterna x n vid tidpunkterna t i och inför beteckningen T i n T (x n, t i ), n = 1,..., N, i = 0, 1,.... (9) Ekvation (5) kan nu skrivas på diskret form T i n+1 2T i n T i n 1 ( x) 2 = 1 a n Tn i, (10) t som omformat blir n = βt i n 1 + (1 2β)T i n + βt i n+1, β = a t/( x) 2. (11) Diskretiseringen innebär en approximation av (5). Ekvation (11) kan tolkas som att temperaturen i punkt x n vid tidpunkt t i+1 är en kombination av temperaturerna för cellen själv och de omgivande cellerna ett tidssteg innan. sida 4 av 5
För att lösningen till (11) skall fungera (vara stabil) måste vilket kan skrivas om som ett krav på tidssteget β 0.5, (12) t ( x) 2 /(2a). (13) Ju mindre celler (mindre x) desto mindre tidssteg t krävs för stabilitet. För den första och den sista cellen blir uttrycken lite annorlunda än i (11) eftersom de delvis är låsta av randvillkoren. Sammantaget kan man skriva den diskreta lösningen i den första tidpunkten (t 0 ) så här: och i alla andra tidpunkter så här: T 0 n = T B0, n = 1,... N, (14) T1 i+1 = 2βT R1 + (1 3β)T1 i + βt2 i, (15) Tn i+1 = βtn 1 i + (1 2β)Tn i + βtn+1 i, n = 2..., N 1, (16) N = βt N 1 i + (1 3β)TN i + 2βT R2, (17) där i = 0, 1,... och där (16) är samma som (11). Skriv nu (15), (16), och (17) på matris-vektorform = AT i + B, i = 0, 1,..., (18) där T i = [T i 1 ; T i 2 ;... ; T i N ] och B = 2β [T R1; 0;... ; 0; T R2 ] båda är kolonnvektorer med N element. Hur ser matrisen A ut? Låt L = 0.1m, a = 10 6 m 2 /s, T B0 = 20 C, T R1 = 30 C, T R2 = 20 C, och skriv ett Matlabprogram som utför tidsstegningen i (18). Vektorn T 0 fås ur (14). Välj N = 25 och ett stabilt tidssteg. Låt programmet producera en liten animering som visar hur temperaturfördelningen närmar sig den stationära lösningen (8). Redovisning: Lämna in programkod. Visa animeringen för din assistent. sida 5 av 5