Från förra gången: Newton-Raphsons metod Idé: För att hitta en rot till f(x)=0 utgår man från en första Approximation x 0 och använder derivatan för att dra en tangent som skär x-axeln närmare roten och upprepar detta tills man är tillräckligt nära: x n+1 = x n f(x n )/f (x n ) Om f är ett formeluttryck så kan man normalt lätt bilda derivatan f Yngve Sundblad Föreläsning 7 sid.1 SF 1518/19 ht 2015 21 sept.
Exempel (EXS 4.6) med Newton-Raphson P(x)=4x 4-7x 3 5.5x 2 +27.5x 50 = 0. Hitta noga roten nära 1.5. P (x)=16x 3 21x 2 11x +27.5 p=[4-7 5.5 27.5-50] for k=1:4 %derivatan pprim(k)=(5-k)*p(k); end x=1.5; dx=1; format long ger 1.500000000000000-0.004926108374384 1.495073891625616-0.000013421067689 1.495060470557926-0.000000000099026 1.495060470458900 0.000000000000000 while abs(dx/x)>1e-12 px=polyval(p,x); pprimx=polyval(pprim,x); dx=-px/pprimx; disp(x); disp(dx); x=x+dx; end Fördubblat antal decimaler varje varv Kvadratisk konvergens? Yngve Sundblad Föreläsning 7 sid.2 SF 1518/19 ht 2015 21 sept.
Nytt: Trunkationsfel för Newton-Raphson Låt roten till f(x)=0 vara r. Taylorutveckla: 0=f(r)=f(x n +(r-x n ))=f(x n )+(r-x n )*f (x n )+(r-x n ) 2 *f (x n )/2 + Medelvärdessatsen: Om vi avbryter ersätts f (x n ) med f (µ), där µ ligger mellan x n och r. Dividera med f (x n ) och stuva om x n f(x n )/f (x n ) r = (r-x n ) 2 *f (µ)/(2*f (x n )) x n+1 r = (r-x n ) 2 *f (µ)/2/f (x n ) eller när n går mot konvergerar (x n+1 r)/(r-x n ) 2 mot K = f (r)/(2*f (r)) Alltså kvadratisk konvergens! Yngve Sundblad Föreläsning 7 sid.3 SF 1518/19 ht 2015 21 sept.
Att hitta startvärde för ekvationslösning Ofta ger en graf tillräcklig information men den kan luras. F=x 4sin(2x) 243/80=0 plottas [ 1:8] (rot> 4+3.03, rot<4+3.04) x=-1:0.02:8; Förstorad x=6.98:0.0001:7.02; f=x-4*sin(2*x)-243/80; f=x-4*sin(2*x)-243/80; plot([-1 8],[0 0],x,f) plot([6.98 7.02],[0 0],x,f) Förstoringen lurades pga. Begränsad linjelängd! EXS3.7 liknande, analys krävs! Yngve Sundblad Föreläsning 7 sid.4 SF 1518/19 ht 2015 21 sept.
Sekantmetoden När f(x)är svår eller omöjlig att derivera är sekantmetoden ett bra alternativ. Man drar alltså en sekant,mellan punkten (a,f(a)) och (b,f(b)) och låter skärningspunkten vara nya (bättre) x och upprepar detta tills intervallet är tillräckligt litet. Nya punkten x n+2 beräknas ur de två tidigare med x n+2 =x n+1 (x n+1 x n )/(f(x n+1 ) f(x n ))*f(x n+1 ) Yngve Sundblad Föreläsning 7 sid.5 SF 1518/19 ht 2015 21 sept.
Exempel (EXS 4.6) med sekantmetoden P(x)=4x 4-7x 3 5.5x 2 +27.5x 50 = 0. Hitta noga roten nära 1.5. Format long; x0=1; x1=2;it=1; P=[4-7 5.5 27.5-50]; f0=polyval(p,x0); h=1; while abs(h)/abs(x1)>1e-12 end f1=polyval(p,x1); h=(x1-x0)/(f1-f0)*f1; disp(h); x0=x1;f0=f1; x1=x1-h; it=it+1; fprintf('iterationer: %d \n', it); fprintf('rot: %14.12f \n', x1) Ger 0.636363636363636-0.095652128035623-0.038316357619555 0.002594303021054-0.000049854344873-0.000000069845456 0.000000000001916 Iterationer:9 Rot: 1.495060470459 Knapp fördubbling av decimalerna. Man kan visa att osäkerheten ~K*h 1.6. Yngve Sundblad Föreläsning 7 sid.6 SF 1518/19 ht 2015 21 sept.
Fixpunktiteration Skriv om f(x)=0 på formen x=g(x). Vi letar efter fixpunkten där x nära avbildas på sig själv. Iterera x n+1 =G(x n ) med x 0 som startvärde, skattning av roten. Om r är roten så x n+1 r = G(x n ) G(r) = G (µ)*(x n r) (medelvärdessatsen) (x n+1 r )/(x n+1 r) = G (µ) m Om kring roten gäller m < 1 så konvegerar den linjärt med m gånger mindre osäkerhet för varje iteration. Exempel (EXS 2.14): En 400 meters ellipsformad löparbana ska anläggas på en 160 m lång plan. Hur bred plan krävs? För omkretsen av en ellips använder vi en formel av självlärda indiska matematiksnillet Srinivasa Ramanujan (1887-1920): π(a+b)(1+3c/(10 (4-3c)), där c=(a-b) 2 /(a+b) 2 ; Fotnot: a=b ger 2πa, cirkeln Yngve Sundblad Föreläsning 7 sid.7 SF 1518/19 ht 2015 21 sept.
Löparbanan Vi söker alltså b så att π(a+b)(1+3c/(10 (4-3c))=400, där c=(a-b) 2 /(a+b) 2, a=80 Skriv om för iteration: b=400/(π*(1+3c/10 (4-3c))) 80 Startvärde (rektangel): b=40. function res=biterat(a,b) c=(a-b)^2/(a+b)^2; res=400/pi/(1+3*c/ (10+sqrt(4-3*c)))-a; end format short; b0=40; it=1; b1=biterat(80,b0) while abs(b1-b0)>0.05 it=it+1; b0=b1; b1=biterat(80,b0) end fprintf('bredd: %f \n',b1) fprintf('efter %d iterationer \n', it) ger 43.8588 44.6561 44.8029 44.8292 Bredd:44.83 efter 4 iterationer m=g (r) 0.2 (0.03/0.15) Yngve Sundblad Föreläsning 7 sid.8 SF 1518/19 ht 2015 21 sept.
Icke-linjära ekvationssystem Modifierade varianter av metoderna för att lösa ekvationer kan användas för att lösa system av sådana. Vi tar upp fixpunktiteration och Newton-Raphson. Allmänt kan ett ekvationssystem med n ekvationer i n variabler skrivas f 1 (x 1, x 2, x 3,, x n )=0 f 2 (x 1, x 2, x 3,, x n )=0 f n (x 1, x 2, x 3,, x n )=0 Vänsterledets derivata är Jacobianmatrisen: f 1 / x 1 f 1 / x 2. f 1 / x n J(x) = (df/dx), f 2 / x 1 f 2 / x 2. f 2 / x n specialfall: J = Ax b=0, J=A f n / x 1 f n / x 2. f n / x n f(x)=0, J=df/dx ( ) Yngve Sundblad Föreläsning 7 sid.9 SF 1518/19 ht 2015 21 sept.
Newton-Raphson för ekvationssystem För att hitta en rot till f(x)=0 använder man motsvarande formel som i envariabel- (skalära) fallet: Beräkna successiva c (n) ur ekvationssystemet J(x (n) )*c (n) = f(x (n) ) Sätt x (n+1) = x (n) c (n) Avbryt när c (n) < eps, feltoleransen (tillåten osäkerhet) ( Jämför med skalära x n+1 = x n f(x n )/f (x n ) ) Konvergensen blir som i skalära fallet kvadratisk h (n+1) / h (n) 2 går mot K när n går mot. Beviset är analogt med skalära fallet. Yngve Sundblad Föreläsning 7 sid.10 SF 1518/19 ht 2015 21 sept.
Exempel ( EXS3.9) Vi vill hitta skärningspunkterna mellan lemniskatan (x 2 + y 2 ) 2 = x 2 y 2 och parabeln y = x 2 1/2 Vi byter till polära koordinater: x=r*cosv, y=r*sinv, sätt in: r 4 =r 2 (cos 2 v sin 2 v), r = cos(2v), rita med parabeln: v=[0:pi/100:2*pi]; r=sqrt(cos(2*v)); polar(v,r);hold on; x=-1:0.01:1;f=x.2-1/2; plot([-1 1],[0 0],x,f) Skärningspunkter (±0.8,0.2), (±0.4, 0.35) Warning: Imaginary parts of complex X and/or Y arguments ignored > In polar (line 192) Gick bra ändå! Yngve Sundblad Föreläsning 7 sid.11 SF 1518/19 ht 2015 21 sept.
Newton-Raphson på lemniskata/parabel (x 2 + y 2 ) 2 x 2 + y 2 = 0, y x 2 + ½ = 0 ( ) Jacobianen: J = 2x*2(x 2 + y 2 ) 2x 2y*2(x 2 + y 2 )+2y 2x 1 x0=[0.4 0.8]; y0=[-0.35 0.2]; dcnorm=1; varv=0; for k=1:2 x=x0(k); y=y0(k); c=[x y] ; while abs(dcnorm)>5e-4 f=[(x^2+y^2)^2-x^2+y^2 y-x^2+1/2]' J=[4*x*(x^2+y^2)-2*x 4*y*(x^2+y^2)+2*y; -2*x 1] dc=-j\f; c=c+dc dcnorm=norm(dc,inf) x=c(1); y=c(2); varv=varv+1; end end ger (med beaktande av ±x): c = [x y] = [±0.4260-0.3185] dcnorm = 1e-6 c = [±0.8730 0.2636] dcnorm = 8e-6 Yngve Sundblad Föreläsning 7 sid.12 SF 1518/19 ht 2015 21 sept.
Fixpunktsmetoder för ekvationssystem Om man skriver om ekvationssystemet som x = G(x) och jakobianmatrisens norm, M= dg/dx, är mindre än 1, ju mindre dess bättre, kan man använda Jacobis eller Gauss-Seidels metod, som vi gick igenom och använde på linjära system. Anledningen är ofta att det är svårt att uppskatta jakobianen och man använder uppskattningen M x (n+1) x (n) / x (n) x (n-1) Felskattningen (osäkerheten) lösningen r kan härledas till x (n+1) r M* x (n+1) x (n) /(1-M) Om man kan skriva om ekvationssystemet med en linjär del: f(x)= Ax + g(x) = 0, så kan man ofta använda Picarditeration: A x (n+1) = g(x (n) ) med ett bra startvärde, x (0), ger lösningen med tillräcklig noggrannhet, med trunkationsfelet uppkattat som ovan. Yngve Sundblad Föreläsning 7 sid.13 SF 1518/19 ht 2015 21 sept.
Exempel på Picarditeration Vi har ekvationssystemet (omskrivet med linjära termerna till vänster): 10x 1 x 2 = x 1 2 + x 2 2 x 1 + 10x 2 x 3 = 2 x 2 3 ; x 1 + 3 x 3 = 1 x 3 3 Ax = g(x), A = [10 1 0; 1 10 1; 1 0 3] g(x)=[x 1 2 +x 2 2 ; 2 x 2 ; 1 x 3 3 ] Eftersom vänsterledet är så diagonaltungt är värdena i lösningen små. För att få startvärde ignorerar vi de icke-linjära termerna och löser Ax (0) = [0 2 1] Programmet ger x0=[0.023 0.230 0.326], x=[0.027989 0.227400 0.313714] trunk=1.5e-6 varv=4 A=[10-1 0; 1 10-1; 1 0 3]; b=[0 2 1]'; x=a\b dx=[1 1 1]; varv=0; trunk=1; format long; while trunk>1e-7 xold=x;olddx=dx; g=[x(1)^2+x(2)^2 2-x(2)^3 1-x(3)^3] ; x=a\g; dx=x-xold; M=norm(dx)/norm(olddx); trunk=m*norm(dx)/(1-m) varv=varv+1; end disp(x); disp(trunk); disp(varv) Yngve Sundblad Föreläsning 7 sid.14 SF 1518/19 ht 2015 21 sept.
Ekvationer och system i kurslitteraturen Det vi gått igenom (och ingår i kursen) svarar mot stoffet i Pohl i hela kapitel 3 och 4 utom avsnittet 4:2C Ickelinjära minstakvadratproblem. I NAM (Eriksson) motsvarar det vi gått igenom hela stoffet i kapitel 6. Yngve Sundblad Föreläsning 7 sid.15 SF 1518/19 ht 2015 21 sept.