IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Pitris4
Člen
Avatar
Pitris4:2.3.2018 17:01

Ahoj, potřeboval bych pomoct s tímto příkladem. Obecný postup chápu, ale s tímto si nevím rady.

 
Odpovědět
2.3.2018 17:01
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Pitris4
Jindřich Máca:2.3.2018 19:07

Ahoj, tak jenom pro sjednocení postupu, abychom to chápali stejně. Lokální extrémy funkce f() obecně o n neznámých hledáme následovně:

  1. Vypočítáme první derivaci funkce f'(). Pro funkce o více neznámých počítáme derivace podle všech a výsledek poskládáme do vektoru, kterému se říká gradient.
  2. Položíme derivaci (gradient) roven nule a tím hledáme kritické body podezřelé z extrému, neboli stacionární body.
  3. Poté ověřujeme, zda je v těchto bodech opravdu extrém a to tak, že vypočítáme druhou derivaci funkce f''(), dosadíme jednotlivé stacionární body a zkoumáme, jestli je f′′() v daném bodě je > 0 nebo < 0. Podle toho se rozhodneme, zda se jedná o lokální minimum, či maximum. Pozor, pro funkce o více neznámých vyjde pro f′′() celá matice, které se říká hesián a určit, zda je celá matice > 0 nebo < 0 není úplně triviální. Existuje na to obecná formule, ale i speciální kritéria, která to mohou dosti ulehčit např. Sylvesterovo kritérium.
  4. Pokud f''() vyjde = 0, tak obecně můžeme derivovat dále a celý postup opakovat. Ovšem pro funkce více proměnných zde většinou končíme, protože po dalších derivacích se dostáváme do prostorů výších dimenzí 3D a 4D. Tam se potom i > 0 nebo < 0 ověřuje hodně špatně. Místo toho tedy většinou říkáme, že se v tomto bodě nachází sedlo.

Mimochodem obecný předpokladem pro tento postup je, že funkce f() je derivovatelná.

Popis postupu není asi úplně matematicky přesně a některé detaily zanedbává, ale přišlo mi dobré to zde vysvětlit trochu "lidsky". :)

Nuže v dalších komentáři zkusím postup aplikovat a vyřešit konkrétně tu Tvoji funkci. ;)

Editováno 2.3.2018 19:08
 
Nahoru Odpovědět
2.3.2018 19:07
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Pitris4
Jindřich Máca:2.3.2018 19:32

Takže jdeme na to. Nejdříve opíši zadání:

f(x,y) = y + 1/y - 2 * (ln(x))^2

Možná by předem také nebylo špatné vidět, jak ta funkce vlastně vypadá v grafu. K tomu si na pomoc vezmu Wolfram|Alpha a pro jistotu ho použiji i k počítání derivací, abych si to ověřil. :)

0. Graf funkce:
https://www.wolframalpha.com/input/?…

Mimochodem předpokládám, že počítáme na R, takže budu ignorovat, že to má řešení i v C. :D

1. Spočítám gradient:

  1. První derivace podle x:
d/dx y + 1/y - 2 * (ln(x))^2 = - (4 * ln(x)) / x

https://www.wolframalpha.com/input/?…

  1. První derivace podle y:
d/dy y + 1/y - 2 * (ln(x))^2 = 1 - 1/(y^2)

https://www.wolframalpha.com/input/?…

  1. Výsledný gradient:
grad y + 1/y - 2 * (ln(x))^2 = (- (4 * ln(x)) / x, 1 - 1/(y^2))

https://www.wolframalpha.com/input/?…

Tak jo, máme gradient, který teď můžeme vzít a položit rovno nule, ale to udělám až v dalším komentáři. ;)

 
Nahoru Odpovědět
2.3.2018 19:32
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Pitris4
Jindřich Máca:2.3.2018 19:34

Koukám, že ITnetwork komentáře nějak kazí ty odkazy na Wolfram, když tak stačí vzít tu první část a vložit přímo na stránku a mělo by to normálně spočítat, jelikož to píšu v té jejich syntaxi. ;)

 
Nahoru Odpovědět
2.3.2018 19:34
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Pitris4
Jindřich Máca:2.3.2018 19:41

2. Položíme gradient rovno nule (samozřejmě vektorově):

(- (4 * ln(x)) / x, 1 - 1/(y^2)) = (0,0)

Z toho vznikne soustava rovnic:

- (4 * ln(x)) / x = 0, 1 - 1/(y^2) = 0

A její výsledek budou stacionární body:

