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!

Back