Найти неколлинеарный вектор

lenmas

Дан ненулевой вектор в R^3, заранее неизвестно как расположенный. Нужно подобрать любой неколлинеарный ему вектор в явном виде. Требуется аналитическая формула, желательно покороче, без разветвлений. Можно использовать скалярные, векторные произведения.
Сам не могу никак подобрать, глаза зашорены окончательно :crazy:

Sergey79

А попробуй сумму его вект. произведений с ортами еще раз векторно домножить на него.

lena1978

без ветвления, мне кажется, не получится.
из-за того, что нельзя причесать ежа :ooo:

lenmas

из-за того, что нельзя причесать ежа :ooo:
Ничего себе! :ooo:
Что, с непрерывными функциями не получится? :(

lenmas

А попробуй сумму его вект. произведений с ортами еще раз векторно домножить на него.
Ща попробую, спасибо!

Sergey79

ой, мне это уже не кажется хорошей идеей=)

lenmas

А попробуй сумму его вект. произведений с ортами еще раз векторно домножить на него.
Получится что-то типа проекции вектора на ортогональное дополнение к e_1+e_2+e_3, а оно может оказаться нулем :(

Sergey79

да, я уж понял

lenmas

без ветвления, мне кажется, не получится.
из-за того, что нельзя причесать ежа :ooo:
Можешь аккуратно привести к ежу, чтобы я не мучался? :confused:
Да и собеседников неохота зря напрягать :crazy:

vodnik2

Расшифрую мысль .
Если б такая формула была, то мы, применив ее к элементам единичной сферы, получили бы отображения сферы в себя, которое не имеет неподвижных точек и никакую точку не отображает в противоположную. Тогда спроецируем вектор из каждой точки сферы, идущий в ее образ, на касательную плоскость к сфере в этой точке. Получим непрерывное векторное поле на сфере, нигде не обращающееся в нуль, то есть причесанного ежа. Противоречие.

griz_a

Любое непрерывное отображение шара в себя имеет неподвижную точку.
Значит если свести наше непрерывное отображение, строящее неколлинеарный вектор к отображению шара в себя (то есть поделить на максимум нормы образов точек шара то у него будет неподвижная точка. Что противоречит неколлинеарности образов.

Xephon

Можешь аккуратно привести к ежу, чтобы я не мучался?

От противного. Предположим, для любого вектора x единичной длины существует непрерывно зависящая от x вектор-функция f(x такая, что f(x) и x неколлинеарны. Тогда векторное произведение [x,f(x)] будет задавать в точке x на единичной сфере ненулевой вектор ортогональный x, а значит — касательный к сфере. Он непрерывно зависит от вектора x, а значит и точки на сфере.

lenmas

Расшифрую мысль .
Если б такая формула была, то мы, применив ее к элементам единичной сферы, получили бы отображения сферы в себя, которое не имеет неподвижных точек и никакую точку не отображает в противоположную. Тогда спроецируем вектор из каждой точки сферы, идущий в ее образ, на касательную плоскость к сфере в этой точке. Получим непрерывное векторное поле на сфере, нигде не обращающееся в нуль, то есть причесанного ежа. Противоречие.
Спасибо! Придется ставить if'ы :crazy:

lenmas

Любое непрерывное отображение шара в себя имеет неподвижную точку.
Значит если свести наше непрерывное отображение, строящее неколлинеарный вектор к отображению шара в себя (то есть поделить на максимум нормы образов точек шара то у него будет неподвижная точка. Что противоречит неколлинеарности образов.
Спасибо, Саша! Буду знать :)

lenmas

От противного. Предположим, для любого вектора x единичной длины существует непрерывно зависящая от x вектор-функция f(x такая, что f(x) и x неколлинеарны. Тогда векторное произведение [x,f(x)] будет задавать в точке x на единичной сфере ненулевой вектор ортогональный x, а значит — касательный к сфере. Он непрерывно зависит от вектора x, а значит и точки на сфере.
Ага, я понял!
"Студенту нужно все объяснять, Ганс, три раза! Три раза! Запомни, Ганс, три раза!" :grin:

lena1978

аккуратно?
ну ты хочешь получить некоторый вектор b = f(a где a - исходный. рассмотрим такую функцию только для единичных векторов. если такая функция есть, то рассмотрим g(a) = f(a)/|a|.
это отображение сферы в себя. если оно непрерывное, то либо имеет неподвижную точку, либо отображает точку в диаметрально противоположную. получается, что всегда какой-то вектор переходит в коллинеарный.
апазадал :grin:

lenmas

апазадал :grin:
Но все равно огромное спасибо!
Кстати, решил остановиться на векторе
[math]  $$  \vec x\times\vec e_i,  $$  [/math]
где
[math]  $$  i=\arg\min x_i^2.  $$  [/math]
Правда, еще надо разобраться, как в MatLab'е аргумент минимума последовательности получить :grin:

svetik5623190

общая топология рулит! :D

narkom

Правда, еще надо разобраться, как в MatLab'е аргумент минимума последовательности получить
функцией min, если я правильно тебя понял. синтаксис примерно такой [x_o i_o] = min(x).

lena1978

это не общая

svetik5623190

ладно, функан и дифгем рулят
так лучше? :D

Nefertyty

может с использованием операций типа sign можно без ветвлений?

lena1978

как-то так:
fa, b, c = (-b+1-|sign(a^2+b^2)|, a, c)
типо всё крутим вокруг оси z. а на самой оси ломаем.
я даже забыл, что такая функция есть.

lenmas

функцией min, если я правильно тебя понял. синтаксис примерно такой [x_o i_o] = min(x).
О, спасибо, приму на вооружение! :D

lenmas

как-то так:
fa, b, c = (-b+1-|sign(a^2+b^2)|, a, c)
типо всё крутим вокруг оси z. а на самой оси ломаем.
я даже забыл, что такая функция есть.
Да, неплохая идея. Жалко только, что для близких к оси z векторов мы получаем почти коллинеарные вектора. Из-за ошибок округления может пройти тест коллинеарности в прикладных пакетах. Лучше все-таки получать "почти ортогональные" вектора :)
То-есть написать то, что у тебя, но a^2+b^2 сравнивать не с нулем, а с c^2/2, например.

lena1978

ну да. главное этот конус повалить грамотно.

lenmas

Например, такой оператор:
fa,b,c=(-b*sgn(a^2+b^2-c^2a,c/2*(1+sgn(a^2+b^2-c^2
В общем, так не пойдет, так как в случае близости к оси z норма может почти в ноль уйти :(

lenmas

Еще один вариант
fa,b,c=(-b+1-sgn(a^2+b^2-eps^2a,c/2*(1+sgn(a^2+b^2-c^2
где eps>0 --- запас нормы, например, eps=1/2.

gala05

если для практических целей, то я бы поступил так: задал бы вектор с какими-то фиксированными координатами. Например, x=(Pi, E, 1/E). Вероятность того, что произвольный вектор будет коллинеарен этому, с практических соображений, можно считать равной нулю

griz_a

Тогда уж два ортогональных и выбирать тот из них, от которого дальше

lenmas

Тогда уж два ортогональных и выбирать тот из них, от которого дальше
Ну, я в принципе так и поступил. Только я выбирал из трех ортов :)

lena1978

вроде примерно так и поступает, если я правильно понял.

lenmas

если для практических целей, то я бы поступил так: задал бы вектор с какими-то фиксированными координатами. Например, x=(Pi, E, 1/E). Вероятность того, что произвольный вектор будет коллинеарен этому, с практических соображений, можно считать равной нулю
Ну, я ж сверху писал, что это не наш, математический метод :grin:
Нам надо чтобы 100 % и не плохо обусловленный был :)

gala05

тогда я согласен, что предложенное мной решение не подойдет
Оставить комментарий
Имя или ник:
Комментарий: