KTH Matemati Tentamen del 2 SF1511, 2017-03-16, l 800-1100, Numerisa metoder och grundläggande programmering Del 2, Max 50p + bonuspoäng (max 4p) Inga hjälpmedel Rättas endast om del 1 är godänd Betygsgränser inl bonuspoäng: 10p D, 20p C, 30p B, 40p A P1 Givet differentialevationen d 3 y dx cos(x)dy 3 dx α d2 y dx = 0, y(0) = 10, dy d (0) = 0, 2 dx 2 y (0) = 1 dx2 (4p) (6p) (7p) a Sriv om problemet till ett system av differentialevationer av första ordningen b Sriv ett Matlab-program som löser det omsrivna problemet för α = 01 för x på intervallet 0 till 5 och ritar upp funtionen w(x) = y(x) + 5y (x) c När ett program som löser differentialevationen ördes för α = 005 fic man y(5) till 1746407 När α ändrades till 05 blev y(5) = 2477647 Du vill hitta ett α som ger y(5) = 20 Man an göra detta på flera olia sätt Besriv en algoritm, tex i form av ett Matlab-program, som med fem decimalers noggrannhet hittar α Disutera hur effetiv din algoritm är Alltför ineffetiva metoder ger inte full poäng Lösning: P1a Låt u 1 (x) = y(x), u 2 (x) = y (x) och u 3 (x) = y (x) Det ger d dx u 1 (x) u 2 (x) = u 3 (x) u 2 (x) u 3 (x) cos(x)u 2 (x) + αu 3 (x), u 1 (0) 10 u 2 (0) = 0, u 3 (0) 1 eftersom u 3(x) = y (x) = cos(x)y (x) + αy (x) = cos(x)u 2 (x) + αu 3 (x) P1b alfa = 01; % alfa h = 02; % Steglängd för oberoende variabeln x xve = [0:h:5] ; % x-intervall u = [10 0 1] ; % Startvärden för y, y och y umat = u ; % Lagra u for x = xve(1:end-1) u = u + h*fun(x, u, alfa); % Framåt Euler umat = [umat ; u ]; % Lagra u end w = umat(:,1) + 5*uMat(:,2); % w = y + 5y plot (xve, w)
P1c Gör först om programmet i deluppgift (b) till en funtion som tar α som indata och som returnerar y(5) Man behöver byta ut raden alpha=01 till en funtionsheader och lägga till en rad på slutet som ser till att rätt värde returneras: function y5 = y5fun(alpha) <som tidigare, men utan raden som sätter alpha till 01> y5 = u(1); Man anropar sedan funtionen y5fun i ett yttre program som använder tex seantmetoden för att hitta det α som ger y5fun= 20, enligt: tol = 05e-5; a0 = 005; f0 = y5fun(a0)-20; a1 = 05; f1 = y5fun(a1)-20; while abs(a1-a0)>tol any = a1 - f1*(a1-a0)/(f1-f0); a0 = a1; f0 = f1; a1 = any; f1 = y5fun(a1)-20; end disp(a1) % Feltolerans % Startgissningar från uppgiftstexten % Seantmetoden P2 Ändarna av en två meter lång stav hålls vid de onstanta temperaturerna 20 C respetive 100 C Den stationära temperaturfördelningen u(x) i staven bestäms då av differentialevationen (10p) (10p) (4p) d2 u dx 2 = ex, u(0) = 20, u(2) = 100, där är stavens värmeledningsförmåga a Formulera en andra ordningens finit differensmetod för detta randvärdesproblem Låt u = (u 0,, u n+1 ) T eller u = (u 1,, u n ) T (välj det du föredrar) innehålla approximationerna u j u(x j ), där x j = hj och h = 2/(n + 1) Metoden leder till ett linjärt evationssystem Au = b av storle n n Härled uttryc för elementen i A-matrisen och i högerledet b när n = 3 (Evationssystemet behöver inte lösas) b Implementera metoden i Matlab för fallet = 5 Programmet sa räna ut vetorn u Det sa vara generellt och unna anropas med olia värden på n c Utöa ditt Matlab-program så att det ocså beränar en andra ordningens approximation av u (1) Var god vänd
Lösning: P2a I varje inre punt, j = 0,, n + 1 eller j = 1,, n, approximerar vi andraderivatan i evationen med andra ordningens centraldifferensvot Det ger d 2 u dx 2 j u j 1 2u j + u j+1 h 2 u j 1 2u j + u j+1 h 2 = e x j, j = 0,, n + 1 eller j = 1,, n Multiplicera med h 2 och dividera med, u j 1 + 2u j u j+1 = h 2 ex j, j = 0,, n + 1 eller j = 1,, n (1) För j = 0,, n + 1, sätt in randvilloren på första och sista raden i matris A Det ger det linjära evationssystemet Au = b med 1 1 2 1 A =, 1 2 1 1 och högerledet 20 h 2 ex 1 b = h 2 exn 100 När n = 3 har vi h = 1/2 och systemet blir 1 0 0 0 0 u 0 20 1 2 1 0 0 u 1 e 0 1 2 1 0 u 2 0 0 1 2 1 u 3 = 05 4 e 4 e 15 4 0 0 0 0 1 u 4 100 För j = 1,, n, utnyttja randvilloren för att eliminera u 0 och u n+1 : u 0 = 20, u n+1 = 100 Detta ger för j = 1, och för j = n, 2u 1 u 2 = h 2 ex 1 u n 1 + 2u n = h 2 exn + 20, (2) + 100 (3)
Tillsammans ger (1,2,3) det linjära evationssystemet Au = b med 2 1 1 2 1 A =, 1 2 1 1 2 och högerledet b = h 2 ex 1 + 20 h 2 ex 2 h 2 ex n 1 h 2 exn + 100 När n = 3 har vi h = 1/2 och systemet blir e 2 1 0 u 05 1 + 20 4 1 2 1 u 2 = e 4 0 1 2 u e 15 3 + 100 4 P2b och c clear all, close all, clc n = 3; % Antal inre punter = 5; % Stavens värmeledningsförmåga h = 2/(n+1); % Steglängd i x x = [0:h:2] ; % Oberoende variabeln % För j = 0,, n+1 sup = -ones(n+1, 1); % Superdiagonalen d = 2*ones(n+2, 1); % Huvuddiagonalen sub = -ones(n+1, 1); % Subdiagonalen A = diag(sup,1) + diag(d,0) + diag (sub,-1); % A-matrisen A(1,1) = 1; % Ändra första raden A(1,2) = 0; % Ändra första raden A(end, end-1) = 0; % Ändra sista raden A(end, end) = 1; % Ändra sista raden b = 005*exp(x); % b-vetorn b(1) = 20; % Ändra första elementet b(end) = 100; % Ändra sista elementet u = A\b; % Beräna u % För j = 1,, n sup = -ones(n-1, 1); % Superdiagonalen d = 2*ones(n, 1); % Huvuddiagonalen sub = -ones(n-1, 1); % Subdiagonalen A = diag(sup,1) + diag(d,0) + diag (sub,-1); % A-matrisen b = 005*exp(x(2:end-1)); % b-vetorn b(1) = b(1) + 20; % Justera 1:a elementet b(end) = b(end) + 100; % Justera sista elementet u = A\b; % Beräna u u = [20 ; u ; 100]; % Lägg till ränderna
% Beräna u (1), dvs uppgift P2c if 1 == mod(n,2) % Om n är udda uprimvidx1 = (u(n/2+25) - u(n/2+05)) / (2*h) else % Om n är jämnt uprimvidx1 = (u(n/2+2) - u(n/2+1)) / h end P3 Givet I = 4 f(x)dx med värden enligt tabellen 0 x 0 1 2 3 4 f(x) 200 250 281,5 299,5 300 I h betecnar approximationen av I, då I beränas med trapetsregeln med steglängden h Om någon deluppgift behöver resultatet från en föregående deluppgift och du inte har egna resultat, får du använda en rimlig uppsattning a Beräna I 4 för hand b Beräna I 2 för hand c R 2 betecnar en Richardsonextrapolation utifrån I 4 och I 2 Beräna R 2 för hand d Beräna I 1 för hand e R 1 betecnar en Richarsonextrapolation utifrån I 2 och I 1 Beräna R 1 för hand (2p) (2p) f Gör en Richardsonextrapolation för hand utifrån R 2 och R 1 g Sriv ett matlabprogram som beränar I h, där steglängden h är en variabel som tilldelas ett värde i början av programmet Antag att det i samma mapp finns en färdigsriven fil funm med indata x och utdata f(x) enligt ovan, dvs favx = fun(x) Ovanstående tabell sa alltså inte användas Lösning: P3a 4(200/2 + 300/2) = 1000 P3b 2(200/2 + 2815 + 300/2) = 1063 P3c 1063 + (1063 1000)/(2 2 1) = 1084 P3d 1 (200/2 + 250 + 2815 + 2995 + 300/2) = 1081
P3e 1081 + (1081 1063)/(2 2 1) = 1087 P3f 1087 + (1087 1084)/(2 4 1) = 10872 P3g clear all, close all, clc h = 02; % Valfri steglängd x = 0:h:4; % x-vetor f = fun(x); % Färdigsriven funtion favx=fun(x) I = h * (sum(f) - f(1)/2 - f(end)/2) % Trapetsregeln