функция стоимости - оптимизация matlab

У меня есть сигнал X1 = [a1,...aN], где значения [a1,....,aN] всегда >0

У меня есть другие 599 сигналов X2, X3, ...,X600 той же длины (N) из X1. Эти сигналы могли принимать значения >0 и ‹0.

Я знаю, что сумма всех 600 сигналов всегда положительна и равна сигналу S
S = X1 + X2 + ... + X600

Я хотел бы распределить первый сигнал X1, чтобы наилучшим образом уменьшить отрицательные значения других сигналов ... не могли бы вы предложить мне, как это сделать (я использую Matlab)?

В лучшем случае S = X2' + X3' + ... + X600', где X2', X3' и т. д. — положительные сигналы.

Спасибо

ИЗМЕНИТЬ

% signal x1
x=rand(1,1000);
x(x<0)=0.01;

% signals x2,....,x599 contained in the rows of A
A=rand(599,1000);

person gabboshow    schedule 27.03.2015    source источник


Ответы (1)


Похоже, вы хотите минимизировать следующую цель (J) по сравнению с (A):

J = sum( abs( x(:,1) - A*x(:,1)) ) +...
             sum(negativehockeystick( x(:, 2:end) + A.*x(:,1))

где A — матрица 599*N (переменная оптимизации).

а 'negativehockeystick' - это функция -min(x,0)

Я думаю, что cvx может справиться с этой проблемой, так как он выглядит выпуклым (в A), но я не уверен

person alexandre iolov    schedule 27.03.2015
comment
Привет! Я думаю, что не хватает скобки... может быть, в конце? тогда где я могу найти функцию отрицательный хоккейстик? - person gabboshow; 30.03.2015
comment
отрицательная хоккейная палочка = @(x) -min(x, 0) - person alexandre iolov; 30.03.2015
comment
Привет Александр. Благодарю за разъяснение. Ваш код работает с примером, который я привел в своем вопросе? Я отредактировал свой вопрос после вашего первого ответа... - person gabboshow; 30.03.2015
comment
% сигнала x1 x=rand(1000,1); х(х‹0)=0,01; % сигналов x2,....,x599, содержащихся в строках A A = rand(1000,599); отрицательная хоккейная палка = @(x) -min(x,0) B = единицы(1000 599); J = сумма ( абс ( x - x. * сумма ( B , 2)) + ... сумма ( отрицательная хоккейная клюшка ( A + A. * B ), 2)) - person alexandre iolov; 30.03.2015
comment
Теперь B является целевой переменной, потому что вы назвали A значениями X, я отредактирую исходный ответ, если это сработает. - person alexandre iolov; 30.03.2015
comment
Спасибо за ваш добрый ответ... теперь код работает (т. е. я получаю J = 3,0485e + 05), но как мне интерпретировать этот результат? - person gabboshow; 30.03.2015
comment
Давайте продолжим обсуждение в чате. - person alexandre iolov; 30.03.2015