реклама на сайте
подробности

 
 
> Нахождение максимальной суммы разностей модулей соседних значений вектора, Несколько векторов нужно сложить для максимизации искомой суммы
getch
сообщение Sep 12 2012, 23:06
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
getch
сообщение Sep 13 2012, 22:09
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 117
Регистрация: 6-09-10
Пользователь №: 59 335



Да, вектора относительно удобные для мат. аппарата, которым, к сожалению, владею крайне слабо. Поэтому и прошу помощи.
Go to the top of the page
 
+Quote Post
alex_os
сообщение Sep 14 2012, 04:52
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 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.


--------------------
ну не художники мы...
Go to the top of the page
 
+Quote Post
getch
сообщение Sep 14 2012, 16:22
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 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 не обязательны?
Go to the top of the page
 
+Quote Post
getch
сообщение Sep 14 2012, 19:19
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
fontp
сообщение Sep 15 2012, 09:59
Сообщение #6


Эксперт
*****

Группа: Свой
Сообщений: 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), значит можно не гадать, как выглядит матрица-сдвига, а делать упомянутый выше сдвиг индексов в самом алгоритме.

Скажите, нет ли ошибки в таких рассуждениях?


Нет. А чтобы не гадать, матрица сдвига выглядит как единичная, только единицы НАД диагональю (или ПОД, зависит от направления сдвига). Если нужен циклический сдвиг, то матрицу можно получить сдвигая единичную диагональ направо/налево циклически
Go to the top of the page
 
+Quote Post
getch
сообщение Sep 18 2012, 06:14
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 117
Регистрация: 6-09-10
Пользователь №: 59 335



Цитата(fontp @ Sep 15 2012, 13:59) *
Нет. А чтобы не гадать, матрица сдвига выглядит как единичная, только единицы НАД диагональю (или ПОД, зависит от направления сдвига).


Матрица сдвига, конечно, получается огромной - NxN (N - количество элементов в исходном векторе Vi). Т.е. ее для перемножения использовать совсем нерезонно на практике. Проще алгоритмом сразу.

Спасибо, задача теперь решена полностью.

В выкладках заинтересовал такой нюанс, что если бы использовалась не матрица-сдвига, а матрица любого преобразования, то все равно не потребовалось бы ее искать. Достаточно лишь знать алгоритм преобразования.

Выходит, эксплуатируется какое-то фундаментальное свойство, что любое преобразование можно задать умножением на соответствующую матрицу. Не очевидно совсем.

Сообщение отредактировал getch - Sep 18 2012, 06:17
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- getch   Нахождение максимальной суммы разностей модулей соседних значений вектора   Sep 12 2012, 23:06
- - DRUID3   ЦитатаK1 * V1 это векторные произведения?   Sep 12 2012, 23:30
- - getch   Цитата(DRUID3 @ Sep 13 2012, 03:30) это в...   Sep 12 2012, 23:55
- - DRUID3   Цитата(getch @ Sep 13 2012, 02:06) Нужно ...   Sep 13 2012, 07:54
|- - getch   Цитата(DRUID3 @ Sep 13 2012, 11:54) Слова...   Sep 13 2012, 08:20
- - DRUID3   А какая разница? Вот у Вас целевая функция. Вот ве...   Sep 13 2012, 20:38
- - getch   Понимаю, что решение в лоб всегда существует. В ло...   Sep 13 2012, 21:10
- - DRUID3   Цитата...у каждого из которых сумма его элементов ...   Sep 13 2012, 21:47
||- - fontp   QUOTE (getch @ Sep 18 2012, 09:14) Выходи...   Sep 18 2012, 08:05
|- - fontp   Если нужен циклический сдвиг, то матрицу можно пол...   Sep 15 2012, 09:59
- - Oldring   Цитата(getch @ Sep 13 2012, 03:06) Гугл...   Sep 19 2012, 11:10
- - getch   Цитата(Oldring @ Sep 19 2012, 15:10) Гугл...   Sep 19 2012, 15:13
- - iiv   Цитата(getch @ Sep 19 2012, 21:13) Поэтом...   Oct 5 2012, 17:51


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 12:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01446 секунд с 7
ELECTRONIX ©2004-2016