Matematik Chalmers tekniska högskola 2014-08-27 kl. 08:30-12:30 Tentamen MVE355, Programmering och numeriska beräkningar med matlab. Ansvarig: Katarina Blom, tel 772 10 97. Plats: L Inga hjälpmedel. Kalkylator ej tillåten. Betygsgränser: 16-23 p. ger betyget 3, 24-31 p. ger betyget 4 och 32 p. eller mer ger betyget 5. Maxpoäng är 40. Lösningar kommer att läggas ut på kurshemsidan första arbetsdagen efter tentamenstillfället. Resultat meddelas via epost från LADOK. 1 I figuren nedan har man ritat f(x) = xsin(x) på intervallet 10 x 10. 8 6 4 2 0 2 4 6 10 8 6 4 2 0 2 4 6 8 10 (a) Skriv en matlabsekvens som genererar en liknande figur som den ovan. (b) Man vill beräkna ett värde på integralen labsekvens: n = 100; a = -1; b = 1; f = @(x)x.*sin(x); x = linspace(a,b,n); h = (b-a)/(n-1); Q1 = sum(h*f(x)); Q2 = sum(h*f(x(1:n-1)); Q3 = sum(h*f(x(2:n)); 1 1 (2p) x sin(x)dx. Betrakta följande mat- (2p) I vilken av summorna Q1, Q2, Q3 har man använt höger rektangelregel för att beräkna integralen ovan? Motivera ditt svar. (c) Som synes i figuren ovan har xsin(x) två max-punkter på intervallet 10 x 10, en nära -8 och en nära 8. Skriv en matlabsekvens som beräknar (3p) ett värde på integralen 0 a xsin(x)dx där a är den vänstra max-punkten (den nära -8).
(d) Skriv en matlabsekvens som, i figuren ovan, fyller området som begränsas av (3p) linjen y = 6, och f(x) = xsin(x) med grön färg. 2 (a) Formulera Eulers metod för lösning av differentialekvationer. (3p) (b) Skriv en matlabsekvens som löser följande begynnelsevärdesproblem { u (t) = 4u(t),t [0,2] u(0) = 1 (4p) Använd Eulers metod med steglängden h = 0.1. (c) Använd ode45 och skriv ett program i Matlab som löser följande begynnelsevärdesproblem u (t) = 4u(t)+4,t [0,2] u(0) = 1 u (0) = 1 (4p) 3 Man vill ha ett matlabprogram som fungerar enligt följande: Programmet ska simulera en hiss i ett hus med 10 våningar (se figuren nedan). Rutorna är våningarna hissen kan åka till. Den ifyllda rutan markerar hissens nuvarande placering (hissen är på första våningen i figuren). Man flyttar hissen till en ny våning genom att klicka (vänsterklicka) med musen på den våning hissen ska åka till. Texten ( 22 våningar ) anger hur många våningar hissen har passerat sedan programmet startade (se (a)-uppgiften nedan). Man avslutar programmet genom att högerklicka i figuren. 10 8 6 4 2 22 våningar 0 6 4 2 0 2 4 6 8 (a) Skriv en funktion (function) som beräknar antalet våningar en hiss har passe- (4p) rat. Låt funktionen ha en inparameter, en vektor, som innehåller vilka våningar hissen har åkt till. Exempel: Antag hissen börjar på våning 1, åker sedan till våning 9, sedan till våning 7 följt av våning 10 så har hissen passerat totalt 9 1 + 7 9 + 10 7 = 13 våningar. (b) Skriv programmet så att det fungerar enligt ovan. Använd funktionen från (a)- (8p) uppgiften i din lösning. 4 Låt A vara en 100 100-matris med heltal och låt x vara en 100 1-vektor. (a) Skriv en sekvens i matlab som bestämmer den kolumn i A som har flest 1:or. (3p) (b) I matlabsekvensen nedan har man beräknat produkten AAx på två olika sätt. (4p) S1 = (A*A)*x; S2 = A*(A*x);
Bestäm ungefär hur många multiplikationer av element som behöver göras då man beräknar S1 respektive S2.
Formelblad Matlab Några matematiska funktioner abs(x) absolutbeloppet av x sqrt(x) kvadratroten ur x exp(x),log(x) exponentialfunktionen och (naturliga) logaritmen av x sin(x), cos(x), tan(x) sinus, cosinus respektive tangens av x round(x), ceil(x), floor(x) avrundar x till närmsta heltal, uppåt respektive nedåt mod(x,y) resten vid heltalsdivisionen x/y Kontrollstrukturer if uttryck while uttryck for i=start:steg:slut elseif uttryck end end else end (else och elseif delen kan utelämnas). Funktioner function ut = funktionsnamn(parameterlista) ut är returvärdet och parameterlista anger inparametrarna. utgör funktionskroppen och funktionsnamn är namnet på funktionen. Anonym funktion: funktionsnamn = @(parameterlista); funktionsnamn är namnet på funktionen, parameterlista anger inparametrarna och består bara av en rad och utgör funktionskroppen. Vektorer och matriser x = A\b löser det linjära ekvationssystemet Ax = b där A är koefficientmatrisen och b är högerledet. rref beräknar radreducerad trappstegsform av en matris. Några funktioner för vektorer och matriser length(x) antal element i x max(x), min(x) största respektive minsta elementen i x find(x) index för nollskilda (true) element. X måste bestå av logiska element sum(x), prod(x) summan respektive produkten av elementen i x mean(x), median(x) medelvärdet, medianvärdet av x [y i]=sort(x) sorterar elementen i x i stigande ordning, (y är den sorterade vektorn och i är indexvektorn). size(a) antal rader och kolumner i matrisen A nnz(a) antal nollskilda element i A diag(a,n) n:e diagonalen i A Några övriga funktioner rand(m,n) ger mxn slumtal i intervallet ]0,1[ randi([a b],m,n) ger mxn slumtal (heltal) i intervallet [a,b] pause(n) pausar programmet i n sekunder.
Figurer figure(n) Figur n blir aktuell. plot(x,y, egenskaper ) ritar elementen i y relativt elementen i x. egenskaper anger hur kurvan ska ritas (tex färg). bar(x,y, egenskaper ) y-värdena som stapeldiagram istöllet för kurva (jämför plot). fill(x,y,f) Färglägger polygonområdet vars hörnpunkter ges av elementen i x och y med färgen f. hold on, hold off Håller kvar/släpper aktuell kurva i aktuell figur. text(x,y, text ) Skriv texten text på position (x,y) i aktuell figur. title( titel ), xlabel( xaxel ), ylabel( yaxel ) Ange titel på aktuell figur och på x-axeln respektive y-axeln. axis([xmin xmax ymin ymax]) ange gränser på x- och y- axel. axis on, axis off Sätter dit/tar bort koordinataxlarna i en figur. imagesc(a) Illustrera elementen i matrisen A. colormap(c) Bestäm färgerna när tex imagesc används. Färgerna anges radvis i C enligt andel rött/grönt/blått. spy(a) Markerar nollskilda element i A i en figur. I/O disp(x) Skriver ut värdet på x fprintf( sträng med formatkoder, variabler) Skriver ut strängen med infogade variabler. Utskriftens utseende bestäms av formatkoder: Tal i exponentform %a.be, tal i decimalform %a.bf, heltal %u (a anger hur många positioner ett tal ska uppta, b anger hur många av de a positionerna som ska vara decimaler). x = input( Text ) Används för att mata in värden på x load fil Skapar en vektor (eller matris) som heter fil med de värden som finns i (text-) filen med namnet fil save variabel Sparar värdet på variabel i en fil som heter varaibel.mat [x y k]=ginput(n) läser in n st musklick i en figur. x och y är positionerna ((x,y)- koordinater) i figuren, k anger vilken musknapp som tryckts ner. Numerisk ekvationslösning fzero(f,x0) returnerar nollställe till funktionen f nära x0 Numerisk integrering quadl(f,a,b) beräknar en approximation till integralen b a f(x)dx. Ordinära differentialekvationer [t,u]=ode45(f,[a b],u0) beräknar en lösning till begynnelsevärdesproblemet { u = f(t,u),a t b u(a) = u0