
# The gradient descent algorithm on a manifold

Based on a manifold $\M$, a starting point $x^{(0)} = x$, and a gradient (or descent) direction $\gradM F$ of a function $F\colon\M\to\R$ this function performs a gradient descent algorithm

with step size $s_k$, $k=1,\ldots,$ until a stopping criterion is fulfilled.

All functions involved are provided as anonymous functions: The gradient gradF is a function based on @(x), the step size is a function @(x,descentDir,iter,initial) based on the current iterate$x=x^{(k)}$, descent direction $\eta$, the iteration $k$ and an initial step size to start seaching with. This value is set to the last step size within the iterations. Finally the stoppingCriterion is a function based on @(x,xold,iter) that returns false as long as the algorithm should run, hence the algorithm stops if the stopping criterion is fulfilled for the first time.

### Optional Parameters

Debug
If set to an anonymous functional depending on @(x,xold,iter) this is called in each cycle, for example to produce text output or save iteration data to a file.
Record
If set to a functional @(x,iter) returning a column vector, and calling the cyclicProximalPoint with a second return value, this function records these column vectors in a matrix returned in the second return value recData.

### Matlab Documentation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
%    compute a gradient descent based on
%
% INPUT
%    M                : a manifold M
%    x                : initial data
%    gradF            : a function @(x) returning the gradient of F at x
%    stepSize         : a function @(x,eta,iter,initial) returning the
%                       stepsize at x with direction eta corresponding to a
%                       certain rule (e.g. Amijo) based on iterate point x,
%                       descent direction eta, iteration iter and initial
%                       stepsize initial.
%   stoppingCriterion : a function @(x,xold,iter) determining whether to
%                       stop or not
%
% OPTIONAL
%   Debug             : ([]) a function @ (x,xold,iter) producing debug
%                          output
%   Record            : (@(x,iter)) a function returning a column vector,
%                       if there's a second return value and this function
%                       is given, data is recorded in an array and returned
% ---
% MVIRT | R. Bergmann | 2018-01-22