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 x0 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: xn+1= xn – f(xn)/f’(xn) 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 ACPU - 29 January 2004 21 sept. Yngve Sundblad Exempel (EXS 4.6) med Newton-Raphson P(x)=4x4 - 7x3 – 5.5x2 +27.5x – 50 = 0. Hitta noga roten nära 1.5. P’(x)=16x3 – 21x2 – 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 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 ger 1.500000000000000 -0.004926108374384 1.495073891625616 -0.000013421067689 1.495060470557926 -0.000000000099026 1.495060470458900 0.000000000000000 Yngve Sundblad Föreläsning 7 sid.2 Fördubblat antal decimaler varje varv Kvadratisk konvergens? SF 1518/19 ht 2015 ACPU - 29 January 2004 21 sept. Yngve Sundblad Nytt: Trunkationsfel för Newton-Raphson Låt roten till f(x)=0 vara r. Taylorutveckla: 0=f(r)=f(xn +(r-xn))=f(xn)+(r-xn)*f’(xn)+(r-xn)2*f’’(xn)/2 + … Medelvärdessatsen: Om vi avbryter ersätts f’’(xn) med f’’(µ), där µ ligger mellan xn och r. Dividera med f’(xn) och stuva om xn – f(xn)/f’(xn) – r = (r-xn)2*f’’(µ)/(2*f’(xn)) xn+1–r = (r-xn)2*f’’(µ)/2/f’(xn) eller när n går mot ∞ konvergerar (xn+1–r)/(r-xn)2 mot K = f’’(r)/(2*f’(r)) Alltså kvadratisk konvergens! Yngve Sundblad Föreläsning 7 sid.3 SF 1518/19 ht 2015 ACPU - 29 January 2004 21 sept. Yngve Sundblad 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 f=x-4*sin(2*x)-243/80; plot([-1 8],[0 0],x,f) x=6.98:0.0001:7.02; f=x-4*sin(2*x)-243/80; 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 ACPU - 29 January 2004 21 sept. Yngve Sundblad 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 xn+2 beräknas ur de två tidigare med xn+2 =xn+1–(xn+1–xn)/(f(xn+1)–f(xn))*f(xn+1) Yngve Sundblad Föreläsning 7 sid.5 SF 1518/19 ht 2015 ACPU - 29 January 2004 21 sept. Yngve Sundblad Exempel (EXS 4.6) med sekantmetoden P(x)=4x4 - 7x3 – 5.5x2 +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]; Ger 0.636363636363636 -0.095652128035623 -0.038316357619555 0.002594303021054 -0.000049854344873 -0.000000069845456 0.000000000001916 Iterationer:9 Rot: 1.495060470459 f0=polyval(P,x0); h=1; while abs(h)/abs(x1)>1e-12 f1=polyval(P,x1); h=(x1-x0)/(f1-f0)*f1; disp(h); x0=x1;f0=f1; x1=x1-h; it=it+1; end fprintf('Iterationer: %d \n', it); fprintf('Rot: %14.12f \n', x1) Yngve Sundblad Föreläsning 7 sid.6 Knapp fördubbling av decimalerna. Man kan visa att osäkerheten ~K*h1.6. SF 1518/19 ht 2015 ACPU - 29 January 2004 21 sept. Yngve Sundblad 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 xn+1=G(xn) med x0 som startvärde, skattning av roten. Om r är roten så xn+1–r = G(xn) – G(r) = G’(µ)*(xn–r) (medelvärdessatsen) (xn+1–r )/(xn+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 ACPU - 29 January 2004 21 sept. Yngve Sundblad 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) 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) c=(a-b)^2/(a+b)^2; res=400/pi/(1+3*c/ (10+sqrt(4-3*c)))-a; ger 43.8588 44.6561 44.8029 44.8292 Bredd:44.83 efter 4 iterationer end m=G’(r) ≈ 0.2 (0.03/0.15) Yngve Sundblad Föreläsning 7 sid.8 SF 1518/19 ht 2015 ACPU - 29 January 2004 21 sept. Yngve Sundblad 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 f1(x1, x2, x3, … , xn)=0 f2(x1, x2, x3, … , xn)=0 … fn(x1, x2, x3, … , xn)=0 Vänsterledets ”derivata” är Jacobianmatrisen: ∂f1/∂x1 ∂f1/∂x2 …. ∂f1/∂xn J(x) = (df/dx), ∂f2/∂x1 ∂f2/∂x2 …. ∂f2/∂xn specialfall: J= … Ax–b=0, J=A ∂fn/∂x1 ∂fn/∂x2 …. ∂fn/∂xn f(x)=0, J=df/dx ( Yngve Sundblad ) Föreläsning 7 sid.9 SF 1518/19 ht 2015 ACPU - 29 January 2004 21 sept. Yngve Sundblad 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 xn+1= xn – f(xn)/f’(xn) ) 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 ACPU - 29 January 2004 21 sept. Yngve Sundblad Exempel (≈ EXS3.9) Vi vill hitta skärningspunkterna mellan lemniskatan (x2 + y2)2 = x2 – y2 och parabeln y = x2 – 1/2 Vi byter till polära koordinater: x=r*cosv, y=r*sinv, sätt in: r4=r2 (cos2v–sin2v), 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 ACPU - 29 January 2004 21 sept. Yngve Sundblad Newton-Raphson på lemniskata/parabel (x2 + y2)2 – x2 + y2 = 0, Jacobianen: J = ( y – x2 + ½ = 0 2x*2(x2 + y2)–2x –2x ) 2y*2(x2 + y2)+2y 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] ger (med beaktande av ±x): dc=-J\f; c=c+dc c = [x y] = [±0.4260 -0.3185] dcnorm=norm(dc,Inf) x=c(1); y=c(2); varv=varv+1; dcnorm = 1e-6 c = [±0.8730 0.2636] end dcnorm = 8e-6 end Yngve Sundblad Föreläsning 7 sid.12 SF 1518/19 ht 2015 ACPU - 29 January 2004 21 sept. Yngve Sundblad 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 ACPU - 29 January 2004 21 sept. Yngve Sundblad Exempel på Picarditeration Vi har ekvationssystemet (omskrivet med linjära termerna till vänster): 10x1 – x2 = x12 + x22 x1 + 10x2 – x3 = 2 – x23; x1 + 3 x3 = 1 – x33 Ax = g(x), A = [10 –1 0; 1 10 –1; 1 0 3] g(x)=[x12+x22; 2–x2; 1–x33] 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 Yngve Sundblad 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) Föreläsning 7 sid.14 SF 1518/19 ht 2015 ACPU - 29 January 2004 21 sept. Yngve Sundblad 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 ACPU - 29 January 2004 21 sept. Yngve Sundblad
© Copyright 2024