0001 function y = centroid(M, x)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 n = numel(x);
0018
0019 problem.M = M;
0020
0021 problem.cost = @cost;
0022 function val = cost(y)
0023 val = 0;
0024 for i = 1 : n
0025 val = val + M.dist(y, x{i})^2;
0026 end
0027 val = val/2;
0028 end
0029
0030 problem.grad = @grad;
0031 function g = grad(y)
0032 g = M.zerovec(y);
0033 for i = 1 : n
0034 g = M.lincomb(y, 1, g, -1, M.log(y, x{i}));
0035 end
0036 end
0037
0038
0039
0040
0041
0042
0043 query = warning('query', 'manopt:getHessian:approx');
0044 warning('off', 'manopt:getHessian:approx');
0045 options.verbosity = 0;
0046 options.maxiter = 15;
0047 y = trustregions(problem, x{randi(n)}, options);
0048 warning(query.state, 'manopt:getHessian:approx');
0049
0050 end