Mer om texter i MATLAB och om iterativ lösning av linjära ekvationssystem Texter (strängar) i MATLAB skrivs omgivna av '' och behandlas som vektorer, med samma operationer: text = 'iss'; disp(['m' text text 'ipp' text(1)]) ger utskriften Mississippi Ett diagonaltungt linjärt ekvationssystem Ax=b kan skrivas om x = c + M * x, genom division av raderna och högerledet med diagonalelementen. M, iterationsmatrisen, består av de icke-diagonala elementen och har max-normen M < 1 (definitionen av diagonaltung). Iterationmetoden x (n+1) = c + M x (n), med x (0) = c som start, konvergerar med feluppskattningen x (n+1) - x (n) M n c Yngve Sundblad Föreläsning 3 sid.1 SF 1518/19 ht 2015 7 sept.
Iterationsmetoden enligt Jacobi och Gauss-Seidel, I MATLAB x (n+1) = c + M x (n), med x (0) = c som start, n ekvationer Jacobi: Komponenterna i x (n+1) beräknas direkt ur komponenterna i x (n) Gauss-Seidel: Komponenterna i x (n+1) beräknas ur de komponenter i x (n+1) som redan beräknats, i övrigt ur komponenter i x (n) MATLAB, utgående från matrisen M, vektorn c, felgränsen err : % Jacobi % Gauss-Seidel diffx = norm(c,inf) diffx = norm(c,inf); x=c; iter=0; x=c; iter=0; n=rank(m); while diffx >= err while diffx >= err xold = x; iter = iter+1; xold = x; iter = iter+1; x = c + M*x; for i=1:n x(i) = c(i) + M(i,:)*x; end diffx=norm(x-xold,inf) diffx=norm(x-xold,inf) end end disp( Lösning: ); disp(x); disp( Lösning: ); disp(x); disp( Varv: ); disp(iter); disp( Varv: ); disp(iter); OBS! norm(c,inf) ger maxnorm. norm(c,inf) går lika bra. Yngve Sundblad Föreläsning 3 sid.2 SF 1518/19 ht 2015 7 sept.
Jacobi och Gauss-Seidel på exempel 3.6 A=[2 10 0-1;0-1 1 5;5 1 0 0;-1 0 10 0], b=[30 25 10 70]' Efter byte av rader till diagonaltung och division med diagonalelementen och överflyttning av icke-diagonala: M=[0 0.2 0 0; 0.2 0 0-0.1; -0.1 0 0 0; 0-0.2 0.2 0] c=[2 3 7 5]' Resulterande normer med err=0.00005: Iteration Jacobi Gauss-Seidel 1 0,8 0,74 2 0,06 0,074 3 0,02 0,015 4 0,0036 0,00088 5 0,00088 0,000059 6 0,00023 0,0000039 7 0,000061 8 0,000015 Gauss-Seidel vinner klart i längden (men t.o.m. sämre i början), extra decimal efter 6, Jacobi kräver 8 iterationer Yngve Sundblad Föreläsning 3 sid.3 SF 1518/19 ht 2015 7 sept.
Minstakvadratmetoden Ett vanligt problem i vetenskap och teknik är att man har ett antal mätdata och vill anpassa en funktion / kurva till dessa. Om man har lika många parametrar som data kan man interpolera, vi återkommer till detta, men oftast har man fler data än parametrar och vill anpassa med funktionen / kurvan. Man ska alltså hantera ett överbestämt ekvationssystem. Med minstakvadratmetoden anpassar man så att summan av kvadraterna av avvikelserna mellan funktionsvärdena och mätpunkterna minimeras. Om mätvärdena är (y 1 för x 1 ), (y 2 för x 2 ), (y n för x n ) ska alltså funktionen y = f(x) anpassas så att k r k 2 = k (y k - f(x k )) 2 minimeras Yngve Sundblad Föreläsning 3 sid.4 SF 1518/19 ht 2015 7 sept.
Linjär minstakvadratanpassning 1 Ofta vill man anpassa till en linjär kombination av basfunktioner som en rät linje, ett högregradspolynom eller ett uttryck som kan omformas till detta (t.ex. genom logaritmering). Låt oss titta på fallet med två basfunktioner, f 1 (x), f 2 (x) : y= F(x) = c 1 f 1 (x)+ c 2 f 2 (x) ska anpassas till (y 1,x 1 ),(y 2,x 2 ), (y n, x n ) så att k r k 2 = k (c 1 f 1 (x k ) + c 2 f 2 (x k ) - y k ) 2 minimeras Då gäller om F = [ f 1 f 2 ] c att F y och att vi vill finna c så att y F 2 ( kvadratsumman) minimeras Geometriskt: f 1 f 2 F y För att längden av y F ska vara så liten som möjligt måste den vara ortogonal (vinkelrät) mot F, dvs både mot f 1 och f 2, som är kolumnerna i systemmatrisen: A T (y F)=0, A T (y Ac)=0, A T Ac=A T y Normalekvationerna Yngve Sundblad Föreläsning 3 sid.5 SF 1518/19 ht 2015 7 sept.
Linjär minstakvadratanpassning 2 rät linje Analogt kan man, med mer skrivarbete, visa att det allmänt gäller för linjär minstakvadratanpassning med godtyckligt många basfunktioner, Ac = y, att bästa lösningen (koefficenterna) ges av normalekvationerna A T Ac = A T y I MATLAB finns inbyggt att för ett överbestämt linjärt ekvationssystem Ac = y ger c=a\y minstakvadratlösningen. Exempel 1(Pohl): Upphettad stång från T=20 grader, uppmätt längdökning (y): T=[20 30 40 50 60 70 80]' y=[0.0 1.1 1.5 2.2 3.3 3.8 4.7]' Anpassa till linjen y = c 1 + c 2 T: A=[1 1 1 1 1 1 1; 20 30 40 50 60 70 80]' N=A *A=[7 350; 350 20300]; z=a *y=[16.6 1043]' c=n\z ger [-1.4321 0.0761]; c=a\y ger samma. Residualvektorn: r=y-ac: 0.01*[-9 25-11 -17 17-9 4] Yngve Sundblad Föreläsning 3 sid.6 SF 1518/19 ht 2015 7 sept.
Linjär minstakvadratanpassning 3 sönderfall Exempel 2 (NAM (Eriksson)): Radioaktivt sönderfall: t=[0:500:3000]' x=[0.100 0.0892 0.0776 0.0705 0.0603 0.0542 0.0471]' Anpassa till produktfunktionen x(t) = x0 exp(-kt) Logaritmera: y = ln x = ln x0 kt = c 1 + c 2 t MATLAB (med vektorerna t och x ovan): y = log(x); A=[ones(size(t)) t]; c=a\y; x0 = exp(c(1)) ger 0,1006 k = -c(2) ger 0,00025 (halveringstid ln2/k = 2772 sek, rimligt) xanp=x0*exp(-k*t) ger [0.1006 0.0888 0.0783 0.0691 0.0610 0.0538 0.0474]' residual = x-xanp ger 1e-4*[-6 4-7 14 7 4 3]' Yngve Sundblad Föreläsning 3 sid.7 SF 1518/19 ht 2015 7 sept.
Plottning av anpassad kurva och avvikelser subplot(2,1,1); plot(t,x, *,t,xanp); subplot(2,1,2); plot(t,residual); Yngve Sundblad Föreläsning 3 sid.8 SF 1518/19 ht 2015 7 sept.
Linjär minstakvadratanpassning 4 planetbanor (Kepler) Exempel 4.15 (EXS): Planetbanor (solavstånd R i jordradier, omloppstid T i år): Merkurius (0,39 0,24) Venus (0,72 0,62) Mars (1,52 1,88) Jupiter(5,20 11.9) Saturnus (9,50 29,5) Uranus (19,0 84,0) Anpassa T0 och q i T = T0 * R q, log(t) = log(t0) + q* log(r) MATLAB: R=[0.39 0.72 1.52 5.2 9.5 19]' T=[0.24 0.62 1.88 11.9 29.5 84]' y = log(t); A=[ones(6,1) R]; c=a\y; T0 = exp(c(1)); q = c(2); ger T0=1,0008, q=1,5040 r=t-t0*r.^q ger 1e-3*[-3-9 1.5-45 -67 141]' r=t-r.^1.5 ger 1e-3*[-4 9 0.6 42 219 1181]' Utan Uranus (upptäckt 1781), med Jorden (1, 1): T0=1,0006, q=1,5036 Kepler (1619): Tre lagar för planetrörelse i ellipser, den tredje: T 2 = R 3 eller T = R 1,5 (baserad på beräkningar från Tycho Brahes observationer) Yngve Sundblad Föreläsning 3 sid.9 SF 1518/19 ht 2015 7 sept.
Polynomanpassning med minstakvadrat Vid anpassning med polynom av grad n (n 2) till data kan man råka ut för stort konditionstal, dvs små fel i matrisen ger stora fel i resulterande parametrarna. Detta kan kraftigt förbättras genom centrering, dvs välja 1, x-x medel, (x-x medel ) 2, (x-x medel ) 3, som basfunktioner istället för 1, x, x 2, x 3, Exempel 3 (NAM): x=[15:1:19]'; y=[15 8 5 3 3]'; Anpassa till y = F(x) = c 1 + c 2 x + c 3 x 2 A=[1 15 225; 1 16 256; 1 17 289; 1 18 324; 1 19 361] A A = [5 85 1455; 85 1455 25075; 1455 25075 434979] A y = [34 549 8929]; A\y ger [363.6-39.3286 1.0714] cond(a *A) ger 3e9 Anpassa till y = F(x) = c 1 + c 2 (x-17) + c 3 (x-17) 2 B=[1-2 4; 1-1 1; 1 0 0; 1 1 1; 1 2 4]; B B=[5 0 10; 0 10 0; 1 0 34]; B'y=[34-29 83]'; B\y ger [4.6571-2.9000 1.0714] cond(b'*b) ger 20 Yngve Sundblad Föreläsning 3 sid.10 SF 1518/19 ht 2015 7 sept.
Polynomanpassning i MATLAB Funktionsanropet c=polyfit(x,y,n) ger koefficiemterna i ett n:e-gradspolynom som anpassar sig till y-värdena för x-värdena med lämplig metod. yv=polyval(c,xv) ger värdet av polynomet för xv. I vårt exempel 3 med ursprungliga andragradspolynomet c=polyfit(x,y,2)ger[1.0714-39.3286 363.6000]' OBS! Omvänd ordning, högsta koefficienten först, också i c för polyval polyval(c,17) ger 4.6571, stämmer med 4.6571-2.9000(x-17)+1.0714(x-17)^2 Yngve Sundblad Föreläsning 3 sid.11 SF 1518/19 ht 2015 7 sept.
Överkurs I NAM (Eriksson), avsnitt 2.5-2.7 beskrivs för minstakvadratmetoden 2.5 Residualanalys 2.6 Experimentell störningsräkning 2.7 Praktisk statistik Det ingå inte i kursen och kommer inte på tentan, men är läsvärt för speciellt intresserade. Yngve Sundblad Föreläsning 3 sid.12 SF 1518/19 ht 2015 7 sept.