Как устранить ошибку «Внутренние размеры матрицы должны совпадать»?

Это мой код в CVX:

load('C')

r=C(:,4);
t=C(:,5);

n = size(C,1);
N = 100;

for i=1:n
    eta(i,1) = randn()/2;
end

cvx_begin
    variable x(n,1)

    maximize r'*x - t'*x

    subject to
        ones(n,1)'*x == N
        x >= zeros(n,1)
        exp(-x/N) >= eta
cvx_end

Это дает следующую ошибку в строке, где объявлена ​​целевая функция:

«Внутренние размеры матрицы должны совпадать».

Что я делаю не так?

Ошибка сохраняется, даже если я пишу последнее ограничение следующим образом:

for i=1:n
    exp(-x(i,1)/N) >= eta(i,1)
end

person Kristada673    schedule 08.08.2017    source источник
comment
Да, поскольку r, x и t все являются векторами n x 1, r'*x - t'*x должен быть скаляром.   -  person Kristada673    schedule 08.08.2017
comment
Подождите, вы изменили сообщение об ошибке. в какой строке ошибка?   -  person Ander Biguri    schedule 08.08.2017
comment
@AnderBiguri Да, я только что понял, почему появляется ошибка objective function is not scalar. Это было потому, что при объявлении переменной x я должен был объявить ее как x(n,1), иначе, как вы сказали, CVX подумает, что это скаляр, если я просто объявлю ее как x. Итак, теперь это исправлено, но у меня другая ошибка, и я отредактировал вопрос, чтобы отразить ее.   -  person Kristada673    schedule 08.08.2017
comment
@AnderBiguri В строке maximize r'*x - t'*x.   -  person Kristada673    schedule 08.08.2017
comment
Мое предположение такое же: cvx не знает размер t и r   -  person Ander Biguri    schedule 08.08.2017
comment
Но я определил t и r в самом начале как векторы, размеры которых равны n x 1   -  person Kristada673    schedule 08.08.2017
comment
@AnderBiguri Получил ошибку. Целевую функцию необходимо заключить в скобки, поскольку она состоит из двух членов: maximize (r'*x-t'*x)   -  person Kristada673    schedule 08.08.2017
comment
Ответь на свой вопрос ;)   -  person Ander Biguri    schedule 08.08.2017


Ответы (1)


Ошибка в том, что я не заключил в скобки целевую функцию, которая требуется в данном конкретном случае, так как она имеет 2 члена. Итак, maximize (r'*x-t'*x) решает ошибку.

person Kristada673    schedule 08.08.2017