Uploaded by lxuvaddafxaytksjgs

MA505G Datorlaboration 3

advertisement
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
Download