Hi,
I’ve encountered 2 problems when using cumsum in my objective function. My variable is 2xN matrix called p (actually N 2-dimensional vectors).
First, for the case N=2, the specification of the dimension seem to be reversed as compared to Matlab, i.e Matlab’s cumsum(p,2) should be specified in cvx as cumsum(p,1). This is demonstrated by the following code, once using g1 as the objective and once using g2, where g1 uses cumsum(p,1) and g2 computes cumsum(p,2) explicitly:
x=[1 3;2 4];
[d N] = size(x);
c=2;
g1=@(p)sum(sum((x-cumsum(p,1)).^2)) + c*sum(norms(p(:,2:end)));
g2=@(p)sum((x(:,1)-p(:,1)).^2 + (x(:,2)-sum(p,2)).^2) + c*norm(p(:,2));
cvx_begin
variable p(d,N)
minimize ( g2(p) )
cvx_end
Second, for N>=2, both cumsum(p,1) and cumsum(p,2) gives wrong results. Only If calculate the cumsum explicitly I get the correct result. This is demonstrated by the following code, comparing g3 and g1:
x=[1 3;2 4;5 6];
[d N] = size(x);
c=2;
g1=@(p)sum(sum((x-cumsum(p,1)).^2)) + c*sum(norms(p(:,2:end)));
g3=@(p,pcsum)sum(sum((x-pcsum).^2)) + c*sum(norms(p(:,2:end)));
cvx_begin
variables p(d,N) pcsum(d,N)
minimize ( g3(p,pcsum) ) % g1(p)
subject to
for n = 1:N
pcsum(:,n) == sum(p(:,1:n),2);
end
cvx_end
Is this really a bug or am I doing something wrong?
Thanks.