Уже есть решение , но мы должны адаптировать его для совместимости с CVX.
squeeze(sum(sum(reshape(X,k,n/k,k,n/k),1),3))
Мне нужно использовать этот код суммирования в инструменте оптимизации , CVX, который не go хорошо со встроенными функциями MATLAB.
к счастью, только некоторые из встроенных функций непригодны для использования, иначе это будет очень сложно. Цитата из справочного руководства :
Ряд базовых и билинейных функций Matlab c либо автоматически работают с выражениями cvx, либо были расширены для этого, в том числе: con, conv, cumsum, diag, точка, найти, fliplr, flipud, flipdim, horzcat, hankel, ipermute, kron, среднее значение, permute, repmat, изменить форму, rot90, sparse, sum, trace, tril, triu, toeplitz, vertcat.
разрешено изменение формы, это означает, что сжатие должно быть заменено. Здесь сжатие используется для преобразования матрицы [1, n / k, 1, n / k] в матрицу [n / kn / k]. Его можно заменить с помощью изменения формы:
n=6
k=2
X=magic(n)
reshape(sum(sum(reshape(X,k,n/k,k,n/k),1),3),n/k,n/k)