Ordinarie tenta - Chalmers tekniska högskola

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