2D-объединение лассо с Matlab CVX

Здесь я написал 2D-код плавного лассо.

[m n] = size(circle);
cvx_begin
    variable theta(m, n);
    minimize( norm(circle-theta, 'fro'));
    subject to
        sum(sum(abs(theta(:,1:n-1)-theta(:,2:n)))) == 0;
        sum(sum(abs(theta(1:m-1,:)-theta(2:m,:)))) == 0;
cvx_end

Как ни странно, программный отчет,

В cvxprob (строка 28) В cvx_begin (строка 41) Ошибка при использовании cvxprob/newcnstr (строка 192) Ошибка дисциплинированного выпуклого программирования:
Неверное ограничение: {выпуклое} == {константа}

Ошибка в == (строка 12) b = newcnstr( evalin( 'вызывающий', 'cvx_problem', '[]' ), x, y, '==' );

После того, как я удалю abs() в ограничении, программа сможет работать, но это не то ограничение, которое я ожидаю.


person xxx222    schedule 09.09.2016    source источник
comment
ну что. Это не код MATLAB, не так ли?   -  person Ander Biguri    schedule 09.09.2016
comment
Он использует пакет cvx под MATLAB.   -  person xxx222    schedule 09.09.2016


Ответы (1)


Я думаю, вы можете попробовать сложить матрицы в векторы, а затем использовать норму L1. В CVX это просто норма (переменная, 1). Это будет делать то же, что вы написали здесь: сумма абсолютных элементарных разностей.

person Linus Zhang    schedule 25.04.2019