|
Нахождение максимальной суммы разностей модулей соседних значений вектора, Несколько векторов нужно сложить для максимизации искомой суммы |
|
|
|
Sep 12 2012, 23:06
|
Частый гость
 
Группа: Участник
Сообщений: 117
Регистрация: 6-09-10
Пользователь №: 59 335

|
Приветствую всех!
На данном форуме мне очень здорово когда-то помогли в решении некоторых задач. Поэтому решил еще раз обратиться к уважаемому сообществу с просьбой дать дельный совет/рекомендации, как подступиться к решению такой задачи:
Определена такая функция для любого вектора: F(V) = Sum(Abs(V[j] - V[j + 1])) , либо F(V) = Sum((V[j] - V[j + 1])^2)) Даны одинаковой размерности вектора V1, V2, ..., Vn, у каждого из которых сумма его элементов равна нулю.
Нужно найти вектор NewV = K1 * V1 + K2 * V2 + ... + Kn * Vn, где Sum(Abs(Ki)) = 1, либо Sum(Ki^2) = 1 значение F(NewV) которого было бы максимальным.
У меня есть гипотеза, что всегда верно неравенство F(NewV) <= max(F(V1), F(V1), ...., F(Vn)), т.е. решением задачи является вектор коэффициентов, где один элемент равен ±единице, а остальные - нули.
Возможно, кому-то известно решение схожей или частного случая этой задачи. Спасибо.
Сообщение отредактировал getch - Sep 13 2012, 07:35
|
|
|
|
|
Sep 12 2012, 23:55
|
Частый гость
 
Группа: Участник
Сообщений: 117
Регистрация: 6-09-10
Пользователь №: 59 335

|
Цитата(DRUID3 @ Sep 13 2012, 03:30)  это векторные произведения? Это произведение числа на вектор: Ki - вещественные числа. Vi - вектора. V[j] - j-й элемент вектора V.
Сообщение отредактировал getch - Sep 13 2012, 07:00
|
|
|
|
|
Sep 13 2012, 08:20
|
Частый гость
 
Группа: Участник
Сообщений: 117
Регистрация: 6-09-10
Пользователь №: 59 335

