TEKNISKA HÖGSKOLAN I LINKÖPING Matematiska institutionen Beräkningsmatematik/Fredrik Berntsson Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI Tid: 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 15.15 och 16.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 vad du gjort på papper. Redovisa även eventuella resultat du fick då körde dina Matlab kommadon. (2p) 1: Följande MATLAB script är tänkt att ersätta en matris A med dess transponat utan att använda en temporär matris. [n,n] = size(a); for i = 1:n for j = i:n A(i,j) = A(j,i); A(j,i) = A(i,j); Förklara vad som går fel och gör de förändrningar som behövs för att få förväntat resultat. (3p) 2: Vi vill studera funktionen f(x) = 1.2 cos(x 2 )/2+x+2x 2, på intervallet 1 x 1, och undersöka var dess minimum inträffar. a) Skapa en vektor x som innehåller N = 100 jämt utspridda tal på intervallet [ 1, 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 min för att hitta det minsta värdet i vektorn f. Detta approximerar funktionens minsta värde på intervallet. Hitta även det x-värde där funktionen antar sitt minsta värde. c) Markera punkten (x min,f min ) du hittat i b) uppgiften i den graf du ritat upp i a) uppgiften med ett rött +. (3p) 3: Normen av en vektor beräknas enligt formeln x 2 = x 2 1 +x2 2 +...+x2 n, där n är vektorns längd. a) Skriv en Matlab funktion MinNorm med en vektor x som inparameter och resultatet av normberäkningen som utparameter. b) Skapa de två vektorerna x = (0,2, 3,6) T och y = ( 1,2,6) T i Matlab och använd funktionen MinNorm för att beräkna deras normer. Tips I Matlab finns en inbyggd funktion norm 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. 2
(3p) 4: Vi vill beräkna summan S = k=0 1 1+k 2, approximativt på datorn. Vi avbryter summeringen då nästa term är liten i förhållande till den beräknade partialsumman, dvs t k /S k < tol, där S k är en partialsumma, t k är term k, och tol= 10 6 är en tolerans. Skriv ett Matlab script som beräknar summan med angivet avbrotts kriterium. Redovisa det beräknade värdet på summan och det program du använder. (3p) 5: Vi vill anpassa ett andragrads polynom, så bra som möjligt till följande tabell: y = p(x) = c 1 +c 2 x+c 3 x 2, x 0.0 1.0 2.0 3.0 y 0.01 0.91 4.00 8.12 a) Formulera ovanståe som ett överbestämt ekvations system, Ac = b, där c = (c 1,c 2,c 3 ) T, och lös detta med minsta kvadrat metoden. b) Efter att vi beräknat coefficienterna c i polynomet vill vi plotta resultatet. Skriv ett script som plottar det polynom som som har coefficienter c 1, c 2, och c 3, på intervallet 1 < x < 4. Rita även ut de punker (x,y) som gavs i tabellen med +. (4p) 6: I ett tärningsspel slår vi tre tärningar i följd. Får vi en sexa får vi slå tärningen en extra gång. Målet är att få så hög total summa som möjligt. Exempelvis slår vi tärningen tre gånger och får 3, 6, och 5. Vi får då ett extra kast som ger ytterligare en 6:a och vi slår därför ännu en gång och får 2. Denna spelopmgång ger därför totalt 3+6+5+6+2 = 22 poäng. a) Skriv en funktion SpelOmgang som använder slumptalsgeneratorn randi, eller rand, för att utföra en spelomgång. Totalsumman skall vara utparameter. b) Använd funktionen SpelOmgang för att simulera N = 1000 spelomgångar. Beräkna genomsnittlig poäng för en omgång av tärningsspelet. 3
Lösningsförslag till Övningstentan för 2015. 1: Problemet är att vi skriver över elementet A(i,j)=A(j,i);. Vi måste spara undan det i en tillfällig variabel först. Ändra alltså till. [n,n] = size(a); for i = 1:n for j = i:n tmp = A(i,j); A(i,j) = A(j,i); A(j,i) = tmp; 2: a) Vi skapar vektorn, beräknar funktionsvärden, och plottar med kommandona >> N=100; x=-1+2*(0:n-1)/(n-1); >> f=1.2-cos(x.^2)/2+x+x.^2; >> plot(x,f) b) Vi hittar minimim med kommandot 3: a) Funktionen blir b) Vi får >> [m,k]=min(f);disp(m),disp(x(k)) >> hold on,plot( x(k),f(k), r+ );,hold off function [S]=MinNorm( x ) S=0; for i=1:length(x) S=S+x(i)^2; ; S=sqrt(S); >> MinNorm([0,2,-3,6] ) 7 >> MinNorm([-1,2,6] ) 6.4031 4: Då det inte är klart hur många termer som skall tas med så skriver vi en while sats: S=1;k=1; term=1; tol=10^-6; while term/s>tol term=1/(1+k^2); k=k+1; 4
S=S+term; ; disp(s) vilket get S=2.0752. 5: a) Vi får ett överbestämt ekvationssystem som skapas med kommandona >> x = [0 1 2 3] ; y=[0.01 0.91 4.00 8.12] ; >> A = [ x.^0 x x.^2 ]; b=y; c=a\b; Vi får c = ( 0.0480 0.3270, 0.8050) T. b) Beräkna nu polynomet för ett antal x-värden och plotta detta tillsammans med punkterna med kommandot >> xx=-1:0.1:4; pp=c(1)+c(2)*xx+c(3)*xx.^2; >> plot( xx,pp, b,x,y, r+ ); 6: a) Funktionen SpelOmgang kan exempelvis skrivas som function [S]=SpelOmgang() N=3; % Antalet återståe kast. S=0; % Summan hittils. while N>0 Kast=randi(6); N=N-1; % Slå tärningen. Minska N. S=S+Kast; if Kast==6, % Öka antalet kast om vi fick sexa. N=N+1; b) Simulera 1000 omgångar med N=1000;S=zeros(N,1); for i=1:n, S(i)=SpelOmgang(); mean(s) 12.7050 Tänk på att då simuleringen är slumpmässig får man olika svar varje gång. 5