TEKNISKA HÖGSKOLAN I LINKÖPING Matematiska institutionen Beräkningsmatematik/Fredrik Berntsson Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI Tid: 8-12, 20 Mars, 2015 Provkod: TEN1 Hjälpmedel: Inga. Examinator: Fredrik Berntsson Maximalt antal poäng: 18 poäng. För godkänt krävs 8 poäng. Jourhavandelärare Fredrik Berntsson (telefon 282860) Besök av jourhavande lärare sker ungefär 9.15 och 10.45. Resultat meddelas via epost senast tisdag 1:a April. Lösningsförslag finns på kurshemsidan efter tentans slut. Visning av tentamen sker på Examinators kontor onsdag den 1:a April, klockan 12.15-13.00 (Hus B, Ing. 23-25, Plan-3, A-korr). Lycka till!
Redovisning Lös först uppgifterna i Matlab. Då du har en färdig lösning skriv då ner de kommandon du använde på papper. Redovisa även eventuella resultat du fick då körde dina Matlab kommadon. Grafer behöver inte redovisas. (2p) 1: Följande funktion är tänkt att kontrollera om en vektor x är sorterad i stigande ordning function s = sorterade(x) for i = 1:length(x)-1 if x(i) > x(i+1) s = 0; else s = 1; Förklara tydligt vad som går fel och gör lämpliga ändringar så att funktionen ger förväntat resultat. (3p) 2: Vi vill studera funktionen f(x) = sin(x) 2 1 2 x3, på intervallet 0 x 1, och undersöka var dess maximum inträffar. a) Skapa en vektor x som innehåller N = 50 jämt utspridda tal på intervallet [0, 1]. Beräkna även en vektor f med motsvarande funktionsvärden och utnyttja dessa vektorer för att plotta funktionen på aktuellt intervall. b) Använd Matlab kommandot max för att hitta det största värdet i vektorn f. Detta approximerar funktionens maximala värde på intervallet. Hitta även det x-värde där funktionen antar sitt största värde. c) Markera punkten (x max,f max ) du hittat i b) uppgiften i den graf du ritat upp i a) uppgiften med ett rött +. (3p) 3: Vi vill beräkna en talföljd som definieras enligt reglerna, F 1 = 1, och F k = 5F k 1 k. Skriv de Matlab kommandon som krävs för att skapa en vektor av dimension N 1 som innehåller de första Nst talen i talföljden. Pröva ditt script med N = 5 och redovisa de första 5 talen i följden. Använd slutligen kommandot sum för att beräkna summan av de första 10 talen i talföljden. 2
(3p) 4: Vi vill beräkna skalärprodukten mellan två vektorer x och y genom att utnyttja formeln n (x,y) = x k y k. k=1 a) Skriv en function Skalar med två vektorer x och y som inparametrar och med skalärprodukten S = (x, y) som utparameter. b) Utnyttja funktionen från a) för att beräkna skalär produkten mellan vektorerna x = (1, 2, 3) T och y = (2, 3, 1) T. Tips I Matlab finns en inbyggd funktion dot som utför precis denna beräkning. Du kan använda den för att kontrollera att du gjort rätt men får inte utnyttja den för att lösa uppgiften. (3p) 5: Vi är intresserade av att undersöka koncentrationen av ett kemiskt ämne i ett vattrag. Vi gör en serie mätningar och får en vektor, F = (F 1,F 2,...,F n ) T, därf i är den uppmätta koncentrationen vid tident i. För att analysera mätningarna antar vi att dessa kan beskrivas med modellen F(t) c 1 +c 2 t+c 3 sin(t), där c 0, c 1, och c 2 är okända parametrar vi önskar bestämma. a) Modellen ovan leder till ett överbestämt ekvationssystem Ax = b som kan lösas med minsta kvadratmetoden. Visa tydligt hur ekvationssystemet skall se ut. Hur blir matrisen A respektive högerledet b? b) Antag att följande mätningar är givna t k 0 1 2 3 4 F(t k ) 1.52 3.01 3.26 2.01 0.63 Skriv de Matlab kommandon som krävs för att bilda både matrisen A och högerledet b. Lös dessutom minsta kvadrat problemet och hitta koefficienterna c 1, c 2 och c 3. c) Plotta den funktionskurva F(t) som du hittade i Uppgift b). Rita även upp de givna mätvärdena (t k,f k ) i samma Figur (som svarta o). 3
(4p) 6: Ett lokalt maximum för en vektor x definieras som ett element x(i) för vilket villkoret, x(i-1) x(i) x(i+1), är uppfyllt. För det första och sista elementet i vektorn skall vara ett lokalt maximum gäller ett liknande villkor. Skriv en funktion LokaltMax med en vektor x som inparameter, och som returnerar en vektor ind innehållande samtliga index i sådana att x(i) är lokala maxima. Exempelvis skall du kunna skriva >>x=[3 4 5 4 3 2 1 7 3]; >>[ind]=lokaltmax(x); och ind skall ges värdet ind=[3 8] eftersom lokala maxima finns på platserna 3 och 8 i vektorn x. 4
Lösningsförslag till tentan 20:e Mars 2015. 1: Problemet är att om sista två elementen ligger i rätt ordning så blir s = 1 oavsett vad som hänt tidigare. Enklast är att ändra alltså till. function s = sorterade(x) s=1; for i = 1:length(x)-1 if x(i) > x(i+1) s = 0;break; Då avbryts loopen så snart vi hittat ett par av tal som ligger i fel ordning. 2: a) Vi skapar vektorn, beräknar funktionsvärden, och plottar med kommandona >> N=50; x=(0:n-1)/(n-1); >> f=sin(x).^2-x.^3/2; >> plot(x,f) b+c) Vi hittar maximum med kommandot >> [m,k]=max(f);disp(m),disp(x(k)) % m=0.2589 och x=0.8163 >> hold on,plot( x(k),f(k), r+ );,hold off 3: a) Ett script fom bildar talföljden ges av N=10; F=zeros(N,1);F(1)=1; for k=2:n F(k)=5*F(k-1)-k; disp(f ) Vilket ger F = (1, 3, 12, 56, 275) T. b) Kör scriptet med N = 10 istället och får 4: Funktionen blir >> sum(f) ans = 1068132 function [S]=Skalar(x,y) n=length(s);s=0; for i=1:n S=S+x(i)*y(i); 5
vilket get >> Skalar( [1 2 3], [2-3 1] ) ans = -1 5: Vi får ett överbestämt ekvationssystem som skapas med kommandona >> t = [0 1 2 3 4] ; F=[ 1.52 3.01 3.26 2.01 0.63 ] ; >> A = [ t.^0 t sin(t) ]; b=f; c=a\b; Vi får c = (1.5154 0.0944, 1.6820) T. Beräkna nu funktionen för ett antal t-värden och plotta detta tillsammans med punkterna med kommandot >> tt=0:0.1:4; FF=c(1)+c(2)*tt+c(3)*sin(tt); >> plot( tt,ff, b,t,f, ko ); 6: Funktionen LokaltMax kan exempelvis skrivas som Vi testar med function [ind]=lokaltmax( x ) n=length(x);k=0; % k=antal lokala max. if x(2) <= x(1),k=k+1; ind(k)=1; for i=2:n-1 if ( x(i-1) <= x(i) ) & ( x(i) >= x(i+1) ) k=k+1;ind(k)=i; if x(n-1) <= x(n),k=k+1; ind(k)=n; >> x=[3 4 5 4 3 2 1 7 3] >> LokaltMax( x ) ans = 3 8 6