Matematik Chalmers tekniska högskola 2015-06-01 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 (a) Man vill beräkna en approximation till Z 1 2 e−x dx (4p) 0 och har skrivit följande matlabsekvens: f = @(x)exp(-x.^2); n = 5; x = linspace(0,1,n+1); h = 1/n; q1 = sum(h*f(x(1:n+1))); q2 = sum(h*f(x(2:n+1))); q3 = sum(h*f(x(1:n))); q4 = (q2+q1)/2; Har man använt trapetsmetoden då man beräknar q4 i kodsekvensen ovan? Gäller det att q2 > q3? Motivera svaren. (b) Periodlängden T (θ0 ) för en viss pendel θ0 ges av formeln (5p) r Z π 0.1 2 1 q dθ T (θ0 ) = 4 g 0 1 − sin2 ( θ20 ) sin2 (θ) där g = 9.81 och θ0 är begynnelseutslaget. Skriv en sekvens i matlab som bestämmer periodlängderna för θ0 = 10o , 20o, 30o . . . , 60o . Använd Matlab’s inbyggda kommando integral. 2 (a) Formulera newton’s metod för beräkning av nollställen till en funktion f (x) = 0. (3p) (b) Skriv ett program som man kan använda för att rita ut tangenter till funktionen (10p) f (x) = 0.5(x − 2)2 − 2 cos(2x) − 1.5 på intervallet −3 ≤ x ≤ 7 (se figur nedan). I figuren visas grafen för funktionen och användaren markerar var tangenten ska ritas genom att klicka på kurvan med vänster mus-knapp. Om klicket var tillräckligt nära kurvan markeras klicket med en liten ring, och tangenten till funktionen i punkten ritas ut. Om klicket var för långt ifrån funktionskurvan markeras klicket bara med en liten ring. (Bestäm själv hur du avgör vad som är ’tillräckligt nära’ funktionskurvan, beksriv kortfattat, alt. kommentera i din kod, hur du resonerat här). I figuren nedan har användaren klickat tre gånger på kurvan och tre tangenter har ritats ut. Dessutom har användaren klickat några gånger i nedre vänstra hörnet av figuren, och dessa klick har markerats som runda ringar. Man ska kunna klicka in godtyckligt många tangenter i figuren (en i taget). Programmet avslutas genom att användaren högerklickar med musen. Ledning: Den räta linjen y = L(x) där L(x) = f (a) + f ′ (a)(x − a) är tangenten till funktionen f (x) i punkten x = a. 10 8 6 4 2 0 −2 −3 −2 −1 0 1 2 3 4 5 6 7 (c) Skriv en matlabsekvens som bestämmer nollstället längst till vänster i figuren (2p) ovan. (d) Ange ett startvärde som inte kommer att fungera om man vill använda Newton’s (2p) metod för att approximera något av nollställena i figuren ovan. Motivera svaret. 3 En viss kemisk reaktion beskrivs av följande system av differentialekvationer: ′ u1 (t) = s(u2 (t) − u1 (t)u2 (t) + u1 (t) − qu1(t)2 ), u1(0) = 4 u′ (t) = 1s (u3 (t) − u2 (t) − u1 (t)u2 (t)), u2(0) = 1.1 2′ u3 (t) = w(u1(t) − u3 (t)), u3 (0) = 4 där u1, u2 och u3 är koncentrationer av tre kemiska substanser, s = 77.27, q = 8.375 · 10−6 och w = 0.1610. I figuren nedan har man beräknat och ritat lösningen till problement. (I figuren har man ritat logaritmen av u.) (a) Skriv en matlabsekvens som beräknar och ritar ut lösningen enligt figuren (4p) nedan. Använd ode45. (b) Skriv en matlabsekvens som fyller området som innesluts av lösningskurvorna (4p) för u1 (t) och u3 (t) med grön färg. Använd fill. 6 5 4 log(u) 3 2 1 0 −1 −2 −3 0 0.5 1 1.5 2 2.5 3 3.5 4 t 4 Man vill lösa ett linjärt ekvationssystem Ax = b. (a) Matrisen A har man bildat med hjälp av spdiags enligt följande: (3p) n = 50; e = ones(n,1)*10; A = spdiags([e -5*e e],[-5 0 5],n,n); A(10:10:n,1) = 50; Hur ser matrisen A ut? (b) Låt b = rand(n,1);. Skriv en matlabsekvens som beräknar en lösning till (3p) ekvationssystemet och som skriver ut det minsta x-värdet. 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 satser elseif uttryck satser else satser end while uttryck satser end for i=start:steg:slut satser end (else och elseif delen kan utelämnas). • Funktioner function ut = funktionsnamn(parameterlista) satser ut är returvärdet och parameterlista anger inparametrarna. satser utgör funktionskroppen och funktionsnamn är namnet på funktionen. Anonym funktion: funktionsnamn = @(parameterlista)satser; funktionsnamn är namnet på funktionen, parameterlista anger inparametrarna och satser består bara av en rad och utgör funktionskroppen. • Linjära ekvationssystem 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. spdiags([d1, d2 ..],[n1, n2 ..],m,n) Skapar m × n gles bandmatris. Med d1 , d2 . . . anges diagonalerna (n × 1 vektorer), n1 , n2 . . . anger var i matrisen diagonalerna ska placeras. Huvuddiagonalen numreras 0, bidiagonalerna över huvuddiagonalen numreras 1, 2 . . . , bidiagonalerna under huvuddiagonalen numreras -1, -2, . . . • 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 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 Rb integral(f,a,b) beräknar en approximation till integralen 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
© Copyright 2024