lineSearchBB {rstiefel} | R Documentation |
A curvilinear search on the Stiefel manifold with BB steps (Wen and Yin 2013, Algo 2) This is based on the line search algorithm described in (Zhang and Hager, 2004)
lineSearchBB(F, X, Xprev, G_x, G_xprev, rho, C, maxIters = 20)
F |
A function V(n, p) -> R |
X |
an n x p semi-orthogonal matrix (the current ) |
Xprev |
an n x p semi-orthogonal matrix (the previous) |
G_x |
an n x p matrix with (G_x)_ij = dF(X)/dX_ij |
G_xprev |
an n x p matrix with (G_xprev)_ij = dF(X_prev)/dX_prev_ij |
rho |
Convergence parameter, usually small (e.g. 0.1) |
C |
C_t+1 = (etaQ_t + F(X_t+1))/Q_t+1 See section 3.2 in Wen and Yin, 2013 |
maxIters |
Maximum number of iterations |
A list containing Y: a semi-orthogonal matrix Ytau which satisfies convergence criteria (Eqn 29 in Wen & Yin '13), and tau: the stepsize satisfying these criteria
Alexander Franks
(Wen and Yin, 2013) and (Zhang and Hager, 2004)
N <- 10
P <- 2
M <- diag(10:1)
F <- function(V) { - sum(diag(t(V) %*% M %*% V)) }
dF <- function(V) { - 2*M %*% V }
Xprev <- rustiefel(N, P)
G_xprev <- dF(Xprev)
X <- rustiefel(N, P)
G_x <- dF(X)
Xprev <- dF(X)
res <- lineSearchBB(F, X, Xprev, G_x, G_xprev, rho=0.1, C=F(X))