#import "caramell.typ": stylle, text_colour

#show: doc => stylle(
    title: "Matan (V10)\nLAB (#7)",
    doc
)

#line(length: 100%, stroke: text_colour)
$ f(x,y) = x^3 y^2 (4- x - y) $
#line(length: 100%, stroke: text_colour)

= Аналитическая часть

Найдём стационарные точки:
$ f'_x = -x^2 y^2 (4 x + 3 (y-4)) $
$ f'_y = x^3 y (-2 x -3 y + 8) $

$ cases(
  -x^2 y^2 (4 x + 3 (y-4)) = 0,
  x^3 y (-2 x -3 y + 8) = 0
) $

$ cases(
  delim: "[",
  x = 0,
  y = 0,
) $

$ cases(
  x = 2,
  y = 4/3,
) $

$
Г = mat(
  (delta^2 f)/(delta x^2), (delta^2 f)/(delta x y);
  (delta^2 f)/(delta y x), (delta^2 f)/(delta y^2);
)
=
mat(
  (delta^2 f)/(delta x^2), (delta^2 f)/(delta x y);
  (delta^2 f)/(delta x y), (delta^2 f)/(delta y^2);
)
$

$
Г =
mat(
  -6 x y^2 (-4 + 2 x + y), x^2 (24 - 8 x - 9 y) y;
  x^2 (24 - 8 x - 9 y) y, -2 x^3 (-4 + x + 3 y);
)
$

По критерию сильвестра:
$ Delta_1 = -6 x y^2 (-4 + 2 x + y) $
$ Delta_2 = -6 x y^2 (-4 + 2 x + y) (-2 x^3 (-4 + x + 3 y)) - (x^2 (24 - 8 x - 9 y) y)^2 $
Вдоль $y=0$ можно подойти по $x = 1/n$ для $Delta_1>0$ либо $x = -1/n$ для $Delta_1<0$, вдоль $x=0$ $Delta_1 > 0$, $Delta_2 < 0$, кроме $x in (0,2)$, там наоборот.

В $(2, 4/3)$ $Delta_1<0, Delta_2<0$

= Вывод:
Точки $x=0$, $y=0$ -- седловые.
Единственная точка максимума -- $(2, 4/3)$

#pagebreak()


= Численный метод

Точка локального максимума: $(x, y, z) = (4/3, 2, 256/27)$
Стартовая точка должна быть отлична от $(x_0,y_0) = (0,0)$, я выбрал $(x_0, y_0) = (0.4, 0.4)$

каждое последующее значение вычисляем по $(x_(k+1), y_(k+1)) = (x_k, y_k) + a_k "grad"(f(x_k,y_k))$

где $a_k$ я попробовал взять в трёх вариантах: 
- $a_k = "const" = 0.01$ 
- $a_k = 1/(k+100)$ 
- $a_k = 1/ln(k+100)$   

Возможные условия остановки:
- Если градиент идёт к бесконечностям (поставил ограничение на возможные значения нормы радиус-вектора $k$-той точки) 
- По достижении $1337$ итераций 
- По малости $a_k$
- По малости $epsilon = Delta f$
- По малости $delta = norm(p_k - p_(k-1))$

Реализация на питоне, с фреймворком `manim`

#pagebreak()

= Результаты численного метода:
Код и видео демонстрации работы метода можно посмотреть на #underline(link("https://github.com/uhChainsaws/gradie")[моём гитхабе])
#figure(
  image("LAB7_ManimCE_v0.18.0.png"),
  caption: "Превью"
)

В результате работы скрипта получаем $600$ итераций и точку $[1.995676, 1.337316, 9.481329]$ (в идеале получилась бы точка $[2.000000, 1.333333, 9.481481]$)

Это результаты с $a_k = 1/(100+k)$ и условием $epsilon<0.0001$