x = 1, y = 1
x = 1, y = -1

https://www.wolframalpha.com/input/?…

Toto jsou tedy naše dva body.

Další krok je spočítat druhou derivaci funkce, neboli hesián. Viz. další komentář. :D

 
Nahoru Odpovědět
2.3.2018 19:41
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Pitris4
Jindřich Máca:2.3.2018 19:59

3. Spočítáme hesián:
a. Derivace první složky gradientu podle x:

d/dx - (4 * ln(x)) / x = (4 * (ln(x) - 1)) / x^2

http://m.wolframalpha.com/input/?…

Vlastně se jedná o druhou derivaci původní funkce.

b. Derivace druhé složky gradientu podle x:

d/dx 1 - 1/(y^2) = 0

http://m.wolframalpha.com/input/?…

Ano, je potřeba derivovat všechny složky, i když už se tam samotná derivační proměnná nenachází, protože v obecném případě tam klidně může být.

c. Derivace první složky gradientu podle y:

d/dy - (4 * ln(x)) / x = 0

http://m.wolframalpha.com/input/?…

d. Derivace druhé složky gradientu podle y:

d/dy 1 - 1/(y^2) = 2 / y^3

http://m.wolframalpha.com/input/?…

Z těchto čtyř derivací vznikne tedy hesiánová matice:

hessian matrix y + 1/y - 2 * (ln(x))^2 = ((4 * (ln(x) - 1)) / x^2 0, 0 2 / y^3)

http://m.wolframalpha.com/input/?…

Omlouvám se za zápis, ale víceřádková matice se špatně zapisuje na jeden řádek.

A nyní je tedy potřeba do matice dosadit stacionární body a zjistit, zda bude > 0, < 0 nebo = 0. Opět viz. další komentář. :D

 
Nahoru Odpovědět
2.3.2018 19:59
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Pitris4
Jindřich Máca:2.3.2018 20:25

4. Dosazení stacionárních bodů do hesiánu:
a. První bod (1,1):

((4 * (ln(x) - 1)) / x^2 0, 0 2 / y^3) => ((4 * (ln(1) - 1)) / 1^2 0, 0 2 / 1^3) = (-4 0, 0 2)

Poměrně jednoduché dosazení, ale jaká je tato výsledná matice? To zjistíme pokud se budeme ptát na její tzv. definitnost. Pokud bude pozitivně definitní, tak je v bode lokální minimum. Pokud bude naopak negativně definitní, tak je v bodě lokální maximum. Pokud bude indefinitní, tak je v bodě již zmiňované sedlo.

Nuže:

Is {{-4, 0}, {0, 2}} positive definite? => NO
Is {{-4, 0}, {0, 2}} negative definite? => NO

https://www.wolframalpha.com/input/?…
https://www.wolframalpha.com/input/?…

Z toho plyne, že v bodě není ani lokální minimum, ani lokální maximum, nýbrž sedlo. Dobrá, ještě zkontrolovat druhý bod stejným postupem.

b. Druhý bod (1,-1):

((4 * (ln(x) - 1)) / x^2 0, 0 2 / y^3) => ((4 * (ln(1) - 1)) / 1^2 0, 0 2 / (-1)^3) = (-4 0, 0 -2)

Definitnost výsledné matice:

Is {{-4, 0}, {0, -2}} positive definite? => NO
Is {{-4, 0}, {0, -2}} negative definite? => YES

https://www.wolframalpha.com/input/?…
https://www.wolframalpha.com/input/?…

Z toho tedy plyne, že v bodě (1, -1) se nachází lokální extrém a je to lokální maximum. Heuréka! :-`

Mimochodem všechny tyto poznatky už se daly zkušenějším okem docela dobře vykoukat z toho původního grafu funkce. :D

Tento kód vrátí onen bod:

max y + 1/y - 2 * (ln(x))^2

https://www.wolframalpha.com/input/?…

A tento řekne, že zde není žádné minimum:

min y + 1/y - 2 * (ln(x))^2

https://www.wolframalpha.com/input/?…

To je za mě asi všechno, kdyby byly nějaké dotazy, klidně se ptejte. ;)

P.S.: Osobně matiku moc nemusím... :D

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
2.3.2018 20:25
Avatar
Pitris4
Člen
Avatar
Pitris4:3.3.2018 9:14

Mockrát děkuju, teď když vidím postup tak vím, kde jsem dělal chybu.

 
Nahoru Odpovědět
3.3.2018 9:14
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.