Többváltozós függvényvizsgálat

Tekintsük az f=x^2+2 x y +y^4 függvényt, határozzuk meg stacionárius pontjait ill a szélsőértékeit.

Hasznos többváltozós fv-ek deriválására fv-t definiálni:

grad[fv_, valt_List] := Map[D[fv, #] &, valt]

grad[x^2 + y^2 - 3  z, {x, y, z}]

grad[x y z w, {x, y, z, w, t}]

Ennek segítségével megtalálhatjuk a függvényünk stac pontjait:

grad[x^2 + 2 x y + y^4, {x, y}]

stac = 
      Solve[grad[x^2 + 2 x y + y^4, {x, y}] == {0, 0}, {x, 
          y}]

(Nem biztos, hogy a Solve megtalálja a gyököket, most szerencsénk volt...)

N[stac]

Ahhoz, hogy eldöntsük, hogy valóban szélsőértékeket találtunk-e (és hogy azok milyenek), szükség van a másodrendű deriváltakból álló mátrixra a megfelelő pontokban

dmatrix[fv_, valt_List] := grad[grad[fv, valt], valt]

dmatrix[x^2 + 2 x y + y^4, {x, y}]

matr = % /.  stac

Map[MatrixForm, matr]

Ezekről kellene eldönteni, hogy pozitív, negatív vagy indefinitek. Ezt megtehetjük úgy is, hogy megvizsgáljuk a sajátértékeket:

N[Map[Eigenvalues, matr]]

Látható, hogy az első pont nem szálsőérték, míg a másik kettő lokális minimum. Ezt ábrákról is leolvashatjuk (leginkább a DensityPlot-ról):

Plot3D[
      x^2 + 2 x y + y^4, {x, - .1,  .1}, {y, - .1,  .1}]

DensityPlot[
      x^2 + 2 x y + y^4, {x, - .1,  .1}, {y, - .1,  .1}, 
      PlotPoints -> 50, ColorFunction -> Hue]

Plot3D[
      x^2 + 2 x y + y^4, {x, 1/(Sqrt[2]) -  .1, 
        1/(Sqrt[2]) +  .1}, {y, -1/(Sqrt[2]) -  .1, -1/(Sqrt[2]) +  .1}]

DensityPlot[
      x^2 + 2 x y + y^4, {x, 1/(Sqrt[2]) -  .2, 
        1/(Sqrt[2]) +  .2}, {y, -1/(Sqrt[2]) -  .2, -1/(Sqrt[2]) +  .2}, 
      PlotPoints -> 50, ColorFunction -> Hue]

Gyakorlás: nézzék meg a Exp[-(x+y+z)^2](x^2+y^2+z^2) fv szélsőértéékeit...

Házi feladatok

1. Keressük meg a Cos[x^2]+x Cos[y] fv stacionárius pontjait és szélsőértékeit az x∈[-1,1], y∈[-π/4,3/4 π] tartományon! (Numerikus meg némi "kézi" számolásra is szükség van)

2. Írjunk fv-t, ami egy beadott egyváltozós fv-ről "eldönti", hogy az adott intervallumon pozitív-e, a következő módon: generálunk 1000 véletlen számot a megfelelő intervallumban (Random[Real,{a,b}]), és ha a függvényérték minden számnál pozitív, akkor azt mondja, hogy a fv mindenütt pozitív. (A fv bemenetei: fv_, valtozo_, a_,b_, ahol [a,b] a megfelelő intervallum, a kimenet legyen True, ha poz, egyébként false.)

3.   Írjunk programot, ami 10000-ig megtalálja az összes tökéletes számot. (Egy szám tökéletes, ha egyenlő a nála kisebb poz osztóinak összegével.)

Figyelem! A házi dolgozat leadásának határideje május 6. !!!