Kommentarer till tentan 2000-05-30
1a) Många fantasifulla gissningar här. Jag drog
0.5p om man inte har med "ekvidistanta punkter".
1b) Många som inte kom ihåg definitionerna.
Eftersom 0 < eps <= 1, så är 2 / eps > 1
(i normen av inversen). Det behövs inget beloppstecken på eps heller.
Matrisen är illa konditionerad när eps är nära noll.
1c) Notera att x antar värdena 1, 2, 4, 8, 16 etc,
men tabellen ger exp(x) där x = 0, 10, 20, 30, ... Anledningen är att
det inte skall bli för enkelt.
1d) Onödigt många missar på detta, vi gjorde ju
detta på lab 1. Observera att 1 / Inf = 0 och inte -Inf t.ex. Tänk på
gränsvärdet. Observera att sin(1) inte
är noll. Det
är dessutom inte ens nära noll, eftersom vi arbetar med radianer
(sin(1) = 0.84.... Om man däremot räknar med grader, vilket vi ju
nästan aldrig gör, så är sin(1°) = sin(pi / 180) = 0.017...). Slutligen
har sin x, x -> Inf
inget gränsvärde, utan sin(Inf) = NaN.
1e) Gick bra för många. En del blandade dock ihop detta med egenvärden
och egenvektorer. Diagonalen i D är normalt inte
egenvärden, eftersom L inte är en ortogonal matris.
Här i Matlab:
>> A = [1 1; 1 4] % bilda A
A =
1 1
1 4
>> L = [1 0; 1 1], D = diag([1 3]) %
och L samt D
L =
1 0
1 1
D =
1 0
0 3
>> A - L * D * L' % kontroll
ans =
0 0
% stämmer
0 0
>> [X, V] = eig(A) % nu
egenvektorer/värden
X =
-9.5709e-01 2.8978e-01 %
kolonnerna är egenvektorerna
2.8978e-01 9.5709e-01
% X är inte triangulär (vilket L är)
V =
6.9722e-01
0 % och diagonalen egenvärdena
0 4.3028e+00 % OBS: inte lika
med D
>> X' * X
%
X är ortogonal,
ans =
1 0
0 1
>> L' * L
% men
det är inte L
ans =
2 1
1 1
1f) Gick bättre än väntat, jag trodde att den skulle leda till rätt stora problem.. Många kom på ansatsen x = ej - ek, bra!
1g) Gick hyfsat, skulle ju vara en svårare uppgift. Somliga jobbade en hel del för att lösa minimeringsproblemet givet Q och
R. Det behöver man nu inte. Antingen kan man utnyttja härledningen i
föreläsningsanteckningarna. Alternativt kan man utnyttja
normalekvationerna. A = QR medför att normalekvationerna, A' A
x = A' b, blir R' R x = R' Q' b (ty Q' Q = I). Eftersom R är
ickesingulär för vi slutligen systemet R x = Q' b.
Det råkar bli samma formel om man utgår från Ax = b, men det är ju ett annat problem.
2. Flera har glömt iterationsindex (som vanligt, fastän jag
har påpekat detta flera gånger under kursen). Detta ger ett poängs
avdrag.
Samma gäller högerleden i ekvationerna, t.ex. (x + y + z) /
3 = 4. Flera har struntat i högerledet, 4. Jag påpekade även detta
under kursens gång. Detta ger ett poängs avdrag.
Man kan förenkla
ekvationerna, t.ex. till x + y + z - 12 = 0, xyz - 8 = 0, 1/x + 1/y +
1/z - 3 = 0. Man får då enklare derivator; en del har deriverat fel.
T.ex. är inte derivatan av 1 / x lika med ln x utan den är -1 / x2.
Rätt många deriverade fel för (xyz)^(1/3). Man hade sluppit detta om
man skrivit om ekvationen. Nåväl, derivatan (med avseende på x) är
(1/3) (xyz)^(-2/3) yz (glöm inte den inre derivatan).
1 / H = (1/x + 1/y + 1/z) / 3 medför inte
att H = (x + y + z) / 3. Om man inte ser detta borde man ändå inse att
då vore M = H vilket leder till ett icke lösbart system och till en
singulär Jacobian.
Använd vettiga beteckningar. Man kan inte låta x stå både för iterationsvektorn och för den sökta variabeln x.
En del skriver något i stil med:
a(k+1) = a(k) - (något som beror av xk, yk, zk) utan att definiera vad a(k) är. Jag gillar inte att gissa. Du som tenterar skall övertyga mig att du kan lösa uppgiften.
3. Läs uppgiftstexten! Det står att man skall skriva ett Matlabprogram... Det står inte att man skall ta ett steg med Eulers metod (så, om man nu har med det så ger det inga poäng).
Matlabprogrammering har gått halvbra. Jag tycker att den borde ha gått mycket
bättre, eftersom alla har labbat på detta (och jag tror att alla som
har tentat dessutom är godkända på ode-labben). Ja sade också på
föreläsningen att man måste kunna använda ode45 för att lösa ett
problem.
Begynnelsevärdesvektorn, y0, måste finnas med i huvudprogrammet och inte i rutinen som man skickar som parameter till ode45.
-2:0.02:0 ger 101 värden, inte 100. Enklare att använda linspace. Några har skrivit -2:100:0 men det ger bara värdet -2.
Tanken var att man skulle använda ode45,
med eftersom detta inte står i tentamenstesen så har jag godkänt en
implementation av Eulers metod. Jag sa dock under föreläsningen att man
aldrig använder Eulers metod i praktiken.
4. a) har nästan alla klarat, och många har även klarat b).
I b) har dock somliga först valt vikterna, lite godtyckligt, och sedan
bestämt gradtalet. Det står dock att man skall välja vikterna så att
gradtalet maximeras. Detta medför att man får lösa ett system av
ekvationer.
5. || a ||2 = 1vilket medför att aTa = 1. Jag har dragit 0.5p för detta.
Observera att man inte kan bilda matris-vektor-produkten t = A t utan extra mine. Produkten v = t + A t är dock OK.
En
del skriver beräkningen av v = At som At = v, men jag förstår inte
varför. I de programspråk (Matlab, C/C++, Fortran, Java, ...) som vi
använder, står alltid resultatet till vänster.
En del har
skrivit: LU-faktorisera A, och beräkna sedan t = A \ a. Jag har varit
snäll vid bedömningen av detta. Om man skriver så här i Matlab beräknas
ju en ny LU-faktorisering.
Rätt många har skrivit: lös LU a = a. man har därmed förstört sitt gamla a, så när man sen bildar aTa, får man fel värde.
Några har börjat med att LU-faktorisera A och sedan lösa fyra system. Det skulle svara mot att beräkna A-1a, A-2a, A-3a, A-4a, men man har ju inte de två sista termerna.
6. Flera som inte kan logaritmlagarna, skärpning!
Om man har parametrar i A eller b får man noll poäng på uppgiften (för då vet man inte vad ett linjärt minstakvadraproblem är).
Noll poäng får man också om man har ett felaktigt antal parametrar.
Om man inte har formulerat ett minstakvadraproblem utan ett linjärt ekvationssystem, Ax = b, har jag dragit 1 p.