---
fontsize: 10pt
format: pdf
bibliography: 11_Referenzen.bib
---

# Seminar Nichtlineare Optimierung

Ziel dieses Seminar ist es, die Implementation eines Gradientenverfahrens
basierend auf der in der Vorlesung vorgestellten Theorie nachzuvollziehen und in 
einem Anwendungsbeispiel zur anhand einer einfachen Funktion zu diskutieren.


```{r, echo = F}
# Funktionsdefinitionen
# ------------------------------------------------------------------------------
# Zielfunktion
f = function(x) {
  return(x[1]^2 + x[2]^2)                 # f(x) := x_1^2 + x_2^2
}
# Gradient der Zielfunktion
nabla_f = function(x) {
  return(matrix(c(2*x[1],2*x[2]),         # \nabla f(x) := (2x_1, 2x_2)^T
                nrow = 2))
}
# Gradientenverfahren
# ------------------------------------------------------------------------------
# Parameter
n      = 2                               # Dimension
alpha  = 1e-1                            # Lernrate
delta  = 1e-2                            # Konvergenzkriterium

# Initialisierung
x_k   = matrix(c(.61,.85), nrow = 2)     # Zufälliger Startpunkt in [0,1]^2
x     = x_k                              # Initialisierung Iteranden
fx    = f(x_k)                           # Initialisierung Funktionswerte
crt   = norm(nabla_f(x_k))               # Initialisierung Kriterium

# Iterationen
while(norm(nabla_f(x_k)) > delta){

  # Argumentupdate
  x_k   = x_k - alpha*nabla_f(x_k)

  # Dokumentation
  x    = cbind(x,x_k)
  fx   = c(fx,f(x_k))
  crt  = c(crt, norm(nabla_f(x_k)))
}
```
