Datorlaboration 3 MA505G Flervariabelanalys för civilingenjörer vt 2023 I den här laborationen är det tänkt att du först upprepar alla exempel som finns i texten. Sedan provar du att på egen hand göra övningarna på slutet. Derivator i flera variabler Antag att f : R2 → R är en C 2 -funktion (d.v.s. att alla partiella 2:a-derivator existerar och är kontinuerliga). Gradienten är den vektor som ges av första ordningens derivator, d.v.s. ∇f (x,y) = (fx′ (x,y),fy′ (x,y)). Hessianen är en kvadratisk symmetrisk matris med andraderivatorna ′′ ′′ fxx (x,y) fxy (x,y) H(x,y) = . ′′ ′′ (x,y) fyy (x,y) fyx Fallet med fler variabler ges av exemplen nedan. Matlab kan bestämma partiella derivator, gradienter och Hessianer symboliskt med hjälp av kommandona diff, gradient respektive hessian. Observera att gradient ger en kolumnmatris. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 >> syms x y z >> f = (x−1)*y*z^2 f = y*z^2*(x − 1) >> dfdx = diff(f,x) dfdx = y*z^2 >> dfdy = diff(f,y) dfdy = z^2*(x − 1) >> dfdz = diff(f,z) dfdz = 2*y*z*(x − 1) >> gradf = gradient(f) gradf = y*z^2 z^2*(x − 1) 2*y*z*(x − 1) >> H = hessian(f) H = [ 0, z^2, 2*y*z] [ z^2, 0, 2*z*(x − 1)] [ 2*y*z, 2*z*(x − 1), 2*y*(x − 1)] Nedan är ett exempel på beräkning av riktningsderivata. För att den ska fungera måste vissa matriser transponeras för att alla produkter ska bli väldefineirade. Då behöver en vara medveten om att kommandot ' efter en matris egentligen utför en så kallad Hermitesk konjugering. Om matrisen bara innehåller reella element så är det samma sak som en vanlig transponering. Men om matrisen har komplexa element så utförs också en konjugering av alla element i matrisen. För att säkerställa att bara få en vanlig transponering finns två alternativ. Antingen ser en till att definiera alla symboliska variabler som reella med hjälp av kommandot sym. Eller så kan en använda .' istället för '. I exemplet nedan används den första varianten. Prova själv att göra på det andra sättet. Lägg också märke till hur riktningsvektorn beräknas symboliskt. Detta är nödvändigt för att beräkningen av riktningsderivatan ska ge ett symboliskt resultat. Alla delar i beräkningen måste vara symboliska om svaret ska bli symboliskt. 1 2 3 4 5 6 >> sym('x','real');sym('y','real');sym('z','real'); >> f = x^2+2*y+z; >> v = sym([1 1 1]'/sqrt(3)); >> riktningsderivata = gradient(f)'*v riktningsderivata = (2*3^(1/2)*x)/3 + 3^(1/2) För en vektorvärd funktion i flera variabler är Jacobianen en matris vars rader består av gradienterna av f ’s komponenter. Som exempel kan vi ta (f1 ,f2 ) = (xy,x − y) vars Jacobian kan beräknas med funktionen jacobian: 1 2 3 4 5 6 7 >> f = [x*y,x−y] f = [ x*y, x − y] >> jacobian(f) ans = [ y, x] [ 1, −1] Övningar 1. Bestäm gradienten och Hessianen till f (x,y,z) = xy + xz + yz. 2. Plotta f (x,y) = x2 y 2 med meshc. Bestäm riktningsderivatan till f (x,y) = x2 y 2 i en riktning v = (cos(ϕ), sin(ϕ)) för någon vinkel 0 ≤ ϕ ≤ 2π i punkten (1,1). 3. I vilken riktning ovan är riktningsderivatan som minst och som störst? 4. Den s.k. Rosenbrock-funktionen definieras av f (x,y) = (1 − x)2 + 100(y − x2 )2 . Plotta funktionen på (x,y) ∈ [−1.5, 1.5] × [−1.5, 3.5]. Kommentera funktionens utseende längs y = x2 . 5. Bestäm (symboliskt) alla punkter där funktionen och gradienten till Rosenbrockfunktionen är noll (använd solve för att finna nollställen). 6. Bestäm Hessianen av Rosenbrock-funktionen i punkten (1,1) genom att använda funktionerna hessian och subs. 2 Taylors formel i flera variabler Matlab kan Taylorutveckla symboliska funktioner med godtyckligt antal variabler. Funktionen heter taylor. Här är ett första exempel. 1 2 3 4 5 6 7 >> syms x y >> f = sin(x*y) f = sin(x*y) >> taylor(f,[x,y],'ExpansionPoint',[0 0],'Order',10) ans = x*y − (x^3*y^3)/6 Som ni ser i exemplet är de flesta termer lika med noll i utvecklingen eftersom sin(0) = 0. Kan ni lista ut vilka termer som är nollskilda? I figur 1 ser ni absoluta felet | sin(xy)−xy|, d.v.s. felet om bara den linjära termen i Taylorutvecklingen tas med. Notera att längs koordinataxlarna är felet noll eftersom både funktionen och dess Taylorpolynom är noll. Det innebär även att felet är litet inte bara kring (0,0) utan också kring koordinataxlarna. abs(sin(x y)−x y) 40 30 20 6 10 4 2 0 6 0 4 2 −2 0 −4 −2 −4 y −6 −6 x Figur 1: Plot som visar felet | sin(xy) − xy|. Funktionen f = xyz kan vi inte plotta (grafen är en delmängd av R4 ) men att Taylorutveckla den går bra. Här är Taylorpolynomet av grad 1 kring (1,1,1): 1 2 3 4 >> f = x*y*z; >> taylor(f,[x,y z],'ExpansionPoint',[1 1 1],'Order',2) ans = x + y + z − 2 3 Övningar 7. Bestäm Taylorpolynomet av grad 2 till f = exy kring (0,0) och plotta felet. 8. Avgör först kring vilka punkter (a,b) som Taylorutvecklingen av f = 1/(x+y) existerar. Bestäm sedan Taylorutvecklingen av grad 2 för några olika specifika val av (a,b). Kan du se det allmänna mönstret? Kontrollera genom att bestämma taylorutvecklingen kring en godtycklig punkt (a,b). 9. Taylorutveckla Rosenbrock-funktionen till grad 2 kring (1,1) med Matlabfunktionen taylor. Skriv om denna Taylorutveckling på formen 1 x−1 x−1 T (x,y) = f (1,1) + ∇f (1,1) + (x − 1, y − 1) H(1,1) y−1 y−1 2 där H(1,1) är Hessianen i punkten (1,1). Jämför med uppgift 5 och 6. Tangentplan och kvadratiska former Taylorpolynomet av grad 1 till f (x,y) kring punkten (x0 ,y0 ) är x − x0 . T (x,y) = f (x0 ,y0 ) + ∇f (x0 ,y0 ) y − y0 (1) Om f (x,y) är differentierbar i (x0 ,y0 ) så är detta också ekvationen för tangentplanet 2 2 till ytan z = f (x,y) i punkten (x0 ,y0 ,f (x0 ,y0 )). För t.ex. f (x,y) = ex +y har vi ∇f = 2 2 2ex +y (x,y) så om (x0 ,y0 ) = (1/2,1/2) fås att (kolla detta!) x − 1/2 1/2 1/2 T (x,y) = e + e (1, 1) = e1/2 + e1/2 (x + y − 1) y − 1/2 som är ett plan som går genom punkten (1/2,1/2,e1/2 ) (se figur 2). Vi kan även göra detta i Matlab direkt med taylor 1 2 3 4 5 >> syms x y >> f = exp(x^2+y^2); >> T = taylor(f,[x,y],'Expansionpoint',[1/2,1/2],'Order',2) T = exp(1/2) + exp(1/2)*(x − 1/2) + exp(1/2)*(y − 1/2) 4 8 6 z 4 2 0 −2 −4 −1 1 0.5 −0.5 0 0 −0.5 0.5 1 −1 y x Figur 2: Tangentplanet till f (x,y) = ex 2 +y 2 i punkten (1/2,1/2). En Taylorutveckling till grad ett gav alltså ett tangentplan. En andra gradens Taylorutveckling ger även en andragradsterm och vi får en kvadratisk yta 1 x − x0 x − x0 P2 (x,y) = f (x0 ,y0 ) + ∇f (x0 ,y0 ) + (x − x0 , y − y0 ) H(x0 ,y0 ) y − y0 y − y0 2 där H(x0 ,y0 ) = ′′ ′′ (x0 ,y0 ) (x0 ,y0 ) fxy fxx ′′ ′′ fyx (x0 ,y0 ) fyy (x0 ,y0 ) är Hessianen till f i (x0 ,y0 ). De två första termerna i P2 (x,y) ger som sagt ett plan och den tredje termen är det som ger P2 (x,y) dess eventuella krökning. För exemplet f (x,y) = ex vi i Matlab som 1 2 3 4 5 6 7 8 2 +y 2 har vi redan bestämt gradienten. Hessianen i (1/2,1/2) får >> H = hessian(f) H = [ 2*exp(x^2 + y^2) + 4*x^2*exp(x^2 + y^2), ... 4*x*y*exp(x^2 + y^2)] [ 4*x*y*exp(x^2 + y^2), 2*exp(x^2 + y^2) + ... 4*y^2*exp(x^2 + y^2)] >> H = subs(H,[x,y],[1/2,1/2]) H = [ 3*exp(1/2), exp(1/2)] [ exp(1/2), 3*exp(1/2)] vilket ger andra gradens Taylorpolynom på formen 1 x − 1/2 x − 1/2 1/2 1/2 P2 (x,y) = e + e (1, 1) + (x − 1/2, y − 1/2) H(1/2,1/2) y − 1/2 y − 1/2 2 5 Vi får 1 P2 (x,y) = e1/2 3x2 + 2xy + 3y 2 − 2x − 2y + 2 . 2 I figur 3 ser vi den kvadratiska ytan P2 tillsammans med tangentplanet till f och f :s graf. 25 20 z 15 10 5 0 1 −5 −1 0.5 0 −0.5 0 −0.5 0.5 1 −1 y x Figur 3: Tangentplanet och kvadratiska approximationen till f (x,y) = ex (1/2,1/2). 2 +y 2 i punkten Övningar 10. Bestäm tangentplanen till f (x,y) = x4 + y 4 i punkterna (0,0) och (1,1) och plotta dem tillsammans med f . 11. Bestäm de kvadratiska approximationerna av f (x,y) = x4 + y 4 i punkterna (0,0) och (1,1) och plotta dem tillsammans med f . Jämför med föregående uppgift. Optimering Lokala extrempunkter Betrakta en reellvärd funktion f : Rn → R och anta att den är kontinuerligt deriverbar åtminstone tre gånger (d.v.s. f ∈ C 3 (Rn )). Ett nödvändigt villkor för att f ska ha ett lokalt minimum eller maximum i en punkt x̂ = (x̂1 , . . . , x̂n ) är att x̂ är en stationär punkt, d.v.s. att ∂f ∂f (x̂1 , . . . , x̂n ), · · · , (x̂1 , . . . , x̂n ) = 0. ∇f (x̂) = ∂x1 ∂xn 6 Detta är ett system med n ekvationer i n obekanta. Med andra ord kan en med säkerhet hitta alla lokala extrempunkter bland lösningarna till detta system. Däremot vet en inte om lösningarna (d.v.s. de stationära punkterna) är lokala minpunkter, lokala maxpunkter eller sadelpunkter. Ett tillräckligt villkor fås genom att betrakta andra gradens Taylorpolynom av f kring x̂. I tvåvariabelfallet finns det här beskrivet i boken med start på s. 155. Nu tar vi det i n variabler. Enligt Taylors formel så finns en begränsad funktion B(h) sådan att 1 1 f (x̂ + h) = f (x̂) + ∇f (x̂)h + hT H(x̂)h + |h|3 B(h) = f (x̂) + hT H(x̂)h + |h|3 B(h) 2 2 där H(x̂) är Hessianen i x̂ och där vi har utnyttjat att ∇f (x̂) = 0. Notera att både x̂ och h nu är (kolonn)vektorer i Rn . Uttrycket Q(h) = hT H(x̂)h är en så kallad kvadratisk form som vi här skrivit på matrisform. Om |h| är tillräckligt litet så kommer resttermen att vara till beloppet mindre än termen med Hessianen i. Det betyder att om det finns en omgivning kring h = 0 där det gäller att Q(h) = hT H(x̂)h > 0 (2) f (x̂ + h) = f (x̂) + hT H(x̂)h > f (x̂) (3) för alla h så får vi att för alla punkter x̂ + h i en omgivning av x̂. I så fall är x̂ en lokal minpunkt. Från linjär algebra (repetera detta) vet vi att en kvadratisk form Q(h) som uppfyller villkoret i (2) kallas för positivt definitit, och att villkoret är ekvivalent med att alla egenvärden till H är positiva. På samma sätt kan en visa att om alla egenvärden är negativa så är den stationära punkten ett lokalt maximum. Då kallas Q(h) negativ definit. Om det finns både positiva och negativa egenvärden så är Q(h) indefinit och då är den stationära punkten en sadelpunkt. Om något av egenvärdena är noll men inget är positivt, eller om något är noll men inget är negativt, så måste en se på högre ordningens derivator för att avgöra typen av stationär punkt. I dessa falla kallas Q(h) semidefinit. Sammanfattningsvis så är det alltså ett tillräckligt villkor att alla egenvärden till H(x̂) har samma tecken för att det med säkerhet ska gälla att en stationär punkt x̂ är en lokal extrempunkt. Här är ett exempel som visar hur en kan bestämma alla stationära punkter och deras karaktär till funktionen f (x,y) = ((x2 − 1) + (y 2 − 4) + (x2 − 1)(y 2 − 4))/(x2 + y 2 + 1)2 . Grafen finns i figur 4 längre ner. 1 2 3 4 5 6 7 8 9 10 11 12 >> syms x y f=((x^2−1)+(y^2−4)+(x^2−1)*(y^2−4))/(x^2+y^2+1)^2 f = ((x^2 − 1)*(y^2 − 4) + x^2 + y^2 − 5)/(x^2 + y^2 + 1)^2 >> [xhat,yhat]=solve(gradient(f)) xhat = 0 3^(1/2)/3 −3^(1/2)/3 (2^(1/2)*i)/2 −(2^(1/2)*i)/2 (2^(1/2)*i)/2 7 13 14 15 16 17 18 19 20 21 −(2^(1/2)*i)/2 yhat = 0 0 0 10^(1/2)/2 10^(1/2)/2 −10^(1/2)/2 −10^(1/2)/2 De imaginära lösningarna är vi inte intresserade av här utan bara de tre första. Typ av extrempunkt får vi från Hessianen i de respektive punkterna. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 >> xhat = xhat(1:3);yhat = yhat(1:3); >> H = hessian(f,[x,y]); >> H1 = subs(H,[x,y],[xhat(1),yhat(1)]) H1 = [ −2, 0] [ 0, 4] >> H2 = subs(H,[x,y],[xhat(2),yhat(2)]) H2 = [ 27/16, 0] [ 0, 15/4] >> H3 = subs(H,[x,y],[xhat(3),yhat(3)]) H3 = [ 27/16, 0] [ 0, 15/4] I alla tre punkter blev Hessianen en diagonalmatris och då är det egenvärdena som står på diagonalen. Vi kan alltså direkt se att vi har en sadelpunkt och två lokala minima. Annars kan egenvärden bestämmas med eig. 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 6 4 6 2 4 0 2 0 −2 −2 −4 −4 −6 −6 y x Figur 4: Plot som visar ytan z = f (x,y) = ((x2 −1)+(y 2 −4)+(x2 −1)(y 2 −4))/(x2 +y 2 +1)2 . 8 Övning 12. Finn alla lokala extrempunkter till f (x,y) = x4 + 2x3 y − 6x2 y 2 + y 4 x4 + y 4 + 1 och klassificera dem. 13. Finn alla lokala extrempunkter till f (x,y) = x3 − 3x2 + 5xy − 7y 2 och klassificera dem. Optimering med bivillkor I detta avsnitt tar vi endast upp optimeringsproblem med likhetsbivillkor. Problem med olikhetsbivillkor, där olikheterna definierar en kompakt mängd med inre punkter, kan vi lösa genom att först bestämma alla inre stationära punkter och sedan göra en randundersökning. En sådan randundersökning blir just ett problem med likhetsbivillkor. Låt oss börja med följande minimeringsproblem: Minimera f (x,y) = sin(xy) u.b. g(x,y) = x2 + y 2 − 1 = 0 (4) Här står u.b. för ’under bivillkoret’. Bivillkoret definierar en cirkel med radien ett och centrum i origo. Detta är en kompakt mängd. Eftersom f är kontinuerlig så kan vi alltså vara säkra på att minimeringsproblemet har en lösning. Grafen till vänster i figur 5 visar både ytan f (x,y) = sin(xy) och den kurva på denna yta som fås för punkter längs bivillkoret. I den högra grafen ses några nivåkurvo för f och bivillkorsmängden (cirkeln). De punkter längs cirkeln som ger störst respektive minst värde på f (x,y) ligger där cirkeln tangerar en nivåkurva till f . I en sådan tangeringspunkt gäller att ∇f = λ∇g (5) för någon konstant λ eftersom ∇f och ∇g är normaler till den tangent som är gemensam för de två kurvorna. Figur 5: Grafer till minimeringsproblemet (4). 9 Villkoret i (5) är ett nödvändigt villkor för minimum och det ger för exemplet (4) − cos(xy)(y,x) = λ(2x,2y) (6) − cos(xy)y = 2xλ, − cos(xy)x = 2yλ. (7) vilket vi kan skriva som Ekvationerna ovan är två ickelinjära ekvationer i tre obekanta. Den tredje ekvationen ges av bivillkoret x2 + y 2 − 1 = 0. Vi kan lösa dessa tre ekvationer genom att dividera de två ekvationerna i (7) med varandra och använda bivillkoret (gör det!). Vi får då fyra lösningar 1 1 x = ±√ , y = ±√ . 2 2 För att avgöra vilken av dem som ger minimum så kan vi beräkna f :s värde i var och en av de fyra punkterna och jämföra. I det här fallet visar det sig att det är två minpunkter (med samma funktinsvärde) och att de två andra är maxpunkter. I figur 5 kan vi se att detta verkar rimligt. Villkoret i (5) var alltså inte tillräckligt för ett minimum utan bara nödvändigt. Metoden som använts i exemplet kallas Lagranges multiplikatormetod. Talet λ (som vi aldrig behövde bestämma) kallas Lagranges multiplikator. Övning 14. Lös min (f (x,y) = x2 + y 2 ) u.b. g(x,y) = x + y − 1 = 0 (8) både grafiskt och med Lagranges multiplikatormetod och använd Matlab för att göra exakta beräkningar. Alltså: (a) Plotta nivåkurvorna till f och linjen g = 0 i samma plot och bestäm approximativt lösningen. Använd fcountour för f och fplot för g. (b) Två av ekvationerna i Lagranges multiplikatormetod ges av ∇f = λ∇g. Lös dessa med solve genom att definiera x, y, λ symboliskt. Du får då lösningen (x,y) som beroende av λ. Sätt sedan in denna lösning i bivillkoret, lös för λ och finn slutligen minpunkten (x,y). Beräkna även funktionsvärdet i denna punkt. (c) Stämmer svaren från (a) och (b) överens? 10 Sammanfattning Följande funktioner och konstanter i Matlab behöver ni kunna på detta avsnitt. Gör help för att läsa mer om hur de fungerar och titta speciellt på de exempel som finns givna. Matlabuttryck Kort beskrivning diff Beräknar derivatan av ett symboliskt uttryck https://se.mathworks.com/help/matlab/ref/diff.html sym('x','real') Definierar symbolisk variabel x som reell hessian Beräknar Hessianen av ett symboliskt uttryck https://se.mathworks.com/help/symbolic/sym.html jacobian Beräknar Jakobianen av ett symboliskt uttryck https://se.mathworks.com/help/symbolic/jacobian.html gradient Beräknar gradienten av ett symboliskt uttryck https://se.mathworks.com/help/matlab/ref/gradient.html solve Löser ekvationer och system av ekvationer symboliskt https://se.mathworks.com/help/symbolic/solve.html taylor Bestämmer taylorutveckling av ett symboliskt uttryck https://se.mathworks.com/help/symbolic/sym.taylor.html subs Symbolisk substitution https://se.mathworks.com/help/symbolic/subs.html fplot Plottar uttryck eller funktioner https://se.mathworks.com/help/matlab/ref/fplot.html 11