Kommentarer till tentan 2009-05-29
1a) Inte många som kunde detta. Vi löste ju
en nästan identisk övning, med + i stället för *.
1b) Många som missade på 1/0 - 2/0. Det
blir NaN. Skillnaden
mellan två oändligheter har inget väldefinierat gränsvärde, eftersom
termerna kan gå mot oändligheten olika snabbt (1/x - 1/x2
-> minus oändligheten, 1/x2-1/x
-> plus oändligheten, 1/x - 1/x -> 0, (a + 1/x) - 1/x
-> a osv. när x -> 0).
1c) Jag har rättat snällt här. Om man har
nämnt singularitet och styvt problem har man fått en poäng. Notera dock
att man får ta korta tidssteg om man använder en explicit
lösare på ett styvt problem. Använder man en implicit
lösare har man inte denna typ av begränsning (även en implicit lösare
kan få ta korta steg, men då är orsaken en annan). Så det är alltså
inte alltid sant att en lösare får ta korta steg bara för att problemet
är styvt.
1d) Denna borde ha gått mycket bättre. Man borde
åtminstone ha
kunnat beräkna Choleskyfaktoriseringen. En hel del räknefel för de som
fått något som liknar en Choleskyfaktorisering. Det är ju väldigt
enkelt att kontrollera om man har räknat rätt, det är ju bara att bilda
produkten av C och CT
och se om det blir A.
Det måste vara sträng olikhet (1 + sqrt(17)) / 2 < alfa. Likhet
ger en singulär matris som är positivt semidefinit.
1e) En antingen-eller-uppgift. Antingen har man
klarat den bra
eller så inte alls. En del gör väldigt konstiga saker, som att blanda
ihop vektorer med tal. Några gör otillåtna förenklingar. Bara för att
tre vektorer är ortogonala så behöver de inte vara [1, 0, 0]T,
[0, 1, 0]T, [0, 0, 1]T.
Dels kan alla elementen vara skilda från noll och dels kan
vektorerna har mer än tre element. Här ett exempel i Matlab:
>> Q = orth(rand(5, 3)) %
ortogonalisera kolonnerna i en slumpmatris
Q =
-1.5482e-01
1.6547e-01 4.5027e-01
-4.0579e-01
7.2118e-01 6.3037e-02
-5.4681e-01
2.0265e-01 1.8704e-03
-4.0441e-01 -5.2704e-01
6.5044e-01
-5.9061e-01 -3.6562e-01 -6.0844e-01
>> Q' * Q % kolla ortogonaliteten
ans =
1.0000e+00
0 -1.1102e-16 % ortogonala och normerade
0 1.0000e+00 -1.1102e-16 % så
när som på avrundningsfel
-1.1102e-16
-1.1102e-16 1.0000e+00
Det gäller att aTb
= bTa, så
om a är ortogonal mot b så är b
ortogonal mot a, några såg inte detta.
1f) Observera att Qx är en vektor,
|| Qx ||2 är alltså en
vektornorm (den gamla vanliga vektorlängden) och inte
en matrisnorm. Man skall alltså inte sätta igång
med max-formuleringen och egenvärden.
Observera också att || x ||2= sqrt(xTx) och inte xTx.
Raderna
nedan behövs inte för att lösa uppgiften, men några har skrivit
(felaktigt) om det så därför kommer följande klarläggande: Om Q är kvadratisk så gäller att QT = Q-1, men detta gäller inte om Q har fler rader än kolonner (eftersom inversen då inte är definierad). || Qx ||2=|| x ||2 gäller även om Q inte är kvadratisk. Q kan inte ha fler kolonner än rader, ty då kan aldrig QT Q = I vara satisfierat (varför?).
1g) Gick hyfsat. Många har missuppfattat vad en
fixpunkt är (tror jag i alla fall). Vi har iterationen
xk+1 = xk
(2 - 10 xk) = g(xk)
där alltså g(xk) = xk
(2 - 10 xk). En fixpunkt, x*,
satisfierar ekvationen x* = g(x*),
man får tillbaka den punkt man står i. Fixpunkterna i detta exempel är
alltså 0 samt 0.1. x = 0.2 är inte en fixpunkt, men
många har svarat med detta värde och anledningen (tror jag) är att man
har löst ekvationen 0 = g(x*), vilket man alltså
inte skall göra.
Någon missar x*= 0. När man löser ekvationen x =
x (2 - 10 x) får man inte dividera bort x utan vidare, x kan ju vara
noll. När man behandlat fallet x = 0, kan man dividera bort x och få
ekvationen 1 = (2 - 10 x).
Använd kriteriet | g'(x*) | < 1. Många
som använde egna varianter utan ordentlig motivering.
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.
Kvadrera normvillkoret så får blir derivatorna enklare (man slipper kvadratroten).
En del har inte skrivit om xT A x / xT B x = 1 som xT A x - xT B x = 0, då får man jobba med derivatorna :-)
Några
har fått fel antal ekvationer, tre i stället för två. Jag inser inte
varför, man har ju bara två villkor i uppgiften. En konsekvens av det
felaktiga antalet är att Jacobianen blir en 3 x 2-matris (en del har fått en 2 x 3-matris). Man kan inte
invertera sådana och om man ändå skriver J-1 får man noll poäng på uppgiften. Man borde inse att något är väldigt fel om inte Jacobianmatrisen blir kvadratisk!
Observera att xT A x blir ett tal
och inte en matris eller vektor, som några har fått det till. Detta har
vi ju tjatat om (i samband med positivt definita matriser t.ex).
Som jag sa under föreläsningen kan man enkelt skriva ner värdet på xT A x utan att utföra multiplikationerna. Det gäller allmänt att xT A x är summan av alla aj, k xj xk där j, k = 1, ..., n. Så om man har symmetriska 2 x 2-matriser (som på tentan) blir
xT A x = a11 x12 + 2 a12 x1 x2 + a22 x22.
3. Har gått bra.
En del ignorerar dock resultaten från ode45 och skriver något i stil med:
function [t, y] = uppg3
ode45(osv. % fel här
Detta fungerar inte, t och y kommer att vara odefinierade, det måste stå [t, y] = ode45( ...
Det finns ingen anledning att använda elementvisa operatorer, t.ex. t.^2, t
är ju en skalär variabel, så kvadrering är ju definitionsmässigt
elementvis. Jag har dock inte gjort något poängavdrag för detta.
4. a) har nästan alla klarat. Flera har dock räknat ut
polynomet fel. Det skall man inte behöva, det går ju att kontrollera
att polynomet satisfierar interpolationsvillkoren. En tentand testade villkoren.
b) har också gått bra.
5.
Man får inte bilda A2 (det kostar ju mer än att lösa hela problemet). Man får inte bilda inverser och inte ytterprodukter, xxT.
Några har börjat med att LU-faktorisera A och lagra L och U i A:s minne. A är då förstörd när man senare skall bilda produkten A x. Man måste börja med A x och A2 x. Notera att det inte är helt enkelt att bilda A x genom att använda L och U. Det är ju en permutationsvektor med i spelet också (PA = LU, där P är en permutationsmatris definierad via en vektor).
Observera att man inte kan bilda matris-vektor-produkten t = A t utan
extra mine. Produkten v = y + A t är dock OK.
En
del skriver beräkningen av v = A t som A t = 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 använder => (medför) på ett felaktigt sätt. Numeriska uttryck
medför inte varandra. Man kan skriva (x+y)(x-y) = 4 => x2 - y2 = 4 (det är till och med ekvivalens, <=>). Man kan dock inte skriva (x+y)(x-y) => x2 - y2. Det är ungefär lika vettigt som att skriva 23.4 => -56.77.
6. Om man har parametrar i A eller b eller mätdata i x så 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 (det skall vara två). Man kan t.ex. inte införa x1 = p1, x2 = p2 och x3 = p22 som parametrar, för vad gör man om x22 är skilt från x3?
Tänk på att man förväntar sig bättre anpassning (mindre residual) med
ökande antal parametrar. Man byter normalt modell om man inför extra
parametrar.
Om man inte har formulerat ett minstakvadraproblem utan ett linjärt
ekvationssystem, Ax = b, har jag dragit 1 p.
Om man inte har noterat att tk + p1 < 0 är ett problem, så har jag dragit 0.5 p.
För
att få problemet på rätt form, hittar en del på nya räkneregler för
exponential- och logaritmfunktionen (som dessutom inte passar in i
problemställningen). Det gäller t.ex. inte att log(a) / log(b)
= log(a - b), däremot gäller att log(a / b) = log(a) - log(b) (a, b
> 0). Om man tvekar om en lag gäller eller inte kan man ju testa på
ett enkelt numeriskt exempel, chansa inte. log10(100) / log10(10) = 2 / 1 = 1 som inte är log10(100 - 10). Däremot är log10(100 / 10) = log10(10) = 1 som är log10(100) - log10(10).
Om man använder felaktiga räknelagar får man inga poäng för uppgiften,
även om resten av problemet är korrekt löst. Man måste kunna de
grundläggande räknelagarna för de elementära funktionerna!