|
Цитата(DRUID3 @ Sep 13 2012, 11:54)  Словами иными - есть набор векторов(? так, не коэффициентов вектора?) и из набора долей единицы(даже вернее из диапазона +/-1) нужно выбрать числа так что-бы сумма векторов была максимальной? Только максимизировать надо не саму сумму векторов, а определенную выше функцию F от этой суммы - F(K1 * V1 + ... + Kn * Vn). F - сумма модулей (или квадратов) разностей соседних элементов вектора.
Сообщение отредактировал getch - Sep 13 2012, 08:21
|
|
|
|
|
Sep 14 2012, 04:52
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(getch @ Sep 14 2012, 02:09)  Нужно найти вектор NewV = K1 * V1 + K2 * V2 + ... + Kn * Vn, где Sum(Abs(Ki)) = 1, либо Sum(Ki^2) = 1 значение F(NewV) которого было бы максимальным. Может ошибаюсь но для квадратичной F() как-то так должно быть: Код k - искомый вектор столбец, V - матрица состоящая из заданных векторов столбцов V1, V2, ..Vn S - матрица сдвига, т.е. произведение S*v(1:end) дает сдвинутый на элемент вектор [v(2:end),0] ' - знак транспонирования
new_v = V*k new_v_shifted = S*V*k
F(new_v) = (new_v-new_v_shifted)' * (new_v-new_v_shifted) = = (V*k-S*V*k)' * (V*k-S*V*k) = (k'*V' - k'*V'*S') * (V*k-S*V*k) = = k'*V'*V*k - k'*V*S*V*k -k'*V'*S*V*k + k'*V'*S'*S*V*k = = k'*(V'*V - V*S*V -V'*S*V + V'*S'*S*V)*k = k'*A*k, где A = (V'*V - V*S*V -V'*S*V + V'*S'*S*V) квадратная матрицы n x n Далее, максимум квадратичной формы k' * A * k, будет когда k является, одним из собственных векторов A.
--------------------
ну не художники мы...
|
|
|
|
|
Sep 14 2012, 16:22
|
Частый гость
 
Группа: Участник
Сообщений: 117
Регистрация: 6-09-10
Пользователь №: 59 335

|
Цитата(alex_os @ Sep 14 2012, 08:52)  Может ошибаюсь но для квадратичной F() как-то так должно быть: Код S - матрица сдвига, т.е. произведение S*v(1:end) дает сдвинутый на элемент вектор [v(2:end),0] Спасибо за подробный ответ! Подскажите, как выглядит матрица сдвига в данном случае? Вместо нее делал бы сдвиг индексов в самом алгоритме, но в выражении ниже ее надо и транспонировать и другое. Т.е. без явного вида не представляю, как обойтись. Цитата(alex_os @ Sep 14 2012, 08:52)  F(new_v) = (new_v-new_v_shifted)' * (new_v-new_v_shifted) = = (V*k-S*V*k)' * (V*k-S*V*k) = (k'*V' - k'*V'*S') * (V*k-S*V*k) = = k'*V'*V*k - k'*V'*S*V*k -k'*V'*S'*V*k + k'*V'*S'*S*V*k = = k'*(V'*V - V'*S*V -V'*S'*V + V'*S'*S*V)*k = k'*A*k, где A = (V'*V - V'*S*V -V'*S'*V + V'*S'*S*V) квадратная матрицы n x n Жирным шрифтом подправил неточности. Цитата(alex_os @ Sep 14 2012, 08:52)  Далее, максимум квадратичной формы k' * A * k, будет когда k является, одним из собственных векторов A. k - собственный вектор матрицы A, соответствующий максимальному собственному значению матрицы A. Правильно ли понимаю, что для такого решения условия равенства нулю суммы элементов каждого исходного вектора Vi, а также единичной длины искомого вектора-стобца k не обязательны?
|
|
|
|
|
Sep 14 2012, 19:19
|
Частый гость
 
Группа: Участник
Сообщений: 117
Регистрация: 6-09-10
Пользователь №: 59 335

|
Цитата(getch @ Sep 14 2012, 20:22)  Подскажите, как выглядит матрица сдвига в данном случае? Вместо нее делал бы сдвиг индексов в самом алгоритме, но в выражении ниже ее надо и транспонировать и другое. Т.е. без явного вида не представляю, как обойтись. Если переписать матрицу A следующим образом: Код A = V'*V - V'*S*V -V'*S'*V + V'*S'*S*V = V'*V - V'*(S*V) -(S*V)'*V + (S*V)'*(S*V) то S-матрица-сдвига будет присутствовать только в виде (S*V), значит можно не гадать, как выглядит матрица-сдвига, а делать упомянутый выше сдвиг индексов в самом алгоритме. Скажите, нет ли ошибки в таких рассуждениях?
Сообщение отредактировал getch - Sep 14 2012, 19:20
|
|
|
|
|
Sep 15 2012, 09:59
|

Эксперт
    
Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183

|
QUOTE (getch @ Sep 14 2012, 23:19)  Если переписать матрицу A следующим образом: CODE A = V'*V - V'*S*V -V'*S'*V + V'*S'*S*V = V'*V - V'*(S*V) -(S*V)'*V + (S*V)'*(S*V) то S-матрица-сдвига будет присутствовать только в виде (S*V), значит можно не гадать, как выглядит матрица-сдвига, а делать упомянутый выше сдвиг индексов в самом алгоритме. Скажите, нет ли ошибки в таких рассуждениях? Нет. А чтобы не гадать, матрица сдвига выглядит как единичная, только единицы НАД диагональю (или ПОД, зависит от направления сдвига). Если нужен циклический сдвиг, то матрицу можно получить сдвигая единичную диагональ направо/налево циклически
|
|
|
|
|
Sep 18 2012, 06:14
|
Частый гость
 
Группа: Участник
Сообщений: 117
Регистрация: 6-09-10
Пользователь №: 59 335

|
Цитата(fontp @ Sep 15 2012, 13:59)  Нет. А чтобы не гадать, матрица сдвига выглядит как единичная, только единицы НАД диагональю (или ПОД, зависит от направления сдвига). Матрица сдвига, конечно, получается огромной - NxN ( N - количество элементов в исходном векторе Vi). Т.е. ее для перемножения использовать совсем нерезонно на практике. Проще алгоритмом сразу. Спасибо, задача теперь решена полностью. В выкладках заинтересовал такой нюанс, что если бы использовалась не матрица-сдвига, а матрица любого преобразования, то все равно не потребовалось бы ее искать. Достаточно лишь знать алгоритм преобразования. Выходит, эксплуатируется какое-то фундаментальное свойство, что любое преобразование можно задать умножением на соответствующую матрицу. Не очевидно совсем.
Сообщение отредактировал getch - Sep 18 2012, 06:17
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|