UMEÅ UNIVERSITET Inst för Datavetenskap Marie Nordström Mars 001 Obligatorisk uppgift : Newtons metod i en och flera variabler Redovisning FšrsŠttsblad Problemdefinition och algoritm fšr lšsningen, Testkšrningar med lšmpliga utskrifter och figurer Egna reflexioner och synpunkter Prydligt indenterad och kommenterad kšllkod (icke-proportionellt typsnitt, tex courier, stl 10) Uppgiften lšses individuellt och inlšmnas senast fredag 9/3 kl 100 UMEÅ UNIVERSITET 901 87 UMEÅ Tel: 090-786 77 08 Fax: 090-786 61 6 e-mail: marie@csumuse
Del 1 Till ekvationen f( x) = x sin( x) 3 skall du bestšmma samtliga rštter (nollstšllen) med minst tio korrekta decimaler a) Plotta funktionen med hjšlp av MATLAB Samtliga nollstšllen skall vara med Hur mœnga finns det? b) Undersšk empiriskt och teoretiskt vilka av rštterna som kan bestšmmas med fšljande tvœ metoder 5 3 (I) fixpunktsiterationen xn+ 1 = xn sin( xn) (II) Newton-Raphson Hur skattar man felet i den valda approximationen fšr resp metod? c) Fšr bœda metoderna och fšr minst tvœ nollstšllen fšr vilket resp metod konvergerar (I) BestŠm, experimentellt och teoretiskt, konvergenshastigheten (II) BestŠm, experimentellt och teoretiskt, antalet iterationer som kršvs fšr att fœ rštterna med minst tio siffrors noggrannhet d) BestŠm grafiskt intervallet fšr startapproximation fšr att Newton-Raphson skall konvergera mot den stšrsta roten
Del Metoden fšr att lšsa ekvationen f(x)=0 i en variabel kan generaliseras till flera f1( x) x1 f x dimensioner DŒ blir f en funktion i R n ( ) x, dvs f( x) = M dšr x = M fn 1( x) x 1 f ( x) Se avsnittet 53 Systems of nonlinear equations i Heath's bok Trots att vi anvšnder Newtons metod i bœde en- och flervariabel fallet sœ kommer algoritmerna att se olika ut I flervariabelfallet Šr derivatan en matris av partiella derivator (Jakobianen) vilket mœste hanteras annorlunda Šn den analytiska derivatan i en variabel Din uppgift Šr nu att konstruera MATLAB funktioner som givet en startpunkt beršknar ett approximativt nollstšlle fšr ett system av icke-linjšra ekvationer Skriv en MATLAB funktion enligt fšljande : function [X, P, F] = Newton Använder Newtons metod för att lösa ickelinjära problem f(x)=0 där både f och x är n-dimensionella Anrop : [X, P, F] = Newton Returvärden : X : alla iterationer så att X = [x0 x1 xstop] (varje xi är n- dimensionell) P : matris innehållande alla sökriktningar pi som kolumner F : matris innehållande f(xi) kolumnvis Funktionen skall berškna och returnera iterationerna frœn en given startpunkt x 0 fram till en lšsning med šnskad noggrannhet eller tills antalet iterationer uppnœr en maxgršns ven sškriktningarna och funktionsvšrdena skall returneras All information som ršr problemet skall ges interaktivt, tex de filer som innehœller funktionen och Jakobianen, antalet maxiterationer, noggrannhet odyl Det finns olika sštt att hšmta in information frœn anvšndaren till programmet, titta tex pœ uigetfile och input NŠr man har ett funktionsnamn som en stršng och vill evaluera funktionen anvšnder man feval I helpdesk hittar du ocksœ dokumentet Using MATLAB, dšr det finns ett kapitel (11) om Character Arrays (Strings) som kan vara bra att titta i n x n n 3
Lšsningen till ett system av ickelinjšra ekvationer Šr inte helt lštt att visualisera, fšr fallet n= ( f 1 och f Šr ytor i rymden = R 3 ) kan man rita ut funktionerna och se var ytorna skšr varandra, men inte ens det hjšlper sšrskilt lœngt Det hjšlpmedel som dœ stœr till buds Šr konturkurvor, man tittar pœ kurvorna f1( x1, x)= 0 och f( x1, x)= 0, och ser var dessa skšr varandra AnvŠnd konturplottar (se contour i helpdesk) fšr att visuellt bestšmma startapproximationer till problemen Redovisa minst tre av nedanstœende problem Testfunktioner i tvœ variabler g x y x y 1(, ) = g( x, y) = x+ 6y f x y y 1(, ) = sin f( x, y) = 6x+ y g1( x, y) = x y 0 g( x, y) = y x 03 g x y x y 1(, ) = + g( x, y) = xy 1 f1( x, y) f( x, y) = = 8x x + y + 1 8 x x + y y + 3 Hyperbel Cirkel
Frivillig del - steglšngdsproblemet I optimering, fšr vilket problemet Fx ( )= 0 Šr ett specialfall, Šr det ofta bœde rimligt och nšdvšndigt att bestšmma hur lœngt man ska gœ i den aktuella sškriktningen i en enskild iteration DŒ behšvs en steglšngdsalgoritm NedanstŒende funktion beršknar en ny iterationspunkt givet den nuvarande punkten och sškriktningen Kravet som stšlls Šr att bestšmma en steglšngd α sœ att det blir en reduktion i funktionsvšrdet, dvs Fx ( 0 + α p) < Fx ( 0) Algoritmen startar med α = 1 och halverar detta všrde successivt tills man fœr reduktion i funktionsvšrdet function xnew = DampFcn(Obj,Fnrmx0,x0,p) A very simple algorithm to damp Newton's method when used to solve a nonlinear system F(x)=0 Find an alpha such that F(x0+alpha*p) < F(x0) where alpha = 1, 05, 05, 015 etc Call: xnew = DampFcn(F,Fnrmx0,x0,p) where Obj holds the name of F as a string alpha=1; while (norm(feval(obj,x0+alpha*p)) >= Fnrmx0) alpha = alpha/ end of while xnew = x0+alpha*p; Nu mœste Newton-funktionen anpassas fšr att avgšra om metoden skall kšras odšmpad (steglšngd=1) eller dšmpad (steglšngden beršknas med ovanstœende funktion) Testa nœgra olika startpunkter i ett problem och undersšk steglšngden Frivillig del - GUI Om du Šr intresserad av att prova lite mer av MATLAB sœ kan du prova att konstruera ett enkelt anvšndargršnssnitt (GUI = Graphical User Interface) En enkel steg-fšr-steg introduktion till den guide som MATLAB har fšr att underlštta finns pœ kursens hemsida (eller frœga Marie om ett pappersex) 5