Уникальная ортогональная составляющая вектора по набору векторов - PullRequest
0 голосов
/ 19 января 2020

Я хотел бы получить ортогональную составляющую вектора v относительно набора векторов { u_1 , u_2 , ... U_n }. Я могу сделать это с помощью подхода Грамма-Шмидта:

v_orth = v
for i=1:N
   v_orth = v_orth - proj(v_orth, u_i)

return v_orth/norm(v_orth)

Однако выход этого алгоритма зависит от порядка u_i . Есть ли метод, который не зависит от порядка u_i ? Например, тот, который возвращает уникальный v_orth с минимальным отклонением от v ?

1 Ответ

0 голосов
/ 20 января 2020

Ваша процедура не обязательно создаст вектор, который ортогонален всем нам.

Например, если нас было только 2, а мы не были ортогональны. Тогда после первого шага у вас будет вектор, ортогональный к u1, но затем на втором шаге (если случайно вектор уже не ортогонален к u2) вычтите кратное u2 из вектора, и так как u1.u2! = 0, результат больше не будет ортогональным к u1.

Сначала нужно найти набор векторов, скажем w_1..w_M (например, с помощью модифицированного Грама-Шмидта), которые ортогональны и занимают то же пространство, что и мы. Их, если вы используете свою процедуру с ws вместо us, вы вычислите вектор, который ортогонален всем ws и, следовательно, всем нам. Более того (кроме ошибок округления) это не будет зависеть от порядка сравнения *

...